diff --git a/README.md b/README.md index f4ea299..330b168 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,31 @@ -# Support Groups (1.0.3) +# Support Groups (1.0.8) -Support Groups +This is a [Joomla 3.x](http://www.joomla.org/) component. + + ![Support Groups image](/administrator/components/com_supportgroups/assets/images/vdm-component.jpg "The Support Groups") + +Support Groups component adds the ability to your Joomla website to manage various support groups and their related details. Integration with Google Maps is one of its main features. # Build Details -+ *Company*: [Vast Development Method] (http://www.vdm.io) -+ *Author*: [Llewellyn van der Merwe] (mailto:llewellyn@vdm.io) -+ *Name*: [Support Groups] (http://www.vdm.io) ++ *Company*: [Vast Development Method](http://www.vdm.io) ++ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) ++ *Name*: [Support Groups](http://www.vdm.io) + *First Build*: 24th February, 2016 -+ *Last Build*: 6th March, 2016 -+ *Version*: 1.0.3 ++ *Last Build*: 5th May, 2018 ++ *Version*: 1.0.8 + *Copyright*: Copyright (C) 2015. All Rights Reserved + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html -## Build Time +# Component Number -**120 Hours** or **15 Eight Hour Days** (actual time the author saved - -due to [Automated Component Builder] (https://www.vdm.io/joomla-component-builder)) ++ *Line count*: **66093** ++ *File count*: **492** ++ *Folder count*: **98** -> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**, -> never making one mistake or taking any coffee break.) +> This **component** was build with a Joomla [Automated Component Builder](http://vdm.bz/component-builder). +> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) -+ *Line count*: **42865** -+ *File count*: **331** -+ *Folder count*: **76** +# Joomla Component Builder -**79 Hours** or **10 Eight Hour Days** (the actual time the author spent) - -> (with the following break down: -> **debugging @30hours** = codingtime / 4; -> **planning @17hours** = codingtime / 7; -> **mapping @12hours** = codingtime / 10; -> **office @20hours** = codingtime / 6;) - -**199 Hours** or **25 Eight Hour Days** -(a total of the realistic time frame for this project) - -> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**, -> with the normal everyday realities at the office, that includes the component planning, mapping & debugging.) - -Project duration: **5 weeks** or **1 months** - -> This **component** was build with a Joomla [Automated Component Builder] (https://www.vdm.io/joomla-component-builder). -> Developed by [Llewellyn van der Merwe] (mailto:joomla@vdm.io) \ No newline at end of file +For more information about JCB visit [VDM](http://vdm.bz/component-builder) Today! The future is here! \ No newline at end of file diff --git a/admin/README.txt b/admin/README.txt new file mode 100644 index 0000000..330b168 --- /dev/null +++ b/admin/README.txt @@ -0,0 +1,31 @@ +# Support Groups (1.0.8) + +This is a [Joomla 3.x](http://www.joomla.org/) component. + + ![Support Groups image](/administrator/components/com_supportgroups/assets/images/vdm-component.jpg "The Support Groups") + +Support Groups component adds the ability to your Joomla website to manage various support groups and their related details. Integration with Google Maps is one of its main features. + +# Build Details + ++ *Company*: [Vast Development Method](http://www.vdm.io) ++ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) ++ *Name*: [Support Groups](http://www.vdm.io) ++ *First Build*: 24th February, 2016 ++ *Last Build*: 5th May, 2018 ++ *Version*: 1.0.8 ++ *Copyright*: Copyright (C) 2015. All Rights Reserved ++ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + +# Component Number + ++ *Line count*: **66093** ++ *File count*: **492** ++ *Folder count*: **98** + +> This **component** was build with a Joomla [Automated Component Builder](http://vdm.bz/component-builder). +> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) + +# Joomla Component Builder + +For more information about JCB visit [VDM](http://vdm.bz/component-builder) Today! The future is here! \ No newline at end of file diff --git a/admin/access.xml b/admin/access.xml index 20b9863..daeb22b 100644 --- a/admin/access.xml +++ b/admin/access.xml @@ -15,23 +15,60 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -56,6 +93,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68,22 +140,21 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -105,9 +176,11 @@ + + @@ -118,19 +191,24 @@ + + - + + + + - + @@ -154,13 +232,16 @@ - - + + + + +
@@ -177,32 +258,93 @@
-
- - - - - - - - - - - - +
+ + + + + + + + + + + + + + +
-
- - - - - - - - - - - +
+ + + + + + + + + + + +
+
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +
@@ -215,6 +357,7 @@ +
diff --git a/admin/assets/css/additional_info.css b/admin/assets/css/additional_info.css new file mode 100644 index 0000000..ef1afd2 --- /dev/null +++ b/admin/assets/css/additional_info.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 16 of this MVC + @build 25th October, 2017 + @created 9th March, 2016 + @package Support Groups + @subpackage additional_info.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/additional_information.css b/admin/assets/css/additional_information.css new file mode 100644 index 0000000..7d44e05 --- /dev/null +++ b/admin/assets/css/additional_information.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 16 of this MVC + @build 25th October, 2017 + @created 9th March, 2016 + @package Support Groups + @subpackage additional_information.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/admin.css b/admin/assets/css/admin.css index 7910210..e6ba80d 100644 --- a/admin/assets/css/admin.css +++ b/admin/assets/css/admin.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage admin.css diff --git a/admin/assets/css/clinics.css b/admin/assets/css/area.css similarity index 91% rename from admin/assets/css/clinics.css rename to admin/assets/css/area.css index dfe5ce6..8494575 100644 --- a/admin/assets/css/clinics.css +++ b/admin/assets/css/area.css @@ -9,11 +9,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups - @subpackage clinics.css + @subpackage area.css @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html diff --git a/admin/assets/css/locations.css b/admin/assets/css/area_type.css similarity index 91% rename from admin/assets/css/locations.css rename to admin/assets/css/area_type.css index 8a769f7..137474e 100644 --- a/admin/assets/css/locations.css +++ b/admin/assets/css/area_type.css @@ -9,11 +9,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups - @subpackage locations.css + @subpackage area_type.css @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html diff --git a/admin/assets/css/area_types.css b/admin/assets/css/area_types.css new file mode 100644 index 0000000..ac2e564 --- /dev/null +++ b/admin/assets/css/area_types.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 + @package Support Groups + @subpackage area_types.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/location.css b/admin/assets/css/areas.css similarity index 91% rename from admin/assets/css/location.css rename to admin/assets/css/areas.css index 00df520..24c36ea 100644 --- a/admin/assets/css/location.css +++ b/admin/assets/css/areas.css @@ -9,11 +9,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups - @subpackage location.css + @subpackage areas.css @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html diff --git a/admin/assets/css/countries.css b/admin/assets/css/countries.css index 1cd34a9..12dd5e5 100644 --- a/admin/assets/css/countries.css +++ b/admin/assets/css/countries.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage countries.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/country.css b/admin/assets/css/country.css index 40a8f75..4aaed14 100644 --- a/admin/assets/css/country.css +++ b/admin/assets/css/country.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage country.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/currencies.css b/admin/assets/css/currencies.css index 23a0124..6c4bfb6 100644 --- a/admin/assets/css/currencies.css +++ b/admin/assets/css/currencies.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage currencies.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/currency.css b/admin/assets/css/currency.css index a8e703e..69d5d75 100644 --- a/admin/assets/css/currency.css +++ b/admin/assets/css/currency.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage currency.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/dashboard.css b/admin/assets/css/dashboard.css index e58b179..1226869 100644 --- a/admin/assets/css/dashboard.css +++ b/admin/assets/css/dashboard.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage dashboard.css diff --git a/admin/assets/css/facilities.css b/admin/assets/css/facilities.css new file mode 100644 index 0000000..3f31a00 --- /dev/null +++ b/admin/assets/css/facilities.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 + @package Support Groups + @subpackage facilities.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/facility.css b/admin/assets/css/facility.css new file mode 100644 index 0000000..43434b7 --- /dev/null +++ b/admin/assets/css/facility.css @@ -0,0 +1,32 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 + @package Support Groups + @subpackage facility.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + +#map +{ +width: 100%; +height: 500px; +} diff --git a/admin/assets/css/facility_type.css b/admin/assets/css/facility_type.css new file mode 100644 index 0000000..34e6e83 --- /dev/null +++ b/admin/assets/css/facility_type.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 2 of this MVC + @build 25th October, 2017 + @created 1st April, 2016 + @package Support Groups + @subpackage facility_type.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/facility_types.css b/admin/assets/css/facility_types.css new file mode 100644 index 0000000..046aee5 --- /dev/null +++ b/admin/assets/css/facility_types.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 2 of this MVC + @build 25th October, 2017 + @created 1st April, 2016 + @package Support Groups + @subpackage facility_types.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/help_document.css b/admin/assets/css/help_document.css index ef8e578..fa9669e 100644 --- a/admin/assets/css/help_document.css +++ b/admin/assets/css/help_document.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage help_document.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/help_documents.css b/admin/assets/css/help_documents.css index cd80498..f8380cf 100644 --- a/admin/assets/css/help_documents.css +++ b/admin/assets/css/help_documents.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage help_documents.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/info_type.css b/admin/assets/css/info_type.css new file mode 100644 index 0000000..eb41c91 --- /dev/null +++ b/admin/assets/css/info_type.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 3 of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 + @package Support Groups + @subpackage info_type.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/info_types.css b/admin/assets/css/info_types.css new file mode 100644 index 0000000..0614673 --- /dev/null +++ b/admin/assets/css/info_types.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 3 of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 + @package Support Groups + @subpackage info_types.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/payment.css b/admin/assets/css/payment.css index e8ae986..ecdc899 100644 --- a/admin/assets/css/payment.css +++ b/admin/assets/css/payment.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage payment.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/payments.css b/admin/assets/css/payments.css index 174964c..adc7db7 100644 --- a/admin/assets/css/payments.css +++ b/admin/assets/css/payments.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage payments.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/region.css b/admin/assets/css/region.css index d1bb6b0..3f5ffb7 100644 --- a/admin/assets/css/region.css +++ b/admin/assets/css/region.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage region.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/regions.css b/admin/assets/css/regions.css index 819822b..122d343 100644 --- a/admin/assets/css/regions.css +++ b/admin/assets/css/regions.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage regions.css @author Llewellyn van der Merwe diff --git a/admin/assets/css/support_group.css b/admin/assets/css/support_group.css index 022ead8..eb846cc 100644 --- a/admin/assets/css/support_group.css +++ b/admin/assets/css/support_group.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage support_group.css @author Llewellyn van der Merwe @@ -24,4 +24,9 @@ /* CSS Document */ - + +#map +{ +width: 100%; +height: 500px; +} diff --git a/admin/assets/css/support_groups.css b/admin/assets/css/support_groups.css index 68d1418..f440c71 100644 --- a/admin/assets/css/support_groups.css +++ b/admin/assets/css/support_groups.css @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage support_groups.css @author Llewellyn van der Merwe diff --git a/admin/assets/images/component-300.jpg b/admin/assets/images/component-300.jpg deleted file mode 100644 index 6bb95af..0000000 Binary files a/admin/assets/images/component-300.jpg and /dev/null differ diff --git a/admin/assets/images/icons/additional_info_add.png b/admin/assets/images/icons/additional_info_add.png new file mode 100644 index 0000000..a7d3466 Binary files /dev/null and b/admin/assets/images/icons/additional_info_add.png differ diff --git a/admin/assets/images/icons/additional_information.png b/admin/assets/images/icons/additional_information.png new file mode 100644 index 0000000..84f3783 Binary files /dev/null and b/admin/assets/images/icons/additional_information.png differ diff --git a/admin/assets/images/icons/area_add.png b/admin/assets/images/icons/area_add.png new file mode 100644 index 0000000..8fe539f Binary files /dev/null and b/admin/assets/images/icons/area_add.png differ diff --git a/admin/assets/images/icons/locations.png b/admin/assets/images/icons/areas.png similarity index 100% rename from admin/assets/images/icons/locations.png rename to admin/assets/images/icons/areas.png diff --git a/admin/assets/images/icons/clinics.png b/admin/assets/images/icons/clinics.png deleted file mode 100644 index b6fa082..0000000 Binary files a/admin/assets/images/icons/clinics.png and /dev/null differ diff --git a/admin/assets/images/icons/facilities.png b/admin/assets/images/icons/facilities.png new file mode 100644 index 0000000..61d46cf Binary files /dev/null and b/admin/assets/images/icons/facilities.png differ diff --git a/admin/assets/images/icons/facility_add.png b/admin/assets/images/icons/facility_add.png new file mode 100644 index 0000000..cce26f2 Binary files /dev/null and b/admin/assets/images/icons/facility_add.png differ diff --git a/admin/assets/images/icons/region_add.png b/admin/assets/images/icons/region_add.png new file mode 100644 index 0000000..7e99d4e Binary files /dev/null and b/admin/assets/images/icons/region_add.png differ diff --git a/admin/assets/images/vdm-component.jpg b/admin/assets/images/vdm-component.jpg new file mode 100644 index 0000000..387b5eb Binary files /dev/null and b/admin/assets/images/vdm-component.jpg differ diff --git a/admin/assets/js/admin.js b/admin/assets/js/admin.js index e69de29..6842788 100644 --- a/admin/assets/js/admin.js +++ b/admin/assets/js/admin.js @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version 1.0.8 + @build 5th May, 2018 + @created 24th February, 2016 + @package Support Groups + @subpackage admin.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* JS Document */ diff --git a/admin/config.xml b/admin/config.xml index c3163ac..aa4e04c 100644 --- a/admin/config.xml +++ b/admin/config.xml @@ -1,6 +1,8 @@
@@ -44,6 +46,60 @@ default="10" /> + + + + + + + + + + + + + + + + + + + + + + + + + @@ -113,6 +169,134 @@ " +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
input->getCmd('view', 'Supportgroups'); + $view = $this->input->getCmd('view', 'supportgroups'); $data = $this->getViewRelation($view); $layout = $this->input->get('layout', null, 'WORD'); $id = $this->input->getInt('id'); // Check for edit form. - if(SupportgroupsHelper::checkArray($data)) - { - if ($data['edit'] && $layout == 'edit' && !$this->checkEditId('com_supportgroups.edit.'.$data['view'], $id)) - { - // Somehow the person just went to the form - we don't allow that. - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); - $this->setMessage($this->getError(), 'error'); - // check if item was opend from other then its own list view - $ref = $this->input->getCmd('ref', 0); - $refid = $this->input->getInt('refid', 0); - // set redirect - if ($refid > 0 && SupportgroupsHelper::checkString($ref)) - { - // redirect to item of ref - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view='.(string)$ref.'&layout=edit&id='.(int)$refid, false)); - } - elseif (SupportgroupsHelper::checkString($ref)) - { + if(SupportgroupsHelper::checkArray($data)) + { + if ($data['edit'] && $layout == 'edit' && !$this->checkEditId('com_supportgroups.edit.'.$data['view'], $id)) + { + // Somehow the person just went to the form - we don't allow that. + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); + $this->setMessage($this->getError(), 'error'); + // check if item was opend from other then its own list view + $ref = $this->input->getCmd('ref', 0); + $refid = $this->input->getInt('refid', 0); + // set redirect + if ($refid > 0 && SupportgroupsHelper::checkString($ref)) + { + // redirect to item of ref + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view='.(string)$ref.'&layout=edit&id='.(int)$refid, false)); + } + elseif (SupportgroupsHelper::checkString($ref)) + { - // redirect to ref - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view='.(string)$ref, false)); - } - else - { - // normal redirect back to the list view - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view='.$data['views'], false)); - } + // redirect to ref + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view='.(string)$ref, false)); + } + else + { + // normal redirect back to the list view + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view='.$data['views'], false)); + } - return false; - } - } + return false; + } + } return parent::display($cachable, $urlparams); } protected function getViewRelation($view) { - if (SupportgroupsHelper::checkString($view)) - { - $views = array( + // check the we have a value + if (SupportgroupsHelper::checkString($view)) + { + // the view relationships + $views = array( 'support_group' => 'support_groups', 'payment' => 'payments', - 'clinic' => 'clinics', - 'location' => 'locations', + 'facility' => 'facilities', + 'facility_type' => 'facility_types', + 'additional_info' => 'additional_information', + 'info_type' => 'info_types', + 'area' => 'areas', + 'area_type' => 'area_types', 'region' => 'regions', 'country' => 'countries', 'currency' => 'currencies', 'help_document' => 'help_documents' - ); - // check if this is a list view - if (in_array($view,$views)) - { - return array('edit' => false, 'view' => array_search($view,$views), 'views' => $view); - } - // check if it is an edit view - elseif (array_key_exists($view,$views)) - { - return array('edit' => true, 'view' => $view, 'views' => $views[$view]); - } - } + ); + // check if this is a list view + if (in_array($view, $views)) + { + // this is a list view + return array('edit' => false, 'view' => array_search($view,$views), 'views' => $view); + } + // check if it is an edit view + elseif (array_key_exists($view, $views)) + { + // this is a edit view + return array('edit' => true, 'view' => $view, 'views' => $views[$view]); + } + } return false; } } diff --git a/admin/controllers/additional_info.php b/admin/controllers/additional_info.php new file mode 100644 index 0000000..c617714 --- /dev/null +++ b/admin/controllers/additional_info.php @@ -0,0 +1,326 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controllerform library +jimport('joomla.application.component.controllerform'); + +/** + * Additional_info Controller + */ +class SupportgroupsControllerAdditional_info extends JControllerForm +{ + /** + * Current or most recently performed task. + * + * @var string + * @since 12.2 + * @note Replaces _task. + */ + protected $task; + + public function __construct($config = array()) + { + $this->view_list = 'Additional_information'; // safeguard for setting the return view listing to the main view. + parent::__construct($config); + } + + /** + * Method override to check if you can add a new record. + * + * @param array $data An array of input data. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowAdd($data = array()) + { + // Access check. + $access = JFactory::getUser()->authorise('additional_info.access', 'com_supportgroups'); + if (!$access) + { + return false; + } + // In the absense of better information, revert to the component permissions. + return JFactory::getUser()->authorise('additional_info.create', $this->option); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // get user object. + $user = JFactory::getUser(); + // get record id. + $recordId = (int) isset($data[$key]) ? $data[$key] : 0; + + + // Access check. + $access = ($user->authorise('additional_info.access', 'com_supportgroups.additional_info.' . (int) $recordId) && $user->authorise('additional_info.access', 'com_supportgroups')); + if (!$access) + { + return false; + } + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('additional_info.edit', 'com_supportgroups.additional_info.' . (int) $recordId); + if (!$permission) + { + if ($user->authorise('additional_info.edit.own', 'com_supportgroups.additional_info.' . $recordId)) + { + // Now test the owner is the user. + $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; + if (empty($ownerId)) + { + // Need to do a lookup from the model. + $record = $this->getModel()->getItem($recordId); + + if (empty($record)) + { + return false; + } + $ownerId = $record->created_by; + } + + // If the owner matches 'me' then allow. + if ($ownerId == $user->id) + { + if ($user->authorise('additional_info.edit.own', 'com_supportgroups')) + { + return true; + } + } + } + return false; + } + } + // Since there is no permission, revert to the component permissions. + return $user->authorise('additional_info.edit', $this->option); + } + + /** + * Gets the URL arguments to append to an item redirect. + * + * @param integer $recordId The primary key id for the item. + * @param string $urlVar The name of the URL variable for the id. + * + * @return string The arguments to append to the redirect URL. + * + * @since 12.2 + */ + protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') + { + $tmpl = $this->input->get('tmpl'); + $layout = $this->input->get('layout', 'edit', 'string'); + + $ref = $this->input->get('ref', 0, 'string'); + $refid = $this->input->get('refid', 0, 'int'); + + // Setup redirect info. + + $append = ''; + + if ($refid) + { + $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; + } + elseif ($ref) + { + $append .= '&ref='.(string)$ref; + } + + if ($tmpl) + { + $append .= '&tmpl=' . $tmpl; + } + + if ($layout) + { + $append .= '&layout=' . $layout; + } + + if ($recordId) + { + $append .= '&' . $urlVar . '=' . $recordId; + } + + return $append; + } + + /** + * Method to run batch operations. + * + * @param object $model The model. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + public function batch($model = null) + { + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Set the model + $model = $this->getModel('Additional_info', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=additional_information' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method to cancel an edit. + * + * @param string $key The name of the primary key of the URL variable. + * + * @return boolean True if access level checks pass, false otherwise. + * + * @since 12.2 + */ + public function cancel($key = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + $cancel = parent::cancel($key); + + if ($cancel) + { + if ($this->refid) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + } + else + { + // Redirect to the items screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_list, false + ) + ); + } + return $cancel; + } + + /** + * Method to save a record. + * + * @param string $key The name of the primary key of the URL variable. + * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). + * + * @return boolean True if successful, false otherwise. + * + * @since 12.2 + */ + public function save($key = null, $urlVar = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } + + $saved = parent::save($key, $urlVar); + + if ($this->refid && $saved) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref && $saved) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + return $saved; + } + + /** + * Function that allows child controller access to model data + * after the data has been saved. + * + * @param JModel &$model The data model object. + * @param array $validData The validated data. + * + * @return void + * + * @since 11.1 + */ + protected function postSaveHook(JModelLegacy $model, $validData = array()) + { + return; + } + +} diff --git a/admin/controllers/additional_information.php b/admin/controllers/additional_information.php new file mode 100644 index 0000000..fe6289c --- /dev/null +++ b/admin/controllers/additional_information.php @@ -0,0 +1,111 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Additional_information Controller + */ +class SupportgroupsControllerAdditional_information extends JControllerAdmin +{ + protected $text_prefix = 'COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION'; + /** + * Proxy for getModel. + * @since 2.5 + */ + public function getModel($name = 'Additional_info', $prefix = 'SupportgroupsModel', $config = array()) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } + + public function exportData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if export is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('additional_info.export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) + { + // Get the input + $input = JFactory::getApplication()->input; + $pks = $input->post->get('cid', array(), 'array'); + // Sanitize the input + JArrayHelper::toInteger($pks); + // Get the model + $model = $this->getModel('Additional_information'); + // get the data to export + $data = $model->getExportData($pks); + if (SupportgroupsHelper::checkArray($data)) + { + // now set the data to the spreadsheet + $date = JFactory::getDate(); + SupportgroupsHelper::xls($data,'Additional_information_'.$date->format('jS_F_Y'),'Additional information exported ('.$date->format('jS F, Y').')','additional information'); + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_EXPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=additional_information', false), $message, 'error'); + return; + } + + + public function importData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if import is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('additional_info.import', 'com_supportgroups') && $user->authorise('core.import', 'com_supportgroups')) + { + // Get the import model + $model = $this->getModel('Additional_information'); + // get the headers to import + $headers = $model->getExImPortHeaders(); + if (SupportgroupsHelper::checkObject($headers)) + { + // Load headers to session. + $session = JFactory::getSession(); + $headers = json_encode($headers); + $session->set('additional_info_VDM_IMPORTHEADERS', $headers); + $session->set('backto_VDM_IMPORT', 'additional_information'); + $session->set('dataType_VDM_IMPORTINTO', 'additional_info'); + // Redirect to import view. + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_ADDITIONAL_INFORMATION'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=import', false), $message); + return; + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=additional_information', false), $message, 'error'); + return; + } +} diff --git a/admin/controllers/ajax.json.php b/admin/controllers/ajax.json.php new file mode 100644 index 0000000..07b602a --- /dev/null +++ b/admin/controllers/ajax.json.php @@ -0,0 +1,151 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controllerform library +jimport('joomla.application.component.controller'); + +/** + * Supportgroups Ajax Controller + */ +class SupportgroupsControllerAjax extends JControllerLegacy +{ + public function __construct($config) + { + parent::__construct($config); + // make sure all json stuff are set + JFactory::getDocument()->setMimeEncoding( 'application/json' ); + JResponse::setHeader('Content-Disposition','attachment;filename="getajax.json"'); + JResponse::setHeader("Access-Control-Allow-Origin", "*"); + // load the tasks + $this->registerTask('isNew', 'ajax'); + $this->registerTask('isRead', 'ajax'); + } + + public function ajax() + { + $user = JFactory::getUser(); + $jinput = JFactory::getApplication()->input; + // Check Token! + $token = JSession::getFormToken(); + $call_token = $jinput->get('token', 0, 'ALNUM'); + if($token == $call_token) + { + $task = $this->getTask(); + switch($task) + { + case 'isNew': + try + { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); + $noticeValue = $jinput->get('notice', NULL, 'STRING'); + if($noticeValue && $user->id != 0) + { + $result = $this->getModel('ajax')->isNew($noticeValue); + } + else + { + $result = false; + } + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback . "(".json_encode($result).");"; + } + elseif($returnRaw) + { + echo json_encode($result); + } + else + { + echo "(".json_encode($result).");"; + } + } + catch(Exception $e) + { + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback."(".json_encode($e).");"; + } + else + { + echo "(".json_encode($e).");"; + } + } + break; + case 'isRead': + try + { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); + $noticeValue = $jinput->get('notice', NULL, 'STRING'); + if($noticeValue && $user->id != 0) + { + $result = $this->getModel('ajax')->isRead($noticeValue); + } + else + { + $result = false; + } + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback . "(".json_encode($result).");"; + } + elseif($returnRaw) + { + echo json_encode($result); + } + else + { + echo "(".json_encode($result).");"; + } + } + catch(Exception $e) + { + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback."(".json_encode($e).");"; + } + else + { + echo "(".json_encode($e).");"; + } + } + break; + } + } + else + { + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback."(".json_encode(false).");"; + } + else + { + echo "(".json_encode(false).");"; + } + } + } +} diff --git a/admin/controllers/clinic.php b/admin/controllers/area.php similarity index 82% rename from admin/controllers/clinic.php rename to admin/controllers/area.php index dd3a3bd..532f6cb 100644 --- a/admin/controllers/clinic.php +++ b/admin/controllers/area.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups - @subpackage clinic.php + @subpackage area.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -30,9 +30,9 @@ defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.controllerform'); /** - * Clinic Controller + * Area Controller */ -class SupportgroupsControllerClinic extends JControllerForm +class SupportgroupsControllerArea extends JControllerForm { /** * Current or most recently performed task. @@ -45,7 +45,7 @@ class SupportgroupsControllerClinic extends JControllerForm public function __construct($config = array()) { - $this->view_list = 'Clinics'; // safeguard for setting the return view listing to the main view. + $this->view_list = 'Areas'; // safeguard for setting the return view listing to the main view. parent::__construct($config); } @@ -61,13 +61,13 @@ class SupportgroupsControllerClinic extends JControllerForm protected function allowAdd($data = array()) { // Access check. - $access = JFactory::getUser()->authorise('clinic.access', 'com_supportgroups'); + $access = JFactory::getUser()->authorise('area.access', 'com_supportgroups'); if (!$access) { return false; } // In the absense of better information, revert to the component permissions. - return JFactory::getUser()->authorise('clinic.create', $this->option); + return JFactory::getUser()->authorise('area.create', $this->option); } /** @@ -89,7 +89,7 @@ class SupportgroupsControllerClinic extends JControllerForm // Access check. - $access = ($user->authorise('clinic.access', 'com_supportgroups.clinic.' . (int) $recordId) && $user->authorise('clinic.access', 'com_supportgroups')); + $access = ($user->authorise('area.access', 'com_supportgroups.area.' . (int) $recordId) && $user->authorise('area.access', 'com_supportgroups')); if (!$access) { return false; @@ -98,10 +98,10 @@ class SupportgroupsControllerClinic extends JControllerForm if ($recordId) { // The record has been set. Check the record permissions. - $permission = $user->authorise('clinic.edit', 'com_supportgroups.clinic.' . (int) $recordId); - if (!$permission && !is_null($permission)) + $permission = $user->authorise('area.edit', 'com_supportgroups.area.' . (int) $recordId); + if (!$permission) { - if ($user->authorise('clinic.edit.own', 'com_supportgroups.clinic.' . $recordId)) + if ($user->authorise('area.edit.own', 'com_supportgroups.area.' . $recordId)) { // Now test the owner is the user. $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; @@ -120,7 +120,7 @@ class SupportgroupsControllerClinic extends JControllerForm // If the owner matches 'me' then allow. if ($ownerId == $user->id) { - if ($user->authorise('clinic.edit.own', 'com_supportgroups')) + if ($user->authorise('area.edit.own', 'com_supportgroups')) { return true; } @@ -130,7 +130,7 @@ class SupportgroupsControllerClinic extends JControllerForm } } // Since there is no permission, revert to the component permissions. - return $user->authorise('clinic.edit', $this->option); + return $user->authorise('area.edit', $this->option); } /** @@ -159,10 +159,10 @@ class SupportgroupsControllerClinic extends JControllerForm { $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; } - elseif ($ref) - { + elseif ($ref) + { $append .= '&ref='.(string)$ref; - } + } if ($tmpl) { @@ -196,10 +196,10 @@ class SupportgroupsControllerClinic extends JControllerForm JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Set the model - $model = $this->getModel('Clinic', '', array()); + $model = $this->getModel('Area', '', array()); // Preset the redirect - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=clinics' . $this->getRedirectToListAppend(), false)); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=areas' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } @@ -274,11 +274,11 @@ class SupportgroupsControllerClinic extends JControllerForm $this->ref = $this->input->get('ref', 0, 'word'); $this->refid = $this->input->get('refid', 0, 'int'); - if ($this->ref || $this->refid) - { - // to make sure the item is checkedin on redirect - $this->task = 'save'; - } + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } $saved = parent::save($key, $urlVar); diff --git a/admin/controllers/area_type.php b/admin/controllers/area_type.php new file mode 100644 index 0000000..a43ef5a --- /dev/null +++ b/admin/controllers/area_type.php @@ -0,0 +1,326 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controllerform library +jimport('joomla.application.component.controllerform'); + +/** + * Area_type Controller + */ +class SupportgroupsControllerArea_type extends JControllerForm +{ + /** + * Current or most recently performed task. + * + * @var string + * @since 12.2 + * @note Replaces _task. + */ + protected $task; + + public function __construct($config = array()) + { + $this->view_list = 'Area_types'; // safeguard for setting the return view listing to the main view. + parent::__construct($config); + } + + /** + * Method override to check if you can add a new record. + * + * @param array $data An array of input data. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowAdd($data = array()) + { + // Access check. + $access = JFactory::getUser()->authorise('area_type.access', 'com_supportgroups'); + if (!$access) + { + return false; + } + // In the absense of better information, revert to the component permissions. + return JFactory::getUser()->authorise('area_type.create', $this->option); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // get user object. + $user = JFactory::getUser(); + // get record id. + $recordId = (int) isset($data[$key]) ? $data[$key] : 0; + + + // Access check. + $access = ($user->authorise('area_type.access', 'com_supportgroups.area_type.' . (int) $recordId) && $user->authorise('area_type.access', 'com_supportgroups')); + if (!$access) + { + return false; + } + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('area_type.edit', 'com_supportgroups.area_type.' . (int) $recordId); + if (!$permission) + { + if ($user->authorise('area_type.edit.own', 'com_supportgroups.area_type.' . $recordId)) + { + // Now test the owner is the user. + $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; + if (empty($ownerId)) + { + // Need to do a lookup from the model. + $record = $this->getModel()->getItem($recordId); + + if (empty($record)) + { + return false; + } + $ownerId = $record->created_by; + } + + // If the owner matches 'me' then allow. + if ($ownerId == $user->id) + { + if ($user->authorise('area_type.edit.own', 'com_supportgroups')) + { + return true; + } + } + } + return false; + } + } + // Since there is no permission, revert to the component permissions. + return $user->authorise('area_type.edit', $this->option); + } + + /** + * Gets the URL arguments to append to an item redirect. + * + * @param integer $recordId The primary key id for the item. + * @param string $urlVar The name of the URL variable for the id. + * + * @return string The arguments to append to the redirect URL. + * + * @since 12.2 + */ + protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') + { + $tmpl = $this->input->get('tmpl'); + $layout = $this->input->get('layout', 'edit', 'string'); + + $ref = $this->input->get('ref', 0, 'string'); + $refid = $this->input->get('refid', 0, 'int'); + + // Setup redirect info. + + $append = ''; + + if ($refid) + { + $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; + } + elseif ($ref) + { + $append .= '&ref='.(string)$ref; + } + + if ($tmpl) + { + $append .= '&tmpl=' . $tmpl; + } + + if ($layout) + { + $append .= '&layout=' . $layout; + } + + if ($recordId) + { + $append .= '&' . $urlVar . '=' . $recordId; + } + + return $append; + } + + /** + * Method to run batch operations. + * + * @param object $model The model. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + public function batch($model = null) + { + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Set the model + $model = $this->getModel('Area_type', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=area_types' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method to cancel an edit. + * + * @param string $key The name of the primary key of the URL variable. + * + * @return boolean True if access level checks pass, false otherwise. + * + * @since 12.2 + */ + public function cancel($key = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + $cancel = parent::cancel($key); + + if ($cancel) + { + if ($this->refid) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + } + else + { + // Redirect to the items screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_list, false + ) + ); + } + return $cancel; + } + + /** + * Method to save a record. + * + * @param string $key The name of the primary key of the URL variable. + * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). + * + * @return boolean True if successful, false otherwise. + * + * @since 12.2 + */ + public function save($key = null, $urlVar = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } + + $saved = parent::save($key, $urlVar); + + if ($this->refid && $saved) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref && $saved) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + return $saved; + } + + /** + * Function that allows child controller access to model data + * after the data has been saved. + * + * @param JModel &$model The data model object. + * @param array $validData The validated data. + * + * @return void + * + * @since 11.1 + */ + protected function postSaveHook(JModelLegacy $model, $validData = array()) + { + return; + } + +} diff --git a/admin/controllers/area_types.php b/admin/controllers/area_types.php new file mode 100644 index 0000000..4726fce --- /dev/null +++ b/admin/controllers/area_types.php @@ -0,0 +1,111 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Area_types Controller + */ +class SupportgroupsControllerArea_types extends JControllerAdmin +{ + protected $text_prefix = 'COM_SUPPORTGROUPS_AREA_TYPES'; + /** + * Proxy for getModel. + * @since 2.5 + */ + public function getModel($name = 'Area_type', $prefix = 'SupportgroupsModel', $config = array()) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } + + public function exportData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if export is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('area_type.export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) + { + // Get the input + $input = JFactory::getApplication()->input; + $pks = $input->post->get('cid', array(), 'array'); + // Sanitize the input + JArrayHelper::toInteger($pks); + // Get the model + $model = $this->getModel('Area_types'); + // get the data to export + $data = $model->getExportData($pks); + if (SupportgroupsHelper::checkArray($data)) + { + // now set the data to the spreadsheet + $date = JFactory::getDate(); + SupportgroupsHelper::xls($data,'Area_types_'.$date->format('jS_F_Y'),'Area types exported ('.$date->format('jS F, Y').')','area types'); + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_EXPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=area_types', false), $message, 'error'); + return; + } + + + public function importData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if import is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('area_type.import', 'com_supportgroups') && $user->authorise('core.import', 'com_supportgroups')) + { + // Get the import model + $model = $this->getModel('Area_types'); + // get the headers to import + $headers = $model->getExImPortHeaders(); + if (SupportgroupsHelper::checkObject($headers)) + { + // Load headers to session. + $session = JFactory::getSession(); + $headers = json_encode($headers); + $session->set('area_type_VDM_IMPORTHEADERS', $headers); + $session->set('backto_VDM_IMPORT', 'area_types'); + $session->set('dataType_VDM_IMPORTINTO', 'area_type'); + // Redirect to import view. + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_AREA_TYPES'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=import', false), $message); + return; + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=area_types', false), $message, 'error'); + return; + } +} diff --git a/admin/controllers/clinics.php b/admin/controllers/areas.php similarity index 76% rename from admin/controllers/clinics.php rename to admin/controllers/areas.php index aec2819..6966040 100644 --- a/admin/controllers/clinics.php +++ b/admin/controllers/areas.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups - @subpackage clinics.php + @subpackage areas.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -30,16 +30,16 @@ defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.controlleradmin'); /** - * Clinics Controller + * Areas Controller */ -class SupportgroupsControllerClinics extends JControllerAdmin +class SupportgroupsControllerAreas extends JControllerAdmin { - protected $text_prefix = 'COM_SUPPORTGROUPS_CLINICS'; + protected $text_prefix = 'COM_SUPPORTGROUPS_AREAS'; /** * Proxy for getModel. * @since 2.5 */ - public function getModel($name = 'Clinic', $prefix = 'SupportgroupsModel', $config = array()) + public function getModel($name = 'Area', $prefix = 'SupportgroupsModel', $config = array()) { $model = parent::getModel($name, $prefix, array('ignore_request' => true)); @@ -52,7 +52,7 @@ class SupportgroupsControllerClinics extends JControllerAdmin JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); // check if export is allowed for this user. $user = JFactory::getUser(); - if ($user->authorise('clinic.export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) + if ($user->authorise('area.export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) { // Get the input $input = JFactory::getApplication()->input; @@ -60,19 +60,19 @@ class SupportgroupsControllerClinics extends JControllerAdmin // Sanitize the input JArrayHelper::toInteger($pks); // Get the model - $model = $this->getModel('Clinics'); + $model = $this->getModel('Areas'); // get the data to export $data = $model->getExportData($pks); if (SupportgroupsHelper::checkArray($data)) { // now set the data to the spreadsheet $date = JFactory::getDate(); - SupportgroupsHelper::xls($data,'Clinics_'.$date->format('jS_F_Y'),'Clinics exported ('.$date->format('jS F, Y').')','clinics'); + SupportgroupsHelper::xls($data,'Areas_'.$date->format('jS_F_Y'),'Areas exported ('.$date->format('jS F, Y').')','areas'); } } // Redirect to the list screen with error. $message = JText::_('COM_SUPPORTGROUPS_EXPORT_FAILED'); - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=clinics', false), $message, 'error'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=areas', false), $message, 'error'); return; } @@ -83,10 +83,10 @@ class SupportgroupsControllerClinics extends JControllerAdmin JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); // check if import is allowed for this user. $user = JFactory::getUser(); - if ($user->authorise('clinic.import', 'com_supportgroups') && $user->authorise('core.import', 'com_supportgroups')) + if ($user->authorise('area.import', 'com_supportgroups') && $user->authorise('core.import', 'com_supportgroups')) { // Get the import model - $model = $this->getModel('Clinics'); + $model = $this->getModel('Areas'); // get the headers to import $headers = $model->getExImPortHeaders(); if (SupportgroupsHelper::checkObject($headers)) @@ -94,18 +94,18 @@ class SupportgroupsControllerClinics extends JControllerAdmin // Load headers to session. $session = JFactory::getSession(); $headers = json_encode($headers); - $session->set('clinic_VDM_IMPORTHEADERS', $headers); - $session->set('backto_VDM_IMPORT', 'clinics'); - $session->set('dataType_VDM_IMPORTINTO', 'clinic'); + $session->set('area_VDM_IMPORTHEADERS', $headers); + $session->set('backto_VDM_IMPORT', 'areas'); + $session->set('dataType_VDM_IMPORTINTO', 'area'); // Redirect to import view. - $message = JText::_('COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_CLINICS'); + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_AREAS'); $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=import', false), $message); return; } } // Redirect to the list screen with error. $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=clinics', false), $message, 'error'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=areas', false), $message, 'error'); return; - } + } } diff --git a/admin/controllers/countries.php b/admin/controllers/countries.php index b7b2676..7f9fc01 100644 --- a/admin/controllers/countries.php +++ b/admin/controllers/countries.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage countries.php @author Llewellyn van der Merwe @@ -107,5 +107,5 @@ class SupportgroupsControllerCountries extends JControllerAdmin $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=countries', false), $message, 'error'); return; - } + } } diff --git a/admin/controllers/country.php b/admin/controllers/country.php index f784ece..e8559ed 100644 --- a/admin/controllers/country.php +++ b/admin/controllers/country.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage country.php @author Llewellyn van der Merwe @@ -99,7 +99,7 @@ class SupportgroupsControllerCountry extends JControllerForm { // The record has been set. Check the record permissions. $permission = $user->authorise('country.edit', 'com_supportgroups.country.' . (int) $recordId); - if (!$permission && !is_null($permission)) + if (!$permission) { if ($user->authorise('country.edit.own', 'com_supportgroups.country.' . $recordId)) { @@ -159,10 +159,10 @@ class SupportgroupsControllerCountry extends JControllerForm { $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; } - elseif ($ref) - { + elseif ($ref) + { $append .= '&ref='.(string)$ref; - } + } if ($tmpl) { @@ -274,11 +274,11 @@ class SupportgroupsControllerCountry extends JControllerForm $this->ref = $this->input->get('ref', 0, 'word'); $this->refid = $this->input->get('refid', 0, 'int'); - if ($this->ref || $this->refid) - { - // to make sure the item is checkedin on redirect - $this->task = 'save'; - } + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } $saved = parent::save($key, $urlVar); diff --git a/admin/controllers/currencies.php b/admin/controllers/currencies.php index 84e3894..48916a1 100644 --- a/admin/controllers/currencies.php +++ b/admin/controllers/currencies.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage currencies.php @author Llewellyn van der Merwe @@ -107,5 +107,5 @@ class SupportgroupsControllerCurrencies extends JControllerAdmin $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=currencies', false), $message, 'error'); return; - } + } } diff --git a/admin/controllers/currency.php b/admin/controllers/currency.php index dd0981f..8386eb0 100644 --- a/admin/controllers/currency.php +++ b/admin/controllers/currency.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage currency.php @author Llewellyn van der Merwe @@ -99,7 +99,7 @@ class SupportgroupsControllerCurrency extends JControllerForm { // The record has been set. Check the record permissions. $permission = $user->authorise('currency.edit', 'com_supportgroups.currency.' . (int) $recordId); - if (!$permission && !is_null($permission)) + if (!$permission) { if ($user->authorise('currency.edit.own', 'com_supportgroups.currency.' . $recordId)) { @@ -159,10 +159,10 @@ class SupportgroupsControllerCurrency extends JControllerForm { $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; } - elseif ($ref) - { + elseif ($ref) + { $append .= '&ref='.(string)$ref; - } + } if ($tmpl) { @@ -274,11 +274,11 @@ class SupportgroupsControllerCurrency extends JControllerForm $this->ref = $this->input->get('ref', 0, 'word'); $this->refid = $this->input->get('refid', 0, 'int'); - if ($this->ref || $this->refid) - { - // to make sure the item is checkedin on redirect - $this->task = 'save'; - } + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } $saved = parent::save($key, $urlVar); diff --git a/admin/controllers/locations.php b/admin/controllers/facilities.php similarity index 78% rename from admin/controllers/locations.php rename to admin/controllers/facilities.php index 4cad660..277af31 100644 --- a/admin/controllers/locations.php +++ b/admin/controllers/facilities.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 @package Support Groups - @subpackage locations.php + @subpackage facilities.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -30,16 +30,16 @@ defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.controlleradmin'); /** - * Locations Controller + * Facilities Controller */ -class SupportgroupsControllerLocations extends JControllerAdmin +class SupportgroupsControllerFacilities extends JControllerAdmin { - protected $text_prefix = 'COM_SUPPORTGROUPS_LOCATIONS'; + protected $text_prefix = 'COM_SUPPORTGROUPS_FACILITIES'; /** * Proxy for getModel. * @since 2.5 */ - public function getModel($name = 'Location', $prefix = 'SupportgroupsModel', $config = array()) + public function getModel($name = 'Facility', $prefix = 'SupportgroupsModel', $config = array()) { $model = parent::getModel($name, $prefix, array('ignore_request' => true)); @@ -52,7 +52,7 @@ class SupportgroupsControllerLocations extends JControllerAdmin JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); // check if export is allowed for this user. $user = JFactory::getUser(); - if ($user->authorise('location.export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) + if ($user->authorise('facility.export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) { // Get the input $input = JFactory::getApplication()->input; @@ -60,19 +60,19 @@ class SupportgroupsControllerLocations extends JControllerAdmin // Sanitize the input JArrayHelper::toInteger($pks); // Get the model - $model = $this->getModel('Locations'); + $model = $this->getModel('Facilities'); // get the data to export $data = $model->getExportData($pks); if (SupportgroupsHelper::checkArray($data)) { // now set the data to the spreadsheet $date = JFactory::getDate(); - SupportgroupsHelper::xls($data,'Locations_'.$date->format('jS_F_Y'),'Locations exported ('.$date->format('jS F, Y').')','locations'); + SupportgroupsHelper::xls($data,'Facilities_'.$date->format('jS_F_Y'),'Facilities exported ('.$date->format('jS F, Y').')','facilities'); } } // Redirect to the list screen with error. $message = JText::_('COM_SUPPORTGROUPS_EXPORT_FAILED'); - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=locations', false), $message, 'error'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=facilities', false), $message, 'error'); return; } @@ -83,10 +83,10 @@ class SupportgroupsControllerLocations extends JControllerAdmin JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); // check if import is allowed for this user. $user = JFactory::getUser(); - if ($user->authorise('location.import', 'com_supportgroups') && $user->authorise('core.import', 'com_supportgroups')) + if ($user->authorise('facility.import', 'com_supportgroups') && $user->authorise('core.import', 'com_supportgroups')) { // Get the import model - $model = $this->getModel('Locations'); + $model = $this->getModel('Facilities'); // get the headers to import $headers = $model->getExImPortHeaders(); if (SupportgroupsHelper::checkObject($headers)) @@ -94,18 +94,18 @@ class SupportgroupsControllerLocations extends JControllerAdmin // Load headers to session. $session = JFactory::getSession(); $headers = json_encode($headers); - $session->set('location_VDM_IMPORTHEADERS', $headers); - $session->set('backto_VDM_IMPORT', 'locations'); - $session->set('dataType_VDM_IMPORTINTO', 'location'); + $session->set('facility_VDM_IMPORTHEADERS', $headers); + $session->set('backto_VDM_IMPORT', 'facilities'); + $session->set('dataType_VDM_IMPORTINTO', 'facility'); // Redirect to import view. - $message = JText::_('COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_LOCATIONS'); + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_FACILITIES'); $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=import', false), $message); return; } } // Redirect to the list screen with error. $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=locations', false), $message, 'error'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=facilities', false), $message, 'error'); return; - } + } } diff --git a/admin/controllers/location.php b/admin/controllers/facility.php similarity index 83% rename from admin/controllers/location.php rename to admin/controllers/facility.php index ece8de7..77151fb 100644 --- a/admin/controllers/location.php +++ b/admin/controllers/facility.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 @package Support Groups - @subpackage location.php + @subpackage facility.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -30,9 +30,9 @@ defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.controllerform'); /** - * Location Controller + * Facility Controller */ -class SupportgroupsControllerLocation extends JControllerForm +class SupportgroupsControllerFacility extends JControllerForm { /** * Current or most recently performed task. @@ -45,7 +45,7 @@ class SupportgroupsControllerLocation extends JControllerForm public function __construct($config = array()) { - $this->view_list = 'Locations'; // safeguard for setting the return view listing to the main view. + $this->view_list = 'Facilities'; // safeguard for setting the return view listing to the main view. parent::__construct($config); } @@ -61,13 +61,13 @@ class SupportgroupsControllerLocation extends JControllerForm protected function allowAdd($data = array()) { // Access check. - $access = JFactory::getUser()->authorise('location.access', 'com_supportgroups'); + $access = JFactory::getUser()->authorise('facility.access', 'com_supportgroups'); if (!$access) { return false; } // In the absense of better information, revert to the component permissions. - return JFactory::getUser()->authorise('location.create', $this->option); + return JFactory::getUser()->authorise('facility.create', $this->option); } /** @@ -89,7 +89,7 @@ class SupportgroupsControllerLocation extends JControllerForm // Access check. - $access = ($user->authorise('location.access', 'com_supportgroups.location.' . (int) $recordId) && $user->authorise('location.access', 'com_supportgroups')); + $access = ($user->authorise('facility.access', 'com_supportgroups.facility.' . (int) $recordId) && $user->authorise('facility.access', 'com_supportgroups')); if (!$access) { return false; @@ -98,10 +98,10 @@ class SupportgroupsControllerLocation extends JControllerForm if ($recordId) { // The record has been set. Check the record permissions. - $permission = $user->authorise('location.edit', 'com_supportgroups.location.' . (int) $recordId); - if (!$permission && !is_null($permission)) + $permission = $user->authorise('facility.edit', 'com_supportgroups.facility.' . (int) $recordId); + if (!$permission) { - if ($user->authorise('location.edit.own', 'com_supportgroups.location.' . $recordId)) + if ($user->authorise('facility.edit.own', 'com_supportgroups.facility.' . $recordId)) { // Now test the owner is the user. $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; @@ -120,7 +120,7 @@ class SupportgroupsControllerLocation extends JControllerForm // If the owner matches 'me' then allow. if ($ownerId == $user->id) { - if ($user->authorise('location.edit.own', 'com_supportgroups')) + if ($user->authorise('facility.edit.own', 'com_supportgroups')) { return true; } @@ -130,7 +130,7 @@ class SupportgroupsControllerLocation extends JControllerForm } } // Since there is no permission, revert to the component permissions. - return $user->authorise('location.edit', $this->option); + return $user->authorise('facility.edit', $this->option); } /** @@ -159,10 +159,10 @@ class SupportgroupsControllerLocation extends JControllerForm { $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; } - elseif ($ref) - { + elseif ($ref) + { $append .= '&ref='.(string)$ref; - } + } if ($tmpl) { @@ -196,10 +196,10 @@ class SupportgroupsControllerLocation extends JControllerForm JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); // Set the model - $model = $this->getModel('Location', '', array()); + $model = $this->getModel('Facility', '', array()); // Preset the redirect - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=locations' . $this->getRedirectToListAppend(), false)); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=facilities' . $this->getRedirectToListAppend(), false)); return parent::batch($model); } @@ -274,11 +274,11 @@ class SupportgroupsControllerLocation extends JControllerForm $this->ref = $this->input->get('ref', 0, 'word'); $this->refid = $this->input->get('refid', 0, 'int'); - if ($this->ref || $this->refid) - { - // to make sure the item is checkedin on redirect - $this->task = 'save'; - } + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } $saved = parent::save($key, $urlVar); diff --git a/admin/controllers/facility_type.php b/admin/controllers/facility_type.php new file mode 100644 index 0000000..7854d20 --- /dev/null +++ b/admin/controllers/facility_type.php @@ -0,0 +1,326 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controllerform library +jimport('joomla.application.component.controllerform'); + +/** + * Facility_type Controller + */ +class SupportgroupsControllerFacility_type extends JControllerForm +{ + /** + * Current or most recently performed task. + * + * @var string + * @since 12.2 + * @note Replaces _task. + */ + protected $task; + + public function __construct($config = array()) + { + $this->view_list = 'Facility_types'; // safeguard for setting the return view listing to the main view. + parent::__construct($config); + } + + /** + * Method override to check if you can add a new record. + * + * @param array $data An array of input data. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowAdd($data = array()) + { + // Access check. + $access = JFactory::getUser()->authorise('facility_type.access', 'com_supportgroups'); + if (!$access) + { + return false; + } + // In the absense of better information, revert to the component permissions. + return JFactory::getUser()->authorise('facility_type.create', $this->option); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // get user object. + $user = JFactory::getUser(); + // get record id. + $recordId = (int) isset($data[$key]) ? $data[$key] : 0; + + + // Access check. + $access = ($user->authorise('facility_type.access', 'com_supportgroups.facility_type.' . (int) $recordId) && $user->authorise('facility_type.access', 'com_supportgroups')); + if (!$access) + { + return false; + } + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('facility_type.edit', 'com_supportgroups.facility_type.' . (int) $recordId); + if (!$permission) + { + if ($user->authorise('facility_type.edit.own', 'com_supportgroups.facility_type.' . $recordId)) + { + // Now test the owner is the user. + $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; + if (empty($ownerId)) + { + // Need to do a lookup from the model. + $record = $this->getModel()->getItem($recordId); + + if (empty($record)) + { + return false; + } + $ownerId = $record->created_by; + } + + // If the owner matches 'me' then allow. + if ($ownerId == $user->id) + { + if ($user->authorise('facility_type.edit.own', 'com_supportgroups')) + { + return true; + } + } + } + return false; + } + } + // Since there is no permission, revert to the component permissions. + return $user->authorise('facility_type.edit', $this->option); + } + + /** + * Gets the URL arguments to append to an item redirect. + * + * @param integer $recordId The primary key id for the item. + * @param string $urlVar The name of the URL variable for the id. + * + * @return string The arguments to append to the redirect URL. + * + * @since 12.2 + */ + protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') + { + $tmpl = $this->input->get('tmpl'); + $layout = $this->input->get('layout', 'edit', 'string'); + + $ref = $this->input->get('ref', 0, 'string'); + $refid = $this->input->get('refid', 0, 'int'); + + // Setup redirect info. + + $append = ''; + + if ($refid) + { + $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; + } + elseif ($ref) + { + $append .= '&ref='.(string)$ref; + } + + if ($tmpl) + { + $append .= '&tmpl=' . $tmpl; + } + + if ($layout) + { + $append .= '&layout=' . $layout; + } + + if ($recordId) + { + $append .= '&' . $urlVar . '=' . $recordId; + } + + return $append; + } + + /** + * Method to run batch operations. + * + * @param object $model The model. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + public function batch($model = null) + { + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Set the model + $model = $this->getModel('Facility_type', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=facility_types' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method to cancel an edit. + * + * @param string $key The name of the primary key of the URL variable. + * + * @return boolean True if access level checks pass, false otherwise. + * + * @since 12.2 + */ + public function cancel($key = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + $cancel = parent::cancel($key); + + if ($cancel) + { + if ($this->refid) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + } + else + { + // Redirect to the items screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_list, false + ) + ); + } + return $cancel; + } + + /** + * Method to save a record. + * + * @param string $key The name of the primary key of the URL variable. + * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). + * + * @return boolean True if successful, false otherwise. + * + * @since 12.2 + */ + public function save($key = null, $urlVar = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } + + $saved = parent::save($key, $urlVar); + + if ($this->refid && $saved) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref && $saved) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + return $saved; + } + + /** + * Function that allows child controller access to model data + * after the data has been saved. + * + * @param JModel &$model The data model object. + * @param array $validData The validated data. + * + * @return void + * + * @since 11.1 + */ + protected function postSaveHook(JModelLegacy $model, $validData = array()) + { + return; + } + +} diff --git a/admin/controllers/facility_types.php b/admin/controllers/facility_types.php new file mode 100644 index 0000000..459a4e5 --- /dev/null +++ b/admin/controllers/facility_types.php @@ -0,0 +1,111 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Facility_types Controller + */ +class SupportgroupsControllerFacility_types extends JControllerAdmin +{ + protected $text_prefix = 'COM_SUPPORTGROUPS_FACILITY_TYPES'; + /** + * Proxy for getModel. + * @since 2.5 + */ + public function getModel($name = 'Facility_type', $prefix = 'SupportgroupsModel', $config = array()) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } + + public function exportData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if export is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('facility_type.export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) + { + // Get the input + $input = JFactory::getApplication()->input; + $pks = $input->post->get('cid', array(), 'array'); + // Sanitize the input + JArrayHelper::toInteger($pks); + // Get the model + $model = $this->getModel('Facility_types'); + // get the data to export + $data = $model->getExportData($pks); + if (SupportgroupsHelper::checkArray($data)) + { + // now set the data to the spreadsheet + $date = JFactory::getDate(); + SupportgroupsHelper::xls($data,'Facility_types_'.$date->format('jS_F_Y'),'Facility types exported ('.$date->format('jS F, Y').')','facility types'); + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_EXPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=facility_types', false), $message, 'error'); + return; + } + + + public function importData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if import is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('facility_type.import', 'com_supportgroups') && $user->authorise('core.import', 'com_supportgroups')) + { + // Get the import model + $model = $this->getModel('Facility_types'); + // get the headers to import + $headers = $model->getExImPortHeaders(); + if (SupportgroupsHelper::checkObject($headers)) + { + // Load headers to session. + $session = JFactory::getSession(); + $headers = json_encode($headers); + $session->set('facility_type_VDM_IMPORTHEADERS', $headers); + $session->set('backto_VDM_IMPORT', 'facility_types'); + $session->set('dataType_VDM_IMPORTINTO', 'facility_type'); + // Redirect to import view. + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_FACILITY_TYPES'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=import', false), $message); + return; + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=facility_types', false), $message, 'error'); + return; + } +} diff --git a/admin/controllers/help.php b/admin/controllers/help.php index ee529a1..997a31a 100644 --- a/admin/controllers/help.php +++ b/admin/controllers/help.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage help.php @@ -48,7 +48,8 @@ class SupportgroupsControllerHelp extends JControllerLegacy // Check Token! $token = JSession::getFormToken(); $call_token = $jinput->get('token', 0, 'ALNUM'); - if($user->id != 0 && $token == $call_token){ + if($user->id != 0 && $token == $call_token) + { $task = $this->getTask(); switch($task){ case 'getText': @@ -64,25 +65,25 @@ class SupportgroupsControllerHelp extends JControllerLegacy $result = ''; } echo $result; - // stop execution gracefully - jexit(); + // stop execution gracefully + jexit(); } - catch(Exception $e) + catch(Exception $e) { - // stop execution gracefully + // stop execution gracefully jexit(); } break; } } - else - { - // stop execution gracefully + else + { + // stop execution gracefully jexit(); } } - protected function getHelpDocumentText($id) + protected function getHelpDocumentText($id) { $db = JFactory::getDbo(); $query = $db->getQuery(true); diff --git a/admin/controllers/help_document.php b/admin/controllers/help_document.php index b7285ac..b5a4fdc 100644 --- a/admin/controllers/help_document.php +++ b/admin/controllers/help_document.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage help_document.php @author Llewellyn van der Merwe @@ -99,7 +99,7 @@ class SupportgroupsControllerHelp_document extends JControllerForm { // The record has been set. Check the record permissions. $permission = $user->authorise('help_document.edit', 'com_supportgroups.help_document.' . (int) $recordId); - if (!$permission && !is_null($permission)) + if (!$permission) { if ($user->authorise('help_document.edit.own', 'com_supportgroups.help_document.' . $recordId)) { @@ -159,10 +159,10 @@ class SupportgroupsControllerHelp_document extends JControllerForm { $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; } - elseif ($ref) - { + elseif ($ref) + { $append .= '&ref='.(string)$ref; - } + } if ($tmpl) { @@ -274,11 +274,11 @@ class SupportgroupsControllerHelp_document extends JControllerForm $this->ref = $this->input->get('ref', 0, 'word'); $this->refid = $this->input->get('refid', 0, 'int'); - if ($this->ref || $this->refid) - { - // to make sure the item is checkedin on redirect - $this->task = 'save'; - } + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } $saved = parent::save($key, $urlVar); diff --git a/admin/controllers/help_documents.php b/admin/controllers/help_documents.php index 2a587c2..33b5e8a 100644 --- a/admin/controllers/help_documents.php +++ b/admin/controllers/help_documents.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage help_documents.php @author Llewellyn van der Merwe @@ -107,5 +107,5 @@ class SupportgroupsControllerHelp_documents extends JControllerAdmin $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=help_documents', false), $message, 'error'); return; - } + } } diff --git a/admin/controllers/import.php b/admin/controllers/import.php index 5ed434f..1997c40 100644 --- a/admin/controllers/import.php +++ b/admin/controllers/import.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage import.php diff --git a/admin/controllers/info_type.php b/admin/controllers/info_type.php new file mode 100644 index 0000000..00e2405 --- /dev/null +++ b/admin/controllers/info_type.php @@ -0,0 +1,326 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controllerform library +jimport('joomla.application.component.controllerform'); + +/** + * Info_type Controller + */ +class SupportgroupsControllerInfo_type extends JControllerForm +{ + /** + * Current or most recently performed task. + * + * @var string + * @since 12.2 + * @note Replaces _task. + */ + protected $task; + + public function __construct($config = array()) + { + $this->view_list = 'Info_types'; // safeguard for setting the return view listing to the main view. + parent::__construct($config); + } + + /** + * Method override to check if you can add a new record. + * + * @param array $data An array of input data. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowAdd($data = array()) + { + // Access check. + $access = JFactory::getUser()->authorise('info_type.access', 'com_supportgroups'); + if (!$access) + { + return false; + } + // In the absense of better information, revert to the component permissions. + return JFactory::getUser()->authorise('info_type.create', $this->option); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // get user object. + $user = JFactory::getUser(); + // get record id. + $recordId = (int) isset($data[$key]) ? $data[$key] : 0; + + + // Access check. + $access = ($user->authorise('info_type.access', 'com_supportgroups.info_type.' . (int) $recordId) && $user->authorise('info_type.access', 'com_supportgroups')); + if (!$access) + { + return false; + } + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('info_type.edit', 'com_supportgroups.info_type.' . (int) $recordId); + if (!$permission) + { + if ($user->authorise('info_type.edit.own', 'com_supportgroups.info_type.' . $recordId)) + { + // Now test the owner is the user. + $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; + if (empty($ownerId)) + { + // Need to do a lookup from the model. + $record = $this->getModel()->getItem($recordId); + + if (empty($record)) + { + return false; + } + $ownerId = $record->created_by; + } + + // If the owner matches 'me' then allow. + if ($ownerId == $user->id) + { + if ($user->authorise('info_type.edit.own', 'com_supportgroups')) + { + return true; + } + } + } + return false; + } + } + // Since there is no permission, revert to the component permissions. + return $user->authorise('info_type.edit', $this->option); + } + + /** + * Gets the URL arguments to append to an item redirect. + * + * @param integer $recordId The primary key id for the item. + * @param string $urlVar The name of the URL variable for the id. + * + * @return string The arguments to append to the redirect URL. + * + * @since 12.2 + */ + protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') + { + $tmpl = $this->input->get('tmpl'); + $layout = $this->input->get('layout', 'edit', 'string'); + + $ref = $this->input->get('ref', 0, 'string'); + $refid = $this->input->get('refid', 0, 'int'); + + // Setup redirect info. + + $append = ''; + + if ($refid) + { + $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; + } + elseif ($ref) + { + $append .= '&ref='.(string)$ref; + } + + if ($tmpl) + { + $append .= '&tmpl=' . $tmpl; + } + + if ($layout) + { + $append .= '&layout=' . $layout; + } + + if ($recordId) + { + $append .= '&' . $urlVar . '=' . $recordId; + } + + return $append; + } + + /** + * Method to run batch operations. + * + * @param object $model The model. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + public function batch($model = null) + { + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Set the model + $model = $this->getModel('Info_type', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=info_types' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method to cancel an edit. + * + * @param string $key The name of the primary key of the URL variable. + * + * @return boolean True if access level checks pass, false otherwise. + * + * @since 12.2 + */ + public function cancel($key = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + $cancel = parent::cancel($key); + + if ($cancel) + { + if ($this->refid) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + } + else + { + // Redirect to the items screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_list, false + ) + ); + } + return $cancel; + } + + /** + * Method to save a record. + * + * @param string $key The name of the primary key of the URL variable. + * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). + * + * @return boolean True if successful, false otherwise. + * + * @since 12.2 + */ + public function save($key = null, $urlVar = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } + + $saved = parent::save($key, $urlVar); + + if ($this->refid && $saved) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref && $saved) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + return $saved; + } + + /** + * Function that allows child controller access to model data + * after the data has been saved. + * + * @param JModel &$model The data model object. + * @param array $validData The validated data. + * + * @return void + * + * @since 11.1 + */ + protected function postSaveHook(JModelLegacy $model, $validData = array()) + { + return; + } + +} diff --git a/admin/controllers/info_types.php b/admin/controllers/info_types.php new file mode 100644 index 0000000..a4fccdb --- /dev/null +++ b/admin/controllers/info_types.php @@ -0,0 +1,111 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Info_types Controller + */ +class SupportgroupsControllerInfo_types extends JControllerAdmin +{ + protected $text_prefix = 'COM_SUPPORTGROUPS_INFO_TYPES'; + /** + * Proxy for getModel. + * @since 2.5 + */ + public function getModel($name = 'Info_type', $prefix = 'SupportgroupsModel', $config = array()) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } + + public function exportData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if export is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('info_type.export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) + { + // Get the input + $input = JFactory::getApplication()->input; + $pks = $input->post->get('cid', array(), 'array'); + // Sanitize the input + JArrayHelper::toInteger($pks); + // Get the model + $model = $this->getModel('Info_types'); + // get the data to export + $data = $model->getExportData($pks); + if (SupportgroupsHelper::checkArray($data)) + { + // now set the data to the spreadsheet + $date = JFactory::getDate(); + SupportgroupsHelper::xls($data,'Info_types_'.$date->format('jS_F_Y'),'Info types exported ('.$date->format('jS F, Y').')','info types'); + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_EXPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=info_types', false), $message, 'error'); + return; + } + + + public function importData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if import is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('info_type.import', 'com_supportgroups') && $user->authorise('core.import', 'com_supportgroups')) + { + // Get the import model + $model = $this->getModel('Info_types'); + // get the headers to import + $headers = $model->getExImPortHeaders(); + if (SupportgroupsHelper::checkObject($headers)) + { + // Load headers to session. + $session = JFactory::getSession(); + $headers = json_encode($headers); + $session->set('info_type_VDM_IMPORTHEADERS', $headers); + $session->set('backto_VDM_IMPORT', 'info_types'); + $session->set('dataType_VDM_IMPORTINTO', 'info_type'); + // Redirect to import view. + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_INFO_TYPES'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=import', false), $message); + return; + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=info_types', false), $message, 'error'); + return; + } +} diff --git a/admin/controllers/payment.php b/admin/controllers/payment.php index 835c31a..ec86e15 100644 --- a/admin/controllers/payment.php +++ b/admin/controllers/payment.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage payment.php @author Llewellyn van der Merwe @@ -99,7 +99,7 @@ class SupportgroupsControllerPayment extends JControllerForm { // The record has been set. Check the record permissions. $permission = $user->authorise('payment.edit', 'com_supportgroups.payment.' . (int) $recordId); - if (!$permission && !is_null($permission)) + if (!$permission) { if ($user->authorise('payment.edit.own', 'com_supportgroups.payment.' . $recordId)) { @@ -159,10 +159,10 @@ class SupportgroupsControllerPayment extends JControllerForm { $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; } - elseif ($ref) - { + elseif ($ref) + { $append .= '&ref='.(string)$ref; - } + } if ($tmpl) { @@ -274,11 +274,11 @@ class SupportgroupsControllerPayment extends JControllerForm $this->ref = $this->input->get('ref', 0, 'word'); $this->refid = $this->input->get('refid', 0, 'int'); - if ($this->ref || $this->refid) - { - // to make sure the item is checkedin on redirect - $this->task = 'save'; - } + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } $saved = parent::save($key, $urlVar); diff --git a/admin/controllers/payments.php b/admin/controllers/payments.php index 4534087..2c26219 100644 --- a/admin/controllers/payments.php +++ b/admin/controllers/payments.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage payments.php @author Llewellyn van der Merwe @@ -107,5 +107,5 @@ class SupportgroupsControllerPayments extends JControllerAdmin $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=payments', false), $message, 'error'); return; - } + } } diff --git a/admin/controllers/region.php b/admin/controllers/region.php index c8fddad..a690633 100644 --- a/admin/controllers/region.php +++ b/admin/controllers/region.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage region.php @author Llewellyn van der Merwe @@ -99,7 +99,7 @@ class SupportgroupsControllerRegion extends JControllerForm { // The record has been set. Check the record permissions. $permission = $user->authorise('region.edit', 'com_supportgroups.region.' . (int) $recordId); - if (!$permission && !is_null($permission)) + if (!$permission) { if ($user->authorise('region.edit.own', 'com_supportgroups.region.' . $recordId)) { @@ -159,10 +159,10 @@ class SupportgroupsControllerRegion extends JControllerForm { $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; } - elseif ($ref) - { + elseif ($ref) + { $append .= '&ref='.(string)$ref; - } + } if ($tmpl) { @@ -274,11 +274,11 @@ class SupportgroupsControllerRegion extends JControllerForm $this->ref = $this->input->get('ref', 0, 'word'); $this->refid = $this->input->get('refid', 0, 'int'); - if ($this->ref || $this->refid) - { - // to make sure the item is checkedin on redirect - $this->task = 'save'; - } + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } $saved = parent::save($key, $urlVar); diff --git a/admin/controllers/regions.php b/admin/controllers/regions.php index e225c4a..6db5a9c 100644 --- a/admin/controllers/regions.php +++ b/admin/controllers/regions.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage regions.php @author Llewellyn van der Merwe @@ -107,5 +107,5 @@ class SupportgroupsControllerRegions extends JControllerAdmin $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=regions', false), $message, 'error'); return; - } + } } diff --git a/admin/controllers/support_group.php b/admin/controllers/support_group.php index 39d4cb2..c9c8678 100644 --- a/admin/controllers/support_group.php +++ b/admin/controllers/support_group.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage support_group.php @author Llewellyn van der Merwe @@ -99,7 +99,7 @@ class SupportgroupsControllerSupport_group extends JControllerForm { // The record has been set. Check the record permissions. $permission = $user->authorise('support_group.edit', 'com_supportgroups.support_group.' . (int) $recordId); - if (!$permission && !is_null($permission)) + if (!$permission) { if ($user->authorise('support_group.edit.own', 'com_supportgroups.support_group.' . $recordId)) { @@ -159,10 +159,10 @@ class SupportgroupsControllerSupport_group extends JControllerForm { $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; } - elseif ($ref) - { + elseif ($ref) + { $append .= '&ref='.(string)$ref; - } + } if ($tmpl) { @@ -274,11 +274,11 @@ class SupportgroupsControllerSupport_group extends JControllerForm $this->ref = $this->input->get('ref', 0, 'word'); $this->refid = $this->input->get('refid', 0, 'int'); - if ($this->ref || $this->refid) - { - // to make sure the item is checkedin on redirect - $this->task = 'save'; - } + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } $saved = parent::save($key, $urlVar); diff --git a/admin/controllers/support_groups.php b/admin/controllers/support_groups.php index 13c6b92..3d57ed7 100644 --- a/admin/controllers/support_groups.php +++ b/admin/controllers/support_groups.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage support_groups.php @author Llewellyn van der Merwe @@ -107,5 +107,35 @@ class SupportgroupsControllerSupport_groups extends JControllerAdmin $message = JText::_('COM_SUPPORTGROUPS_IMPORT_FAILED'); $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=support_groups', false), $message, 'error'); return; - } + } + + public function smartExport() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if export is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('support_group.smart_export', 'com_supportgroups') && $user->authorise('core.export', 'com_supportgroups')) + { + // Get the input + $input = JFactory::getApplication()->input; + $pks = $input->post->get('cid', array(), 'array'); + // Sanitize the input + JArrayHelper::toInteger($pks); + // Get the model + $model = $this->getModel('Support_groups'); + // get the data to export + $data = $model->getSmartExport($pks); + if (SupportgroupsHelper::checkArray($data)) + { + // now set the data to the spreadsheet + $date = JFactory::getDate(); + SupportgroupsHelper::xls($data,'Support_groups_'.$date->format('jS_F_Y'),'Support groups exported ('.$date->format('jS F, Y').')','support groups'); + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_SUPPORTGROUPS_EXPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=support_groups', false), $message, 'error'); + return; + } } diff --git a/admin/controllers/supportgroups.php b/admin/controllers/supportgroups.php index 1f93701..6793629 100644 --- a/admin/controllers/supportgroups.php +++ b/admin/controllers/supportgroups.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage supportgroups.php diff --git a/admin/helpers/PHPExcel/Reader/ChunkReadFilter.php b/admin/helpers/PHPExcel/Reader/ChunkReadFilter.php new file mode 100644 index 0000000..204ae05 --- /dev/null +++ b/admin/helpers/PHPExcel/Reader/ChunkReadFilter.php @@ -0,0 +1,49 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/** PHPExcel root directory */ +if (!defined('PHPEXCEL_ROOT')) { + /** + * @ignore + */ + define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../'); + require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php'); +} + +class PHPExcel_Reader_chunkReadFilter implements PHPExcel_Reader_IReadFilter +{ + private $_startRow = 0; + private $_endRow = 0; + + /** Set the list of rows that we want to read */ + public function setRows($startRow, $chunkSize) + { + $this->_startRow = $startRow; + $this->_endRow = $startRow + $chunkSize; + } + + public function readCell($column, $row, $worksheetName = '') + { + // Only read the heading row, and the rows that are configured in $this->_startRow and $this->_endRow + if (($row == 1) || ($row >= $this->_startRow && $row < $this->_endRow)) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/admin/helpers/headercheck.php b/admin/helpers/headercheck.php new file mode 100644 index 0000000..10d23dd --- /dev/null +++ b/admin/helpers/headercheck.php @@ -0,0 +1,85 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +class supportgroupsHeaderCheck +{ + function js_loaded($script_name) + { + // UIkit check point + if (strpos($script_name,'uikit') !== false) + { + $app = JFactory::getApplication(); + $getTemplateName = $app->getTemplate('template')->template; + + if (strpos($getTemplateName,'yoo') !== false) + { + return true; + } + } + + $document = JFactory::getDocument(); + $head_data = $document->getHeadData(); + foreach (array_keys($head_data['scripts']) as $script) + { + if (stristr($script, $script_name)) + { + return true; + } + } + + return false; + } + + function css_loaded($script_name) + { + // UIkit check point + if (strpos($script_name,'uikit') !== false) + { + $app = JFactory::getApplication(); + $getTemplateName = $app->getTemplate('template')->template; + + if (strpos($getTemplateName,'yoo') !== false) + { + return true; + } + } + + $document = JFactory::getDocument(); + $head_data = $document->getHeadData(); + + foreach (array_keys($head_data['styleSheets']) as $script) + { + if (stristr($script, $script_name)) + { + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/admin/helpers/html/batch_.php b/admin/helpers/html/batch_.php index 1ded28b..e688ee1 100644 --- a/admin/helpers/html/batch_.php +++ b/admin/helpers/html/batch_.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage batch_.php diff --git a/admin/helpers/supportgroups.php b/admin/helpers/supportgroups.php index 2e73be0..a019439 100644 --- a/admin/helpers/supportgroups.php +++ b/admin/helpers/supportgroups.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage supportgroups.php @@ -32,6 +32,11 @@ defined('_JEXEC') or die('Restricted access'); abstract class SupportgroupsHelper { + /** + * The global params + **/ + protected static $params = false; + public static function setCurrency($amount,$support_group) { // get the currency id @@ -47,9 +52,9 @@ abstract class SupportgroupsHelper if (!isset(self::$currency[$support_group])) { // get the location - $location = self::getVar('support_group', $support_group, 'id', 'location'); + $area = self::getVar('support_group', $support_group, 'id', 'area'); // get the Region - $region = self::getVar('location', $location, 'id', 'region'); + $region = self::getVar('area', $area, 'id', 'region'); // get the Country $country = self::getVar('region', $region, 'id', 'country'); // get the Currency Codethree @@ -62,42 +67,58 @@ abstract class SupportgroupsHelper protected static $currencyDetails = array(); - public static function getCurrencyDetails($id = false) + public static function getCurrencyDetails($codethree = false) { - if(is_numeric($id)) + // return cached data if set + if ($codethree && !isset(self::$currencyDetails[$codethree])) { - if (!isset(self::$currencyDetails[$id])) + // Get a db connection. + $db = JFactory::getDbo(); + // Create a new query object. + $query = $db->getQuery(true); + $query->select($db->quoteName( + array( 'a.id','a.name','a.codethree','a.numericcode','a.symbol','a.thousands','a.decimalplace', + 'a.decimalsymbol','a.positivestyle','a.negativestyle'), + array( 'currency_id','currency_name','currency_codethree','currency_numericcode','currency_symbol', + 'currency_thousands','currency_decimalplace','currency_decimalsymbol','currency_positivestyle', + 'currency_negativestyle'))); + $query->from($db->quoteName('#__supportgroups_currency', 'a')); + if (is_numeric($codethree)) { - // Get a db connection. - $db = JFactory::getDbo(); - // Create a new query object. - $query = $db->getQuery(true); - - $query->select($db->quoteName( - array( 'a.id','a.name','a.codethree','a.numericcode','a.symbol','a.thousands','a.decimalplace', - 'a.decimalsymbol','a.positivestyle','a.negativestyle'), - array( 'currency_id','currency_name','currency_codethree','currency_numericcode','currency_symbol', - 'currency_thousands','currency_decimalplace','currency_decimalsymbol','currency_positivestyle', - 'currency_negativestyle'))); - $query->from($db->quoteName('#__supportgroups_currency', 'a')); - $query->where($db->quoteName('id') . ' = '.(int) $id); - $db->setQuery($query); - $db->execute(); - if ($db->getNumRows()) - { - self::$currencyDetails[$id] = $db->loadObject(); - } - else - { - self::$currencyDetails[$id] = false; - } + $query->where($db->quoteName('a.id') . ' = '. (int) $codethree); } - return self::$currencyDetails[$id]; + elseif (strlen($codethree) == 3) + { + $query->where($db->quoteName('a.codethree') . ' = '.$db->quote($codethree)); + } + else + { + $query->where($db->quoteName('a.codethree') . ' = '.$db->quote('NONE')); + } + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + self::$currencyDetails[$codethree] = $db->loadObject(); + } + } + // make sure it has been set + if (isset(self::$currencyDetails[$codethree])) + { + return self::$currencyDetails[$codethree]; } return false; } - - public static function makeMoney($number,$currency = false) + + /** + * The Method used to turn numbers into (money) currency strings + * + * @param in/float/string $number + * @param bool/string/int $currency + * + * @return mixed|number + */ + public static function makeMoney($number, $currency = false) { // first check if we have a number if (is_numeric($number)) @@ -105,15 +126,37 @@ abstract class SupportgroupsHelper // make sure to include the negative finder file include_once 'negativefinder.php'; // check if the number is negative - $negativeFinderObj = new NegativeFinder(new Expression("$number")); + $negativeFinderObj = new SupportgroupsNegativeFinder(new SupportgroupsExpression("$number")); $negative = $negativeFinderObj->isItNegative() ? TRUE : FALSE; } else { - throw new Exception('ERROR! ('.$number.') is not a number!'); + // just return the string + return $number; + } + // not setup the currency + if (self::checkObject($currency)) + { + if(!isset($currency->currency_positivestyle) || !isset($currency->currency_negativestyle) || !isset($currency->currency_decimalplace) || !isset($currency->currency_decimalsymbol) || !isset($currency->currency_symbol)) + { + if (isset($currency->currency_id)) + { + $currency = self::getCurrencyDetails($currency->currency_id); + } + elseif (isset($currency->id)) + { + $currency = self::getCurrencyDetails($currency->id); + } + else + { + $currency = self::getCurrencyDetails(); + } + } + } + else + { + $currency = self::getCurrencyDetails($currency); } - // setup the currency - $currency = self::getCurrencyDetails($currency); // set the number to currency if (self::checkObject($currency)) { @@ -122,7 +165,7 @@ abstract class SupportgroupsHelper $format = $currency->currency_positivestyle; $sign = '+'; } - else + else { $format = $currency->currency_negativestyle; $sign = '-'; @@ -137,13 +180,102 @@ abstract class SupportgroupsHelper } return $number; } + + /** + * Get the file path or url + * + * @param string $type The (url/path) type to return + * @param string $target The Params Target name (if set) + * @param string $fileType The kind of filename to generate (if not set no file name is generated) + * @param string $key The key to adjust the filename (if not set ignored) + * @param string $default The default path if not set in Params (fallback path) + * @param bool $createIfNotSet The switch to create the folder if not found + * + * @return string On success the path or url is returned based on the type requested + * + */ + public static function getFilePath($type = 'path', $target = 'filepath', $fileType = null, $key = '', $default = JPATH_SITE . '/images/', $createIfNotSet = true) + { + // get the global settings + if (!self::checkObject(self::$params)) + { + self::$params = JComponentHelper::getParams('com_supportgroups'); + } + $filePath = self::$params->get($target, $default); + // check the file path (revert to default only of not a hidden file path) + if ('hiddenfilepath' !== $target && strpos($filePath, JPATH_SITE) === false) + { + $filePath = $default; + } + jimport('joomla.filesystem.folder'); + // create the folder if it does not exist + if ($createIfNotSet && !JFolder::exists($filePath)) + { + JFolder::create($filePath); + } + // setup the file name + $fileName = ''; + // Get basic key + $basickey = 'Th!s_iS_n0t_sAfe_buT_b3tter_then_n0thiug'; + if (method_exists(get_called_class(), "getCryptKey")) + { + $basickey = self::getCryptKey('basic', $basickey); + } + // check the key + if (!self::checkString($key)) + { + $key = 'vDm'; + } + // set the file name + if (self::checkString($fileType)) + { + // set the name + $fileName = trim(md5($type.$target.$basickey.$key) . '.' . trim($fileType, '.')); + } + else + { + $fileName = trim(md5($type.$target.$basickey.$key)) . '.txt'; + } + // return the url + if ('url' === $type) + { + if (strpos($filePath, JPATH_SITE) !== false) + { + $filePath = trim( str_replace( JPATH_SITE, '', $filePath), '/'); + return JURI::root() . $filePath . '/' . $fileName; + } + // since the path is behind the root folder of the site, return only the root url (may be used to build the link) + return JURI::root(); + } + // sanitize the path + return '/' . trim( $filePath, '/' ) . '/' . $fileName; + } + /** * Load the Component xml manifest. **/ - public static function manifest() + public static function manifest() { - $manifestUrl = JPATH_ADMINISTRATOR."/components/com_supportgroups/supportgroups.xml"; - return simplexml_load_file($manifestUrl); + $manifestUrl = JPATH_ADMINISTRATOR."/components/com_supportgroups/supportgroups.xml"; + return simplexml_load_file($manifestUrl); + } + + /** + * Joomla version object + **/ + protected static $JVersion; + + /** + * set/get Joomla version + **/ + public static function jVersion() + { + // check if set + if (!self::checkObject(self::$JVersion)) + { + self::$JVersion = new JVersion(); + } + return self::$JVersion; } /** @@ -158,22 +290,22 @@ abstract class SupportgroupsHelper // get all Contributors (max 20) $searchArray = range('0','20'); foreach($searchArray as $nr) - { + { if ((NULL !== $params->get("showContributor".$nr)) && ($params->get("showContributor".$nr) == 1 || $params->get("showContributor".$nr) == 3)) - { + { // set link based of selected option if($params->get("useContributor".$nr) == 1) - { + { $link_front = ''; $link_back = ''; } - elseif($params->get("useContributor".$nr) == 2) - { + elseif($params->get("useContributor".$nr) == 2) + { $link_front = ''; $link_back = ''; } - else - { + else + { $link_front = ''; $link_back = ''; } @@ -261,41 +393,45 @@ abstract class SupportgroupsHelper **/ public static function addSubmenu($submenu) { - // load user for access menus - $user = JFactory::getUser(); - // load the submenus to sidebar - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_DASHBOARD'), 'index.php?option=com_supportgroups&view=supportgroups', $submenu == 'supportgroups'); + // load user for access menus + $user = JFactory::getUser(); + // load the submenus to sidebar + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_DASHBOARD'), 'index.php?option=com_supportgroups&view=supportgroups', $submenu === 'supportgroups'); if ($user->authorise('support_group.access', 'com_supportgroups') && $user->authorise('support_group.submenu', 'com_supportgroups')) { - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_SUPPORT_GROUPS'), 'index.php?option=com_supportgroups&view=support_groups', $submenu == 'support_groups'); + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_SUPPORT_GROUPS'), 'index.php?option=com_supportgroups&view=support_groups', $submenu === 'support_groups'); } if ($user->authorise('payment.access', 'com_supportgroups') && $user->authorise('payment.submenu', 'com_supportgroups')) { - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_PAYMENTS'), 'index.php?option=com_supportgroups&view=payments', $submenu == 'payments'); + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_PAYMENTS'), 'index.php?option=com_supportgroups&view=payments', $submenu === 'payments'); } - if ($user->authorise('clinic.access', 'com_supportgroups') && $user->authorise('clinic.submenu', 'com_supportgroups')) + if ($user->authorise('facility.access', 'com_supportgroups') && $user->authorise('facility.submenu', 'com_supportgroups')) { - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_CLINICS'), 'index.php?option=com_supportgroups&view=clinics', $submenu == 'clinics'); + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_FACILITIES'), 'index.php?option=com_supportgroups&view=facilities', $submenu === 'facilities'); } - if ($user->authorise('location.access', 'com_supportgroups') && $user->authorise('location.submenu', 'com_supportgroups')) + if ($user->authorise('additional_info.access', 'com_supportgroups') && $user->authorise('additional_info.submenu', 'com_supportgroups')) { - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_LOCATIONS'), 'index.php?option=com_supportgroups&view=locations', $submenu == 'locations'); + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_ADDITIONAL_INFORMATION'), 'index.php?option=com_supportgroups&view=additional_information', $submenu === 'additional_information'); + } + if ($user->authorise('area.access', 'com_supportgroups') && $user->authorise('area.submenu', 'com_supportgroups')) + { + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_AREAS'), 'index.php?option=com_supportgroups&view=areas', $submenu === 'areas'); } if ($user->authorise('region.access', 'com_supportgroups') && $user->authorise('region.submenu', 'com_supportgroups')) { - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_REGIONS'), 'index.php?option=com_supportgroups&view=regions', $submenu == 'regions'); + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_REGIONS'), 'index.php?option=com_supportgroups&view=regions', $submenu === 'regions'); } if ($user->authorise('country.access', 'com_supportgroups') && $user->authorise('country.submenu', 'com_supportgroups')) { - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_COUNTRIES'), 'index.php?option=com_supportgroups&view=countries', $submenu == 'countries'); + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_COUNTRIES'), 'index.php?option=com_supportgroups&view=countries', $submenu === 'countries'); } if ($user->authorise('currency.access', 'com_supportgroups') && $user->authorise('currency.submenu', 'com_supportgroups')) { - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_CURRENCIES'), 'index.php?option=com_supportgroups&view=currencies', $submenu == 'currencies'); + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_CURRENCIES'), 'index.php?option=com_supportgroups&view=currencies', $submenu === 'currencies'); } if ($user->authorise('help_document.access', 'com_supportgroups') && $user->authorise('help_document.submenu', 'com_supportgroups')) { - JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_HELP_DOCUMENTS'), 'index.php?option=com_supportgroups&view=help_documents', $submenu == 'help_documents'); + JHtmlSidebar::addEntry(JText::_('COM_SUPPORTGROUPS_SUBMENU_HELP_DOCUMENTS'), 'index.php?option=com_supportgroups&view=help_documents', $submenu === 'help_documents'); } } @@ -489,7 +625,7 @@ abstract class SupportgroupsHelper $objPHPExcel->getActiveSheet()->getColumnDimension($a)->setAutoSize(true); $objPHPExcel->getActiveSheet()->getStyle($a.$i)->applyFromArray($headerStyles); $objPHPExcel->getActiveSheet()->getStyle($a.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); - } elseif ($a == 'A'){ + } elseif ($a === 'A'){ $objPHPExcel->getActiveSheet()->getStyle($a.$i)->applyFromArray($sideStyles); } else { $objPHPExcel->getActiveSheet()->getStyle($a.$i)->applyFromArray($normalStyles); @@ -533,18 +669,27 @@ abstract class SupportgroupsHelper */ public static function getFileHeaders($dataType) { - // make sure the file is loaded + // make sure these files are loaded JLoader::import('PHPExcel', JPATH_COMPONENT_ADMINISTRATOR . '/helpers'); + JLoader::import('ChunkReadFilter', JPATH_COMPONENT_ADMINISTRATOR . '/helpers/PHPExcel/Reader'); // get session object - $session = JFactory::getSession(); + $session = JFactory::getSession(); $package = $session->get('package', null); $package = json_decode($package, true); // set the headers if(isset($package['dir'])) { + $chunkFilter = new PHPExcel_Reader_chunkReadFilter(); + // only load first three rows + $chunkFilter->setRows(2,1); + // identify the file type $inputFileType = PHPExcel_IOFactory::identify($package['dir']); + // create the reader for this file type $excelReader = PHPExcel_IOFactory::createReader($inputFileType); + // load the limiting filter + $excelReader->setReadFilter($chunkFilter); $excelReader->setReadDataOnly(true); + // load the rows (only first three) $excelObj = $excelReader->load($package['dir']); $headers = array(); foreach ($excelObj->getActiveSheet()->getRowIterator() as $row) @@ -570,6 +715,19 @@ abstract class SupportgroupsHelper return false; } + /** + * Get a Variable + * + * @param string $table The table from which to get the variable + * @param string $where The value where + * @param string $whereString The target/field string where/name + * @param string $what The return field + * @param string $operator The operator between $whereString/field and $where/value + * @param string $main The component in which the table is found + * + * @return mix string/int/float + * + */ public static function getVar($table, $where = null, $whereString = 'user', $what = 'id', $operator = '=', $main = 'supportgroups') { if(!$where) @@ -580,9 +738,15 @@ abstract class SupportgroupsHelper $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); - $query->select($db->quoteName(array($what))); - $query->from($db->quoteName('#__'.$main.'_'.$table)); + if (empty($table)) + { + $query->from($db->quoteName('#__'.$main)); + } + else + { + $query->from($db->quoteName('#__'.$main.'_'.$table)); + } if (is_numeric($where)) { $query->where($db->quoteName($whereString) . ' '.$operator.' '.(int) $where); @@ -604,6 +768,20 @@ abstract class SupportgroupsHelper return false; } + /** + * Get array of variables + * + * @param string $table The table from which to get the variables + * @param string $where The value where + * @param string $whereString The target/field string where/name + * @param string $what The return field + * @param string $operator The operator between $whereString/field and $where/value + * @param string $main The component in which the table is found + * @param bool $unique The switch to return a unique array + * + * @return array + * + */ public static function getVars($table, $where = null, $whereString = 'user', $what = 'id', $operator = 'IN', $main = 'supportgroups', $unique = true) { if(!$where) @@ -618,13 +796,25 @@ abstract class SupportgroupsHelper if (self::checkArray($where)) { + // prep main <-- why? well if $main='' is empty then $table can be categories or users + if (self::checkString($main)) + { + $main = '_'.ltrim($main, '_'); + } // Get a db connection. $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); $query->select($db->quoteName(array($what))); - $query->from($db->quoteName('#__'.$main.'_'.$table)); + if (empty($table)) + { + $query->from($db->quoteName('#__'.$main)); + } + else + { + $query->from($db->quoteName('#_'.$main.'_'.$table)); + } $query->where($db->quoteName($whereString) . ' '.$operator.' (' . implode(',',$where) . ')'); $db->setQuery($query); $db->execute(); @@ -640,52 +830,71 @@ abstract class SupportgroupsHelper return false; } - public static function jsonToString($value, $sperator = ", ") + public static function jsonToString($value, $sperator = ", ", $table = null, $id = 'id', $name = 'name') { - // check if string is JSON - $result = json_decode($value, true); - if (json_last_error() === JSON_ERROR_NONE) { - // is JSON + // do some table foot work + $external = false; + if (strpos($table, '#__') !== false) + { + $external = true; + $table = str_replace('#__', '', $table); + } + // check if string is JSON + $result = json_decode($value, true); + if (json_last_error() === JSON_ERROR_NONE) + { + // is JSON if (self::checkArray($result)) { - $value = ''; - $counter = 0; - foreach ($result as $string) + if (self::checkString($table)) { - if ($counter) + $names = array(); + foreach ($result as $val) { - $value .= $sperator.$string; + if ($external) + { + if ($name = self::getVar(null, $val, $id, $name, '=', $table)) + { + $names[] = $name; + } + } + else + { + if ($name = self::getVar($table, $val, $id, $name)) + { + $names[] = $name; + } + } } - else + if (self::checkArray($names)) { - $value .= $string; - } - $counter++; + return (string) implode($sperator,$names); + } } - return $value; + return (string) implode($sperator,$result); } - return json_decode($value); - } - return $value; - } + return (string) json_decode($value); + } + return $value; + } public static function isPublished($id,$type) { if ($type == 'raw') - { + { $type = 'item'; } $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select(array('a.published')); $query->from('#__supportgroups_'.$type.' AS a'); - $query->where('a.id = '.$id); + $query->where('a.id = '. (int) $id); $query->where('a.published = 1'); $db->setQuery($query); $db->execute(); $found = $db->getNumRows(); if($found) - { + { return true; } return false; @@ -697,45 +906,45 @@ abstract class SupportgroupsHelper $query = $db->getQuery(true); $query->select(array('a.title')); $query->from('#__usergroups AS a'); - $query->where('a.id = '.$id); + $query->where('a.id = '. (int) $id); $db->setQuery($query); $db->execute(); $found = $db->getNumRows(); if($found) - { + { return $db->loadResult(); } return $id; } - /** + /** * Get the actions permissions **/ - public static function getActions($view,&$record = null,$views = null) + public static function getActions($view,&$record = null,$views = null) { jimport('joomla.access.access'); $user = JFactory::getUser(); $result = new JObject; $view = self::safeString($view); - if (self::checkString($views)) - { + if (self::checkString($views)) + { $views = self::safeString($views); - } + } // get all actions from component $actions = JAccess::getActions('com_supportgroups', 'component'); - // set acctions only set in component settiongs - $componentActions = array('core.admin','core.manage','core.options','core.export'); + // set acctions only set in component settiongs + $componentActions = array('core.admin','core.manage','core.options','core.export'); // loop the actions and set the permissions foreach ($actions as $action) - { + { // set to use component default $fallback= true; if (self::checkObject($record) && isset($record->id) && $record->id > 0 && !in_array($action->name,$componentActions)) { // The record has been set. Check the record permissions. $permission = $user->authorise($action->name, 'com_supportgroups.'.$view.'.' . (int) $record->id); - if (!$permission && !is_null($permission)) + if (!$permission) // TODO removed && !is_null($permission) { if ($action->name == 'core.edit' || $action->name == $view.'.edit') { @@ -807,17 +1016,17 @@ abstract class SupportgroupsHelper } elseif (self::checkString($views) && isset($record->catid) && $record->catid > 0) { - // make sure we use the core. action check for the categories - if (strpos($action->name,$view) !== false && strpos($action->name,'core.') === false ) { - $coreCheck = explode('.',$action->name); - $coreCheck[0] = 'core'; - $categoryCheck = implode('.',$coreCheck); - } - else - { - $categoryCheck = $action->name; - } - // The record has a category. Check the category permissions. + // make sure we use the core. action check for the categories + if (strpos($action->name,$view) !== false && strpos($action->name,'core.') === false ) { + $coreCheck = explode('.',$action->name); + $coreCheck[0] = 'core'; + $categoryCheck = implode('.',$coreCheck); + } + else + { + $categoryCheck = $action->name; + } + // The record has a category. Check the category permissions. $catpermission = $user->authorise($categoryCheck, 'com_supportgroups.'.$views.'.category.' . (int) $record->catid); if (!$catpermission && !is_null($catpermission)) { @@ -903,16 +1112,47 @@ abstract class SupportgroupsHelper /** * Get any component's model **/ - public static function getModel($name, $path = JPATH_COMPONENT_ADMINISTRATOR, $component = 'supportgroups') + public static function getModel($name, $path = JPATH_COMPONENT_ADMINISTRATOR, $component = 'Supportgroups', $config = array()) { - // load some joomla helpers - JLoader::import('joomla.application.component.model'); + // fix the name + $name = self::safeString($name); + // full path + $fullPath = $path . '/models'; + // set prefix + $prefix = $component.'Model'; // load the model file - JLoader::import( $name, $path . '/models' ); - // return instance - return JModelLegacy::getInstance( $name, $component.'Model' ); + JModelLegacy::addIncludePath($fullPath, $prefix); + // get instance + $model = JModelLegacy::getInstance($name, $prefix, $config); + // if model not found (strange) + if ($model == false) + { + jimport('joomla.filesystem.file'); + // get file path + $filePath = $path.'/'.$name.'.php'; + $fullPath = $fullPath.'/'.$name.'.php'; + // check if it exists + if (JFile::exists($filePath)) + { + // get the file + require_once $filePath; + } + elseif (JFile::exists($fullPath)) + { + // get the file + require_once $fullPath; + } + // build class names + $modelClass = $prefix.$name; + if (class_exists($modelClass)) + { + // initialize the model + return new $modelClass($config); + } + } + return $model; } - + /** * Add to asset Table */ @@ -956,7 +1196,7 @@ abstract class SupportgroupsHelper if (!$asset->check() || !$asset->store()) { - JError::raiseWarning(500, $asset->getError()); + JFactory::getApplication()->enqueueMessage($asset->getError(), 'warning'); return false; } else @@ -974,7 +1214,7 @@ abstract class SupportgroupsHelper } return false; } - + /** * Gets the default asset Rules for a component/view. */ @@ -1027,48 +1267,211 @@ abstract class SupportgroupsHelper return JAccess::getAssetRules(0); } + /** + * xmlAppend + * + * @param SimpleXMLElement $xml The XML element reference in which to inject a comment + * @param mixed $node A SimpleXMLElement node to append to the XML element reference, or a stdClass object containing a comment attribute to be injected before the XML node and a fieldXML attribute containing a SimpleXMLElement + * + * @return null + * + */ + public static function xmlAppend(&$xml, $node) + { + if (!$node) + { + // element was not returned + return; + } + switch (get_class($node)) + { + case 'stdClass': + if (property_exists($node, 'comment')) + { + self::xmlComment($xml, $node->comment); + } + if (property_exists($node, 'fieldXML')) + { + self::xmlAppend($xml, $node->fieldXML); + } + break; + case 'SimpleXMLElement': + $domXML = dom_import_simplexml($xml); + $domNode = dom_import_simplexml($node); + $domXML->appendChild($domXML->ownerDocument->importNode($domNode, true)); + $xml = simplexml_import_dom($domXML); + break; + } + } + + /** + * xmlComment + * + * @param SimpleXMLElement $xml The XML element reference in which to inject a comment + * @param string $comment The comment to inject + * + * @return null + * + */ + public static function xmlComment(&$xml, $comment) + { + $domXML = dom_import_simplexml($xml); + $domComment = new DOMComment($comment); + $nodeTarget = $domXML->ownerDocument->importNode($domComment, true); + $domXML->appendChild($nodeTarget); + $xml = simplexml_import_dom($domXML); + } + + /** + * xmlAddAttributes + * + * @param SimpleXMLElement $xml The XML element reference in which to inject a comment + * @param array $attributes The attributes to apply to the XML element + * + * @return null + * + */ + public static function xmlAddAttributes(&$xml, $attributes = array()) + { + foreach ($attributes as $key => $value) + { + $xml->addAttribute($key, $value); + } + } + + /** + * xmlAddOptions + * + * @param SimpleXMLElement $xml The XML element reference in which to inject a comment + * @param array $options The options to apply to the XML element + * + * @return void + * + */ + public static function xmlAddOptions(&$xml, $options = array()) + { + foreach ($options as $key => $value) + { + $addOption = $xml->addChild('option'); + $addOption->addAttribute('value', $key); + $addOption[] = $value; + } + } + + /** + * Render Bool Button + * + * @param array $args All the args for the button + * 0) name + * 1) additional (options class) // not used at this time + * 2) default + * 3) yes (name) + * 4) no (name) + * + * @return string The input html of the button + * + */ public static function renderBoolButton() { $args = func_get_args(); + // check if there is additional button class + $additional = isset($args[1]) ? (string) $args[1] : ''; // not used at this time + // start the xml + $buttonXML = new SimpleXMLElement(''); + // button attributes + $buttonAttributes = array( + 'type' => 'radio', + 'name' => isset($args[0]) ? self::htmlEscape($args[0]) : 'bool_button', + 'label' => isset($args[0]) ? self::safeString(self::htmlEscape($args[0]), 'Ww') : 'Bool Button', // not seen anyway + 'class' => 'btn-group', + 'filter' => 'INT', + 'default' => isset($args[2]) ? (int) $args[2] : 0); + // load the haskey attributes + self::xmlAddAttributes($buttonXML, $buttonAttributes); + // set the button options + $buttonOptions = array( + '1' => isset($args[3]) ? self::htmlEscape($args[3]) : 'JYES', + '0' => isset($args[4]) ? self::htmlEscape($args[4]) : 'JNO'); + // load the button options + self::xmlAddOptions($buttonXML, $buttonOptions); // get the radio element $button = JFormHelper::loadFieldType('radio'); - // setup the properties - $name = self::htmlEscape($args[0]); - $additional = isset($args[1]) ? (string) $args[1] : ''; - $value = $args[2]; - $yes = isset($args[3]) ? self::htmlEscape($args[3]) : 'JYES'; - $no = isset($args[4]) ? self::htmlEscape($args[4]) : 'JNO'; - - // prepare the xml - $element = new SimpleXMLElement(''); - // run - $button->setup($element, $value); + $button->setup($buttonXML, $buttonAttributes['default']); return $button->input; - } - public static function checkObject($object) + /** + * Check if have an json string + * + * @input string The json string to check + * + * @returns bool true on success + **/ + public static function checkJson($string) { - if (isset($object) && is_object($object) && count($object) > 0) + if (self::checkString($string)) { - return true; + json_decode($string); + return (json_last_error() === JSON_ERROR_NONE); } return false; } - public static function checkArray($array) + /** + * Check if have an object with a length + * + * @input object The object to check + * + * @returns bool true on success + **/ + public static function checkObject($object) + { + if (isset($object) && is_object($object)) + { + return count((array)$object) > 0; + } + return false; + } + + /** + * Check if have an array with a length + * + * @input array The array to check + * + * @returns bool true on success + **/ + public static function checkArray($array, $removeEmptyString = false) { if (isset($array) && is_array($array) && count($array) > 0) { + // also make sure the empty strings are removed + if ($removeEmptyString) + { + foreach ($array as $key => $string) + { + if (empty($string)) + { + unset($array[$key]); + } + } + return self::checkArray($array, false); + } return true; } return false; } + /** + * Check if have a string with a length + * + * @input string The string to check + * + * @returns bool true on success + **/ public static function checkString($string) { if (isset($string) && is_string($string) && strlen($string) > 0) @@ -1078,6 +1481,38 @@ abstract class SupportgroupsHelper return false; } + /** + * Check if we are connected + * Thanks https://stackoverflow.com/a/4860432/1429677 + * + * @returns bool true on success + **/ + public static function isConnected() + { + // If example.com is down, then probably the whole internet is down, since IANA maintains the domain. Right? + $connected = @fsockopen("www.example.com", 80); + // website, port (try 80 or 443) + if ($connected) + { + //action when connected + $is_conn = true; + fclose($connected); + } + else + { + //action in connection failure + $is_conn = false; + } + return $is_conn; + } + + /** + * Merge an array of array's + * + * @input array The arrays you would like to merge + * + * @returns array on success + **/ public static function mergeArrays($arrays) { if(self::checkArray($arrays)) @@ -1095,10 +1530,23 @@ abstract class SupportgroupsHelper return false; } + // typo sorry! public static function sorten($string, $length = 40, $addTip = true) + { + return self::shorten($string, $length, $addTip); + } + + /** + * Shorten a string + * + * @input string The you would like to shorten + * + * @returns string on success + **/ + public static function shorten($string, $length = 40, $addTip = true) { if (self::checkString($string)) - { + { $initial = strlen($string); $words = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE); $words_count = count($words); @@ -1118,7 +1566,7 @@ abstract class SupportgroupsHelper $final = strlen($newString); if ($initial != $final && $addTip) { - $title = self::sorten($string, 400 , false); + $title = self::shorten($string, 400 , false); return ''.trim($newString).'...'; } elseif ($initial != $final && !$addTip) @@ -1129,80 +1577,117 @@ abstract class SupportgroupsHelper return $string; } - public static function safeString($string, $type = 'L', $spacer = '_') + /** + * Making strings safe (various ways) + * + * @input string The you would like to make safe + * + * @returns string on success + **/ + public static function safeString($string, $type = 'L', $spacer = '_', $replaceNumbers = true) { - // remove all numbers and replace with english text version (works well only up to a thousand) - $string = self::replaceNumbers($string); - - if (self::checkString($string)) - { - // remove all other characters - $string = trim($string); - $string = preg_replace('/'.$spacer.'+/', ' ', $string); - $string = preg_replace('/\s+/', ' ', $string); - $string = preg_replace("/[^A-Za-z ]/", '', $string); - // return a string with all first letter of each word uppercase(no undersocre) - if ($type == 'W') - { - return ucwords(strtolower($string)); - } - elseif ($type == 'w') - { - return strtolower($string); - } - elseif ($type == 'Ww') - { - return ucfirst(strtolower($string)); - } - elseif ($type == 'WW') - { - return strtoupper($string); - } - elseif ($type == 'U') - { - // replace white space with underscore - $string = preg_replace('/\s+/', $spacer, $string); - // return all upper - return strtoupper($string); - } - elseif ($type == 'F') - { - // replace white space with underscore - $string = preg_replace('/\s+/', $spacer, $string); - // return with first caracter to upper - return ucfirst(strtolower($string)); - } - elseif ($type == 'L') - { - // replace white space with underscore - $string = preg_replace('/\s+/', $spacer, $string); - // default is to return lower - return strtolower($string); - } - - // return string - return $string; - } - // not a string - return ''; + if ($replaceNumbers === true) + { + // remove all numbers and replace with english text version (works well only up to millions) + $string = self::replaceNumbers($string); + } + // 0nly continue if we have a string + if (self::checkString($string)) + { + // create file name without the extention that is safe + if ($type === 'filename') + { + // make sure VDM is not in the string + $string = str_replace('VDM', 'vDm', $string); + // Remove anything which isn't a word, whitespace, number + // or any of the following caracters -_() + // If you don't need to handle multi-byte characters + // you can use preg_replace rather than mb_ereg_replace + // Thanks @Łukasz Rysiak! + // $string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string); + $string = preg_replace("([^\w\s\d\-_\(\)])", '', $string); + // http://stackoverflow.com/a/2021729/1429677 + return preg_replace('/\s+/', ' ', $string); + } + // remove all other characters + $string = trim($string); + $string = preg_replace('/'.$spacer.'+/', ' ', $string); + $string = preg_replace('/\s+/', ' ', $string); + $string = preg_replace("/[^A-Za-z ]/", '', $string); + // select final adaptations + if ($type === 'L' || $type === 'strtolower') + { + // replace white space with underscore + $string = preg_replace('/\s+/', $spacer, $string); + // default is to return lower + return strtolower($string); + } + elseif ($type === 'W') + { + // return a string with all first letter of each word uppercase(no undersocre) + return ucwords(strtolower($string)); + } + elseif ($type === 'w' || $type === 'word') + { + // return a string with all lowercase(no undersocre) + return strtolower($string); + } + elseif ($type === 'Ww' || $type === 'Word') + { + // return a string with first letter of the first word uppercase and all the rest lowercase(no undersocre) + return ucfirst(strtolower($string)); + } + elseif ($type === 'WW' || $type === 'WORD') + { + // return a string with all the uppercase(no undersocre) + return strtoupper($string); + } + elseif ($type === 'U' || $type === 'strtoupper') + { + // replace white space with underscore + $string = preg_replace('/\s+/', $spacer, $string); + // return all upper + return strtoupper($string); + } + elseif ($type === 'F' || $type === 'ucfirst') + { + // replace white space with underscore + $string = preg_replace('/\s+/', $spacer, $string); + // return with first caracter to upper + return ucfirst(strtolower($string)); + } + elseif ($type === 'cA' || $type === 'cAmel' || $type === 'camelcase') + { + // convert all words to first letter uppercase + $string = ucwords(strtolower($string)); + // remove white space + $string = preg_replace('/\s+/', '', $string); + // now return first letter lowercase + return lcfirst($string); + } + // return string + return $string; + } + // not a string + return ''; } - public static function htmlEscape($var, $charset = 'UTF-8', $sorten = false, $length = 40) + public static function htmlEscape($var, $charset = 'UTF-8', $shorten = false, $length = 40) { if (self::checkString($var)) { $filter = new JFilterInput(); $string = $filter->clean(html_entity_decode(htmlentities($var, ENT_COMPAT, $charset)), 'HTML'); - if ($sorten) + if ($shorten) { - return self::sorten($string,$length); + return self::shorten($string,$length); } return $string; - } + } else { return ''; - } + } } public static function replaceNumbers($string) @@ -1226,7 +1711,7 @@ abstract class SupportgroupsHelper // return the string with no numbers remaining. return $string; } - + /** * Convert an integer into an English word string * Thanks to Tom Nicholson @@ -1309,7 +1794,7 @@ abstract class SupportgroupsHelper $w .= ' '; if($r < 100) { - $word .= 'and '; + $w .= 'and '; } $w .= self::numberToString($r); } diff --git a/admin/layouts/clinic/index.html b/admin/helpers/totals/index.html similarity index 100% rename from admin/layouts/clinic/index.html rename to admin/helpers/totals/index.html diff --git a/admin/language/en-GB/en-GB.com_supportgroups.ini b/admin/language/en-GB/en-GB.com_supportgroups.ini index aaa14fe..fc009f6 100644 --- a/admin/language/en-GB/en-GB.com_supportgroups.ini +++ b/admin/language/en-GB/en-GB.com_supportgroups.ini @@ -1,89 +1,288 @@ COM_SUPPORTGROUPS="Support Groups" +COM_SUPPORTGROUPS_ADDITIONAL_INFO="Additional Info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION="Additional Information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_ACCESS="Additional Information Access" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_ACCESS_DESC="Allows the users in this group to access access additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_BATCH_OPTIONS="Batch process the selected Additional Information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_BATCH_TIP="All changes will be applied to all selected Additional Information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_BATCH_USE="Additional Information Batch Use" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_CREATE="Additional Information Create" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_CREATE_DESC="Allows the users in this group to create create additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DASHBOARD_ADD="Additional Information Dashboard Add" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DASHBOARD_LIST="Additional Information Dashboard List" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DELETE="Additional Information Delete" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DELETE_DESC="Allows the users in this group to delete delete additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT="Additional Information Edit" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_ALIAS="Additional Information Edit Alias" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_CREATED_BY="Additional Information Edit Created By" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_CREATED_DATE="Additional Information Edit Created Date" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_DESC="Allows the users in this group to edit the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_DETAILS="Additional Information Edit Details" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_DETAILS_DESC="Allows the users in this group to update the edit details of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_INFO_TYPE="Additional Information Edit Info Type" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_INFO_TYPE_DESC="Allows the users in this group to update the edit info type of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_NAME="Additional Information Edit Name" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_OWN="Additional Information Edit Own" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_OWN_DESC="Allows the users in this group to edit edit own additional information created by them" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_STATE="Additional Information Edit State" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_STATE_DESC="Allows the users in this group to update the state of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_VERSION="Additional Information Edit Version" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_VERSION_DESC="Allows users in this group to edit versions of version additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EXPORT="Additional Information Export" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EXPORT_DESC="Allows the users in this group to export export additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_IMPORT="Additional Information Import" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_IMPORT_DESC="Allows the users in this group to import import additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_ARCHIVED="%s Additional Information archived." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_ARCHIVED_1="%s Additional Info archived." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_CHECKED_IN_0="No Additional Info successfully checked in." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_CHECKED_IN_1="%d Additional Info successfully checked in." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_CHECKED_IN_MORE="%d Additional Information successfully checked in." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_DELETED="%s Additional Information deleted." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_DELETED_1="%s Additional Info deleted." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_FEATURED="%s Additional Information featured." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_FEATURED_1="%s Additional Info featured." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_PUBLISHED="%s Additional Information published." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_PUBLISHED_1="%s Additional Info published." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_TRASHED="%s Additional Information trashed." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_TRASHED_1="%s Additional Info trashed." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_UNFEATURED="%s Additional Information unfeatured." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_UNFEATURED_1="%s Additional Info unfeatured." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_UNPUBLISHED="%s Additional Information unpublished." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_N_ITEMS_UNPUBLISHED_1="%s Additional Info unpublished." +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_SUBMENU="Additional Information Submenu" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_SUBMENU_DESC="Allows the users in this group to update the submenu of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_ALIAS="Alias" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_ALIAS_LABEL="Alias" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_CREATED_BY_DESC="The user that created this Additional Info." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_CREATED_DATE_DESC="The date this Additional Info was created." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_CREATED_DATE_LABEL="Created Date" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_DETAILS="Details" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_DETAILS_LABEL="Details" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_EDIT="Editing the Additional Info" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_ERROR_UNIQUE_ALIAS="Another Additional Info has the same alias." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_ID="Id" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_INFO_TYPE="Info Type" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_INFO_TYPE_DESCRIPTION="Please select the info type." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_INFO_TYPE_LABEL="Type" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_MODIFIED_BY_DESC="The last user that modified this Additional Info." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_MODIFIED_DATE_DESC="The date this Additional Info was modified." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_MODIFIED_DATE_LABEL="Modified Date" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_NAME="Name" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_NAME_DESCRIPTION="Enter Name Here" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_NAME_HINT="Name Here" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_NAME_LABEL="Name" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_NAME_MESSAGE="Error! Please add name here." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_NEW="A New Additional Info" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_ORDERING_LABEL="Ordering" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_PERMISSION="Permissions" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_PUBLISHING="Publishing" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Additional Info to customise the alias." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_SETTINGS="Settings" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_STATUS="Status" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_SUPPORT_GROUPS="Support Groups" +COM_SUPPORTGROUPS_ADDITIONAL_INFO_VERSION_DESC="A count of the number of times this Additional Info has been revised." +COM_SUPPORTGROUPS_ADDITIONAL_INFO_VERSION_LABEL="Revision" +COM_SUPPORTGROUPS_ALL_IS_GOOD_PLEASE_CHECK_AGAIN_LATTER="All is good, please check again latter." +COM_SUPPORTGROUPS_ARCHIVED="Archived" +COM_SUPPORTGROUPS_AREA="Area" +COM_SUPPORTGROUPS_AREAS="Areas" +COM_SUPPORTGROUPS_AREAS_ACCESS="Areas Access" +COM_SUPPORTGROUPS_AREAS_ACCESS_DESC="Allows the users in this group to access access areas" +COM_SUPPORTGROUPS_AREAS_BATCH_OPTIONS="Batch process the selected Areas" +COM_SUPPORTGROUPS_AREAS_BATCH_TIP="All changes will be applied to all selected Areas" +COM_SUPPORTGROUPS_AREAS_BATCH_USE="Areas Batch Use" +COM_SUPPORTGROUPS_AREAS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch areas" +COM_SUPPORTGROUPS_AREAS_CREATE="Areas Create" +COM_SUPPORTGROUPS_AREAS_CREATE_DESC="Allows the users in this group to create create areas" +COM_SUPPORTGROUPS_AREAS_DASHBOARD_ADD="Areas Dashboard Add" +COM_SUPPORTGROUPS_AREAS_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the area" +COM_SUPPORTGROUPS_AREAS_DASHBOARD_LIST="Areas Dashboard List" +COM_SUPPORTGROUPS_AREAS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the area" +COM_SUPPORTGROUPS_AREAS_DELETE="Areas Delete" +COM_SUPPORTGROUPS_AREAS_DELETE_DESC="Allows the users in this group to delete delete areas" +COM_SUPPORTGROUPS_AREAS_EDIT="Areas Edit" +COM_SUPPORTGROUPS_AREAS_EDIT_ALIAS="Areas Edit Alias" +COM_SUPPORTGROUPS_AREAS_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_AREA_TYPE="Areas Edit Area Type" +COM_SUPPORTGROUPS_AREAS_EDIT_AREA_TYPE_DESC="Allows the users in this group to update the edit area type of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_COLOR="Areas Edit Color" +COM_SUPPORTGROUPS_AREAS_EDIT_COLOR_DESC="Allows the users in this group to update the edit color of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_CREATED_BY="Areas Edit Created By" +COM_SUPPORTGROUPS_AREAS_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by areas" +COM_SUPPORTGROUPS_AREAS_EDIT_CREATED_DATE="Areas Edit Created Date" +COM_SUPPORTGROUPS_AREAS_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created areas" +COM_SUPPORTGROUPS_AREAS_EDIT_DESC="Allows the users in this group to edit the area" +COM_SUPPORTGROUPS_AREAS_EDIT_DETAILS="Areas Edit Details" +COM_SUPPORTGROUPS_AREAS_EDIT_DETAILS_DESC="Allows the users in this group to update the edit details of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_NAME="Areas Edit Name" +COM_SUPPORTGROUPS_AREAS_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_OWN="Areas Edit Own" +COM_SUPPORTGROUPS_AREAS_EDIT_OWN_DESC="Allows the users in this group to edit edit own areas created by them" +COM_SUPPORTGROUPS_AREAS_EDIT_REGION="Areas Edit Region" +COM_SUPPORTGROUPS_AREAS_EDIT_REGION_DESC="Allows the users in this group to update the edit region of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_STATE="Areas Edit State" +COM_SUPPORTGROUPS_AREAS_EDIT_STATE_DESC="Allows the users in this group to update the state of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_VERSION="Areas Edit Version" +COM_SUPPORTGROUPS_AREAS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version areas" +COM_SUPPORTGROUPS_AREAS_EXPORT="Areas Export" +COM_SUPPORTGROUPS_AREAS_EXPORT_DESC="Allows the users in this group to export export areas" +COM_SUPPORTGROUPS_AREAS_IMPORT="Areas Import" +COM_SUPPORTGROUPS_AREAS_IMPORT_DESC="Allows the users in this group to import import areas" +COM_SUPPORTGROUPS_AREAS_N_ITEMS_ARCHIVED="%s Areas archived." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_ARCHIVED_1="%s Area archived." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_CHECKED_IN_0="No Area successfully checked in." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_CHECKED_IN_1="%d Area successfully checked in." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_CHECKED_IN_MORE="%d Areas successfully checked in." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_DELETED="%s Areas deleted." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_DELETED_1="%s Area deleted." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_FEATURED="%s Areas featured." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_FEATURED_1="%s Area featured." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_PUBLISHED="%s Areas published." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_PUBLISHED_1="%s Area published." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_TRASHED="%s Areas trashed." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_TRASHED_1="%s Area trashed." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_UNFEATURED="%s Areas unfeatured." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_UNFEATURED_1="%s Area unfeatured." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_UNPUBLISHED="%s Areas unpublished." +COM_SUPPORTGROUPS_AREAS_N_ITEMS_UNPUBLISHED_1="%s Area unpublished." +COM_SUPPORTGROUPS_AREAS_SUBMENU="Areas Submenu" +COM_SUPPORTGROUPS_AREAS_SUBMENU_DESC="Allows the users in this group to update the submenu of the area" +COM_SUPPORTGROUPS_AREA_ALIAS="Alias" +COM_SUPPORTGROUPS_AREA_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_AREA_ALIAS_LABEL="Alias" +COM_SUPPORTGROUPS_AREA_AREA_TYPE="Area Type" +COM_SUPPORTGROUPS_AREA_AREA_TYPE_DESCRIPTION="Please select the area type." +COM_SUPPORTGROUPS_AREA_AREA_TYPE_LABEL="Type" +COM_SUPPORTGROUPS_AREA_COLOR="Color" +COM_SUPPORTGROUPS_AREA_COLOR_DESCRIPTION="Select the colour that should be used on the map." +COM_SUPPORTGROUPS_AREA_COLOR_LABEL="Map Marker Colour" +COM_SUPPORTGROUPS_AREA_CREATED_BY_DESC="The user that created this Area." +COM_SUPPORTGROUPS_AREA_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_AREA_CREATED_DATE_DESC="The date this Area was created." +COM_SUPPORTGROUPS_AREA_CREATED_DATE_LABEL="Created Date" +COM_SUPPORTGROUPS_AREA_DETAILS="Details" +COM_SUPPORTGROUPS_AREA_DETAILS_LABEL="Details" +COM_SUPPORTGROUPS_AREA_EDIT="Editing the Area" +COM_SUPPORTGROUPS_AREA_ERROR_UNIQUE_ALIAS="Another Area has the same alias." +COM_SUPPORTGROUPS_AREA_ID="Id" +COM_SUPPORTGROUPS_AREA_MODIFIED_BY_DESC="The last user that modified this Area." +COM_SUPPORTGROUPS_AREA_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_AREA_MODIFIED_DATE_DESC="The date this Area was modified." +COM_SUPPORTGROUPS_AREA_MODIFIED_DATE_LABEL="Modified Date" +COM_SUPPORTGROUPS_AREA_NAME="Name" +COM_SUPPORTGROUPS_AREA_NAME_DESCRIPTION="Enter Name Here" +COM_SUPPORTGROUPS_AREA_NAME_HINT="Name Here" +COM_SUPPORTGROUPS_AREA_NAME_LABEL="Name" +COM_SUPPORTGROUPS_AREA_NAME_MESSAGE="Error! Please add name here." +COM_SUPPORTGROUPS_AREA_NEW="A New Area" +COM_SUPPORTGROUPS_AREA_ORDERING_LABEL="Ordering" +COM_SUPPORTGROUPS_AREA_PERMISSION="Permissions" +COM_SUPPORTGROUPS_AREA_PUBLISHING="Publishing" +COM_SUPPORTGROUPS_AREA_REGION="Region" +COM_SUPPORTGROUPS_AREA_REGION_DESCRIPTION="Please select the region this area belongs to." +COM_SUPPORTGROUPS_AREA_REGION_LABEL="Region" +COM_SUPPORTGROUPS_AREA_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Area to customise the alias." +COM_SUPPORTGROUPS_AREA_SETTINGS="Settings" +COM_SUPPORTGROUPS_AREA_STATUS="Status" +COM_SUPPORTGROUPS_AREA_SUPPORT_GROUPS="Support Groups" +COM_SUPPORTGROUPS_AREA_TYPE="Area Type" +COM_SUPPORTGROUPS_AREA_TYPES="Area Types" +COM_SUPPORTGROUPS_AREA_TYPES_ACCESS="Area Types Access" +COM_SUPPORTGROUPS_AREA_TYPES_ACCESS_DESC="Allows the users in this group to access access area types" +COM_SUPPORTGROUPS_AREA_TYPES_BATCH_OPTIONS="Batch process the selected Area Types" +COM_SUPPORTGROUPS_AREA_TYPES_BATCH_TIP="All changes will be applied to all selected Area Types" +COM_SUPPORTGROUPS_AREA_TYPES_BATCH_USE="Area Types Batch Use" +COM_SUPPORTGROUPS_AREA_TYPES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch area types" +COM_SUPPORTGROUPS_AREA_TYPES_CREATE="Area Types Create" +COM_SUPPORTGROUPS_AREA_TYPES_CREATE_DESC="Allows the users in this group to create create area types" +COM_SUPPORTGROUPS_AREA_TYPES_DELETE="Area Types Delete" +COM_SUPPORTGROUPS_AREA_TYPES_DELETE_DESC="Allows the users in this group to delete delete area types" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT="Area Types Edit" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_ALIAS="Area Types Edit Alias" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the area type" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_CREATED_BY="Area Types Edit Created By" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by area types" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_CREATED_DATE="Area Types Edit Created Date" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created area types" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_DESC="Allows the users in this group to edit the area type" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_NAME="Area Types Edit Name" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the area type" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_OWN="Area Types Edit Own" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_OWN_DESC="Allows the users in this group to edit edit own area types created by them" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_STATE="Area Types Edit State" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_STATE_DESC="Allows the users in this group to update the state of the area type" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_VERSION="Area Types Edit Version" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version area types" +COM_SUPPORTGROUPS_AREA_TYPES_EXPORT="Area Types Export" +COM_SUPPORTGROUPS_AREA_TYPES_EXPORT_DESC="Allows the users in this group to export export area types" +COM_SUPPORTGROUPS_AREA_TYPES_IMPORT="Area Types Import" +COM_SUPPORTGROUPS_AREA_TYPES_IMPORT_DESC="Allows the users in this group to import import area types" +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_ARCHIVED="%s Area Types archived." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_ARCHIVED_1="%s Area Type archived." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_CHECKED_IN_0="No Area Type successfully checked in." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_CHECKED_IN_1="%d Area Type successfully checked in." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_CHECKED_IN_MORE="%d Area Types successfully checked in." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_DELETED="%s Area Types deleted." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_DELETED_1="%s Area Type deleted." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_FEATURED="%s Area Types featured." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_FEATURED_1="%s Area Type featured." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_PUBLISHED="%s Area Types published." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_PUBLISHED_1="%s Area Type published." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_TRASHED="%s Area Types trashed." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_TRASHED_1="%s Area Type trashed." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_UNFEATURED="%s Area Types unfeatured." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_UNFEATURED_1="%s Area Type unfeatured." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_UNPUBLISHED="%s Area Types unpublished." +COM_SUPPORTGROUPS_AREA_TYPES_N_ITEMS_UNPUBLISHED_1="%s Area Type unpublished." +COM_SUPPORTGROUPS_AREA_TYPE_ALIAS="Alias" +COM_SUPPORTGROUPS_AREA_TYPE_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_AREA_TYPE_ALIAS_LABEL="Alias" +COM_SUPPORTGROUPS_AREA_TYPE_CREATED_BY_DESC="The user that created this Area Type." +COM_SUPPORTGROUPS_AREA_TYPE_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_AREA_TYPE_CREATED_DATE_DESC="The date this Area Type was created." +COM_SUPPORTGROUPS_AREA_TYPE_CREATED_DATE_LABEL="Created Date" +COM_SUPPORTGROUPS_AREA_TYPE_DETAILS="Details" +COM_SUPPORTGROUPS_AREA_TYPE_EDIT="Editing the Area Type" +COM_SUPPORTGROUPS_AREA_TYPE_ERROR_UNIQUE_ALIAS="Another Area Type has the same alias." +COM_SUPPORTGROUPS_AREA_TYPE_ID="Id" +COM_SUPPORTGROUPS_AREA_TYPE_MODIFIED_BY_DESC="The last user that modified this Area Type." +COM_SUPPORTGROUPS_AREA_TYPE_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_AREA_TYPE_MODIFIED_DATE_DESC="The date this Area Type was modified." +COM_SUPPORTGROUPS_AREA_TYPE_MODIFIED_DATE_LABEL="Modified Date" +COM_SUPPORTGROUPS_AREA_TYPE_NAME="Name" +COM_SUPPORTGROUPS_AREA_TYPE_NAME_DESCRIPTION="Enter Name Here" +COM_SUPPORTGROUPS_AREA_TYPE_NAME_HINT="Name Here" +COM_SUPPORTGROUPS_AREA_TYPE_NAME_LABEL="Name" +COM_SUPPORTGROUPS_AREA_TYPE_NAME_MESSAGE="Error! Please add name here." +COM_SUPPORTGROUPS_AREA_TYPE_NEW="A New Area Type" +COM_SUPPORTGROUPS_AREA_TYPE_ORDERING_LABEL="Ordering" +COM_SUPPORTGROUPS_AREA_TYPE_PERMISSION="Permissions" +COM_SUPPORTGROUPS_AREA_TYPE_PUBLISHING="Publishing" +COM_SUPPORTGROUPS_AREA_TYPE_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Area Type to customise the alias." +COM_SUPPORTGROUPS_AREA_TYPE_STATUS="Status" +COM_SUPPORTGROUPS_AREA_TYPE_VERSION_DESC="A count of the number of times this Area Type has been revised." +COM_SUPPORTGROUPS_AREA_TYPE_VERSION_LABEL="Revision" +COM_SUPPORTGROUPS_AREA_VERSION_DESC="A count of the number of times this Area has been revised." +COM_SUPPORTGROUPS_AREA_VERSION_LABEL="Revision" COM_SUPPORTGROUPS_AUTHOR="Author" COM_SUPPORTGROUPS_BACK="Back" -COM_SUPPORTGROUPS_CLINIC="Clinic" -COM_SUPPORTGROUPS_CLINICS="Clinics" -COM_SUPPORTGROUPS_CLINICS_ACCESS="Clinics Access" -COM_SUPPORTGROUPS_CLINICS_ACCESS_DESC="Allows the users in this group to access access clinics" -COM_SUPPORTGROUPS_CLINICS_BATCH_OPTIONS="Batch process the selected Clinics" -COM_SUPPORTGROUPS_CLINICS_BATCH_TIP="All changes will be applied to all selected Clinics" -COM_SUPPORTGROUPS_CLINICS_BATCH_USE="Clinics Batch Use" -COM_SUPPORTGROUPS_CLINICS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch clinics" -COM_SUPPORTGROUPS_CLINICS_CREATE="Clinics Create" -COM_SUPPORTGROUPS_CLINICS_CREATE_DESC="Allows the users in this group to create create clinics" -COM_SUPPORTGROUPS_CLINICS_DASHBOARD_LIST="Clinics Dashboard List" -COM_SUPPORTGROUPS_CLINICS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the clinic" -COM_SUPPORTGROUPS_CLINICS_DELETE="Clinics Delete" -COM_SUPPORTGROUPS_CLINICS_DELETE_DESC="Allows the users in this group to delete delete clinics" -COM_SUPPORTGROUPS_CLINICS_EDIT="Clinics Edit" -COM_SUPPORTGROUPS_CLINICS_EDIT_CREATED_BY="Clinics Edit Created By" -COM_SUPPORTGROUPS_CLINICS_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by clinics" -COM_SUPPORTGROUPS_CLINICS_EDIT_CREATED_DATE="Clinics Edit Created Date" -COM_SUPPORTGROUPS_CLINICS_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created clinics" -COM_SUPPORTGROUPS_CLINICS_EDIT_DESC="Allows the users in this group to edit the clinic" -COM_SUPPORTGROUPS_CLINICS_EDIT_NAME="Clinics Edit Name" -COM_SUPPORTGROUPS_CLINICS_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the clinic" -COM_SUPPORTGROUPS_CLINICS_EDIT_NOTE_SET_AREA="Clinics Edit Note Set Area" -COM_SUPPORTGROUPS_CLINICS_EDIT_NOTE_SET_AREA_DESC="Allows the users in this group to update the edit note set area of the clinic" -COM_SUPPORTGROUPS_CLINICS_EDIT_OWN="Clinics Edit Own" -COM_SUPPORTGROUPS_CLINICS_EDIT_OWN_DESC="Allows the users in this group to edit edit own clinics created by them" -COM_SUPPORTGROUPS_CLINICS_EDIT_PHONE="Clinics Edit Phone" -COM_SUPPORTGROUPS_CLINICS_EDIT_PHONE_DESC="Allows the users in this group to update the edit phone of the clinic" -COM_SUPPORTGROUPS_CLINICS_EDIT_STATE="Clinics Edit State" -COM_SUPPORTGROUPS_CLINICS_EDIT_STATE_DESC="Allows the users in this group to update the state of the clinic" -COM_SUPPORTGROUPS_CLINICS_EDIT_VERSION="Clinics Edit Version" -COM_SUPPORTGROUPS_CLINICS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version clinics" -COM_SUPPORTGROUPS_CLINICS_EXPORT="Clinics Export" -COM_SUPPORTGROUPS_CLINICS_EXPORT_DESC="Allows the users in this group to export export clinics" -COM_SUPPORTGROUPS_CLINICS_IMPORT="Clinics Import" -COM_SUPPORTGROUPS_CLINICS_IMPORT_DESC="Allows the users in this group to import import clinics" -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_ARCHIVED="%s Clinics archived." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_ARCHIVED_1="%s Clinic archived." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_CHECKED_IN_0="No Clinic successfully checked in." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_CHECKED_IN_1="%d Clinic successfully checked in." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_CHECKED_IN_MORE="%d Clinics successfully checked in." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_DELETED="%s Clinics deleted." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_DELETED_1="%s Clinic deleted." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_FEATURED="%s Clinics featured." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_FEATURED_1="%s Clinic featured." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_PUBLISHED="%s Clinics published." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_PUBLISHED_1="%s Clinic published." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_TRASHED="%s Clinics trashed." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_TRASHED_1="%s Clinic trashed." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_UNFEATURED="%s Clinics unfeatured." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_UNFEATURED_1="%s Clinic unfeatured." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_UNPUBLISHED="%s Clinics unpublished." -COM_SUPPORTGROUPS_CLINICS_N_ITEMS_UNPUBLISHED_1="%s Clinic unpublished." -COM_SUPPORTGROUPS_CLINICS_SUBMENU="Clinics Submenu" -COM_SUPPORTGROUPS_CLINICS_SUBMENU_DESC="Allows the users in this group to update the submenu of the clinic" -COM_SUPPORTGROUPS_CLINIC_AREA="Area" -COM_SUPPORTGROUPS_CLINIC_CREATED_BY_DESC="The user that created the Clinic." -COM_SUPPORTGROUPS_CLINIC_CREATED_BY_LABEL="Created by" -COM_SUPPORTGROUPS_CLINIC_CREATED_DATE_DESC="The date Clinic was created." -COM_SUPPORTGROUPS_CLINIC_CREATED_DATE_LABEL="Created date" -COM_SUPPORTGROUPS_CLINIC_DETAILS="Details" -COM_SUPPORTGROUPS_CLINIC_EDIT="Editing the Clinic" -COM_SUPPORTGROUPS_CLINIC_ERROR_UNIQUE_ALIAS="Another Clinic has the same alias." -COM_SUPPORTGROUPS_CLINIC_ID="Id" -COM_SUPPORTGROUPS_CLINIC_NAME="Name" -COM_SUPPORTGROUPS_CLINIC_NAME_DESCRIPTION="Enter Name Here" -COM_SUPPORTGROUPS_CLINIC_NAME_HINT="Name Here" -COM_SUPPORTGROUPS_CLINIC_NAME_LABEL="Name" -COM_SUPPORTGROUPS_CLINIC_NEW="A New Clinic" -COM_SUPPORTGROUPS_CLINIC_NOTE_SET_AREA_DESCRIPTION="We will add a map here that the location can be drawn on." -COM_SUPPORTGROUPS_CLINIC_NOTE_SET_AREA_LABEL="Set Location" -COM_SUPPORTGROUPS_CLINIC_ORDERING_LABEL="Ordering" -COM_SUPPORTGROUPS_CLINIC_PERMISSION="Permissions" -COM_SUPPORTGROUPS_CLINIC_PHONE="Phone" -COM_SUPPORTGROUPS_CLINIC_PHONE_DESCRIPTION="The phone number of the contact person." -COM_SUPPORTGROUPS_CLINIC_PHONE_HINT="Phone Number Here!" -COM_SUPPORTGROUPS_CLINIC_PHONE_LABEL="Phone Number" -COM_SUPPORTGROUPS_CLINIC_PUBLISHING="Publishing" -COM_SUPPORTGROUPS_CLINIC_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Clinic to customise the alias." -COM_SUPPORTGROUPS_CLINIC_STATUS="Status" -COM_SUPPORTGROUPS_CLINIC_VERSION_DESC="A count of the number of times this Clinic has been revised." -COM_SUPPORTGROUPS_CLINIC_VERSION_LABEL="Revision" +COM_SUPPORTGROUPS_CLOSE_NEW="Close & New" +COM_SUPPORTGROUPS_CONFIG_ACTIVE="Active" COM_SUPPORTGROUPS_CONFIG_ALMOST_FLAT_LOAD="Almost Flat" +COM_SUPPORTGROUPS_CONFIG_API_KEY_DESCRIPTION="Add you Google API Key Here." +COM_SUPPORTGROUPS_CONFIG_API_KEY_HINT="YOUR_API_KEY" +COM_SUPPORTGROUPS_CONFIG_API_KEY_LABEL="Google API Key" +COM_SUPPORTGROUPS_CONFIG_API_KEY_MESSAGE="Error! Please add API Key here." COM_SUPPORTGROUPS_CONFIG_AUTHOR="Author Info" COM_SUPPORTGROUPS_CONFIG_AUTHOR_EMAIL_DESC="The email address of the author of this component." COM_SUPPORTGROUPS_CONFIG_AUTHOR_EMAIL_LABEL="Author Email" @@ -98,17 +297,59 @@ COM_SUPPORTGROUPS_CONFIG_CHECK_TIMER_OPTION_ONE="Every five hours" COM_SUPPORTGROUPS_CONFIG_CHECK_TIMER_OPTION_SIX="Never" COM_SUPPORTGROUPS_CONFIG_CHECK_TIMER_OPTION_THREE="Once a day" COM_SUPPORTGROUPS_CONFIG_CHECK_TIMER_OPTION_TWO="Every twelve hours" +COM_SUPPORTGROUPS_CONFIG_CLUSTERGRIDSIZE_DESCRIPTION="Set the grid size of the clustered markers." +COM_SUPPORTGROUPS_CONFIG_CLUSTERGRIDSIZE_HINT="Only Numbers" +COM_SUPPORTGROUPS_CONFIG_CLUSTERGRIDSIZE_LABEL="Clustering Grid Size" +COM_SUPPORTGROUPS_CONFIG_CLUSTERGRIDSIZE_MESSAGE="Error! Please add number cluster grid size here." +COM_SUPPORTGROUPS_CONFIG_CLUSTERMAXZOOM_DESCRIPTION="Set the zoom level for when to stop clustering the markers." +COM_SUPPORTGROUPS_CONFIG_CLUSTERMAXZOOM_LABEL="Cluster Zoom Level" +COM_SUPPORTGROUPS_CONFIG_CLUSTER_AT_DESCRIPTION="Set the total of markers that will trigger the cluster feature to activate." +COM_SUPPORTGROUPS_CONFIG_CLUSTER_AT_HINT="Only Numbers" +COM_SUPPORTGROUPS_CONFIG_CLUSTER_AT_LABEL="Clustering @" +COM_SUPPORTGROUPS_CONFIG_CLUSTER_AT_MESSAGE="Error! Please add number of to activate clustering here." +COM_SUPPORTGROUPS_CONFIG_CLUSTER_DESCRIPTION="Should we cluster the markers on the map." +COM_SUPPORTGROUPS_CONFIG_CLUSTER_LABEL="Cluster Markers" COM_SUPPORTGROUPS_CONFIG_DONT_LOAD="Not" +COM_SUPPORTGROUPS_CONFIG_EVERY_DAY="Every Day" +COM_SUPPORTGROUPS_CONFIG_EVERY_FIFTEEN_MINUTES="Every 15 Minutes" +COM_SUPPORTGROUPS_CONFIG_EVERY_FIVE_HOURS="Every 5 Hours" +COM_SUPPORTGROUPS_CONFIG_EVERY_FIVE_MINUTES="Every 5 Minutes" +COM_SUPPORTGROUPS_CONFIG_EVERY_HOUR="Every Hour" +COM_SUPPORTGROUPS_CONFIG_EVERY_MINUTE="Every Minute" +COM_SUPPORTGROUPS_CONFIG_EVERY_SESSION="Every Session" +COM_SUPPORTGROUPS_CONFIG_EVERY_TEN_HOURS="Every 10 Hours" +COM_SUPPORTGROUPS_CONFIG_EVERY_THIRTY_MINUTES="Every 30 Minutes" +COM_SUPPORTGROUPS_CONFIG_EVERY_THIRTY_SECONDS="Every 30 Seconds" +COM_SUPPORTGROUPS_CONFIG_EVERY_WEEK="Every Week" COM_SUPPORTGROUPS_CONFIG_FLAT_LOAD="Flat" COM_SUPPORTGROUPS_CONFIG_FORCE_LOAD="Force" COM_SUPPORTGROUPS_CONFIG_GLOBAL_DESC="The Global Parameters" COM_SUPPORTGROUPS_CONFIG_GLOBAL_LABEL="Global" +COM_SUPPORTGROUPS_CONFIG_GOOGLE_MAPS="Google Maps" +COM_SUPPORTGROUPS_CONFIG_GOTOZOOM_DESCRIPTION="Set the zoom level to use when going to a group or facility." +COM_SUPPORTGROUPS_CONFIG_GOTOZOOM_LABEL="Go To Zoom Level" COM_SUPPORTGROUPS_CONFIG_GRADIANT_LOAD="Gradient" +COM_SUPPORTGROUPS_CONFIG_HYBRID="Hybrid" +COM_SUPPORTGROUPS_CONFIG_INACTIVE="Inactive" +COM_SUPPORTGROUPS_CONFIG_MAPTYPE_DESCRIPTION="Set the type of map to use." +COM_SUPPORTGROUPS_CONFIG_MAPTYPE_LABEL="Map Type" +COM_SUPPORTGROUPS_CONFIG_MAXZOOM_DESCRIPTION="Set the default zoom level to start the map in when the page loads for the first time." +COM_SUPPORTGROUPS_CONFIG_MAXZOOM_LABEL="Starting Zoom Level" +COM_SUPPORTGROUPS_CONFIG_NEVER_UPDATE="Never update" COM_SUPPORTGROUPS_CONFIG_NO="No" +COM_SUPPORTGROUPS_CONFIG_NOTE_GOOGLE_API_DESCRIPTION="You will need to add your Google standard JavaScript API Key Here (Browser key). To get a key [CLICK HERE]" +COM_SUPPORTGROUPS_CONFIG_NOTE_GOOGLE_API_LABEL="Google Maps API Key" COM_SUPPORTGROUPS_CONFIG_ONLY_EXTRA="Only Extra" +COM_SUPPORTGROUPS_CONFIG_ROAD="Road" +COM_SUPPORTGROUPS_CONFIG_SATELLITE="Satellite" +COM_SUPPORTGROUPS_CONFIG_SET_BROWSER_STORAGE_DESCRIPTION="Select if browser storage should be used to save on Ajax calls and speed up this components site pages." +COM_SUPPORTGROUPS_CONFIG_SET_BROWSER_STORAGE_LABEL="Browser Storage" +COM_SUPPORTGROUPS_CONFIG_STORAGE_TIME_TO_LIVE_DESCRIPTION="How long should the data that is stored in the browser memory remain unchanged before it is removed and updated." +COM_SUPPORTGROUPS_CONFIG_STORAGE_TIME_TO_LIVE_LABEL="Update Cycle" +COM_SUPPORTGROUPS_CONFIG_TERRAIN="Terrain" COM_SUPPORTGROUPS_CONFIG_UIKIT_DESC="The Parameters for the uikit are set here.
Uikit is a lightweight and modular front-end framework -for developing fast and powerful web interfaces. For more info visit http://getuikit.com/" -COM_SUPPORTGROUPS_CONFIG_UIKIT_LABEL="Uikit Settings" +for developing fast and powerful web interfaces. For more info visit https://getuikit.com/v2/" +COM_SUPPORTGROUPS_CONFIG_UIKIT_LABEL="Uikit2 Settings" COM_SUPPORTGROUPS_CONFIG_UIKIT_LOAD_DESC="Set the uikit loading option." COM_SUPPORTGROUPS_CONFIG_UIKIT_LOAD_LABEL="Loading Options" COM_SUPPORTGROUPS_CONFIG_UIKIT_MIN_DESC="Should the minified version of uikit files be loaded?" @@ -165,28 +406,36 @@ COM_SUPPORTGROUPS_COUNTRIES_SUBMENU_DESC="Allows the users in this group to upda COM_SUPPORTGROUPS_COUNTRY="Country" COM_SUPPORTGROUPS_COUNTRY_ALIAS="Alias" COM_SUPPORTGROUPS_COUNTRY_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_COUNTRY_ALIAS_LABEL="Alias" COM_SUPPORTGROUPS_COUNTRY_CODETHREE="Codethree" COM_SUPPORTGROUPS_COUNTRY_CODETHREE_DESCRIPTION="ISO 3166-1 alpha-3 codes are three-letter country codes defined in ISO 3166-1, part of the ISO 3166 standard published by the International Organization for Standardization (ISO), to represent countries, dependent territories, and special areas of geographical interest." COM_SUPPORTGROUPS_COUNTRY_CODETHREE_HINT="NAM" COM_SUPPORTGROUPS_COUNTRY_CODETHREE_LABEL="Code Three" +COM_SUPPORTGROUPS_COUNTRY_CODETHREE_MESSAGE="Error! Please add three-letter country code here." COM_SUPPORTGROUPS_COUNTRY_CODETWO="Codetwo" COM_SUPPORTGROUPS_COUNTRY_CODETWO_DESCRIPTION="ISO 3166-1 alpha-2 codes are two-letter country codes defined in ISO 3166-1, part of the ISO 3166 standard published by the International Organization for Standardization (ISO), to represent countries, dependent territories, and special areas of geographical interest." COM_SUPPORTGROUPS_COUNTRY_CODETWO_HINT="NA" COM_SUPPORTGROUPS_COUNTRY_CODETWO_LABEL="Code Two" -COM_SUPPORTGROUPS_COUNTRY_CREATED_BY_DESC="The user that created the Country." -COM_SUPPORTGROUPS_COUNTRY_CREATED_BY_LABEL="Created by" -COM_SUPPORTGROUPS_COUNTRY_CREATED_DATE_DESC="The date Country was created." -COM_SUPPORTGROUPS_COUNTRY_CREATED_DATE_LABEL="Created date" +COM_SUPPORTGROUPS_COUNTRY_CODETWO_MESSAGE="Error! Please add two-letter country code here." +COM_SUPPORTGROUPS_COUNTRY_CREATED_BY_DESC="The user that created this Country." +COM_SUPPORTGROUPS_COUNTRY_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_COUNTRY_CREATED_DATE_DESC="The date this Country was created." +COM_SUPPORTGROUPS_COUNTRY_CREATED_DATE_LABEL="Created Date" COM_SUPPORTGROUPS_COUNTRY_CURRENCY="Currency" COM_SUPPORTGROUPS_COUNTRY_CURRENCY_DESCRIPTION="List of available currencies" COM_SUPPORTGROUPS_COUNTRY_CURRENCY_LABEL="Currency" COM_SUPPORTGROUPS_COUNTRY_EDIT="Editing the Country" COM_SUPPORTGROUPS_COUNTRY_ERROR_UNIQUE_ALIAS="Another Country has the same alias." COM_SUPPORTGROUPS_COUNTRY_ID="Id" +COM_SUPPORTGROUPS_COUNTRY_MODIFIED_BY_DESC="The last user that modified this Country." +COM_SUPPORTGROUPS_COUNTRY_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_COUNTRY_MODIFIED_DATE_DESC="The date this Country was modified." +COM_SUPPORTGROUPS_COUNTRY_MODIFIED_DATE_LABEL="Modified Date" COM_SUPPORTGROUPS_COUNTRY_NAME="Name" COM_SUPPORTGROUPS_COUNTRY_NAME_DESCRIPTION="Enter Name Here" COM_SUPPORTGROUPS_COUNTRY_NAME_HINT="Name Here" COM_SUPPORTGROUPS_COUNTRY_NAME_LABEL="Name" +COM_SUPPORTGROUPS_COUNTRY_NAME_MESSAGE="Error! Please add name here." COM_SUPPORTGROUPS_COUNTRY_NEW="A New Country" COM_SUPPORTGROUPS_COUNTRY_ORDERING_LABEL="Ordering" COM_SUPPORTGROUPS_COUNTRY_PERMISSION="Permissions" @@ -201,6 +450,8 @@ COM_SUPPORTGROUPS_COUNTRY_WORLDZONE="Worldzone" COM_SUPPORTGROUPS_COUNTRY_WORLDZONE_DESCRIPTION="The zone this country belongs to" COM_SUPPORTGROUPS_COUNTRY_WORLDZONE_HINT="only number" COM_SUPPORTGROUPS_COUNTRY_WORLDZONE_LABEL="Worldzone" +COM_SUPPORTGROUPS_COUNTRY_WORLDZONE_MESSAGE="Error! Please add zone code here." +COM_SUPPORTGROUPS_CREATE_NEW_S="Create New %s" COM_SUPPORTGROUPS_CURRENCIES="Currencies" COM_SUPPORTGROUPS_CURRENCIES_ACCESS="Currencies Access" COM_SUPPORTGROUPS_CURRENCIES_ACCESS_DESC="Allows the users in this group to access access currencies" @@ -248,45 +499,57 @@ COM_SUPPORTGROUPS_CURRENCIES_SUBMENU_DESC="Allows the users in this group to upd COM_SUPPORTGROUPS_CURRENCY="Currency" COM_SUPPORTGROUPS_CURRENCY_ALIAS="Alias" COM_SUPPORTGROUPS_CURRENCY_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_CURRENCY_ALIAS_LABEL="Alias" COM_SUPPORTGROUPS_CURRENCY_CODETHREE="Codethree" COM_SUPPORTGROUPS_CURRENCY_CODETHREE_DESCRIPTION="The following is a list of active codes of official ISO 4217 currency names." COM_SUPPORTGROUPS_CURRENCY_CODETHREE_HINT="NAD" COM_SUPPORTGROUPS_CURRENCY_CODETHREE_LABEL="Code Three" -COM_SUPPORTGROUPS_CURRENCY_CREATED_BY_DESC="The user that created the Currency." -COM_SUPPORTGROUPS_CURRENCY_CREATED_BY_LABEL="Created by" -COM_SUPPORTGROUPS_CURRENCY_CREATED_DATE_DESC="The date Currency was created." -COM_SUPPORTGROUPS_CURRENCY_CREATED_DATE_LABEL="Created date" +COM_SUPPORTGROUPS_CURRENCY_CODETHREE_MESSAGE="Error! Please add three-letter currency code here." +COM_SUPPORTGROUPS_CURRENCY_CREATED_BY_DESC="The user that created this Currency." +COM_SUPPORTGROUPS_CURRENCY_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_CURRENCY_CREATED_DATE_DESC="The date this Currency was created." +COM_SUPPORTGROUPS_CURRENCY_CREATED_DATE_LABEL="Created Date" COM_SUPPORTGROUPS_CURRENCY_DECIMALPLACE="Decimalplace" COM_SUPPORTGROUPS_CURRENCY_DECIMALPLACE_DESCRIPTION=" The position of a digit to the right of a decimal point, usually identified by successive ascending ordinal numbers with the digit immediately to the right of the decimal point being first: a figure accurate to the third decimal place." COM_SUPPORTGROUPS_CURRENCY_DECIMALPLACE_HINT="2" COM_SUPPORTGROUPS_CURRENCY_DECIMALPLACE_LABEL="Decimal place" +COM_SUPPORTGROUPS_CURRENCY_DECIMALPLACE_MESSAGE="Error! Please add currency decimal place here." COM_SUPPORTGROUPS_CURRENCY_DECIMALSYMBOL="Decimalsymbol" COM_SUPPORTGROUPS_CURRENCY_DECIMALSYMBOL_DESCRIPTION=" The symbol used to separate the integer part of a decimal number from its fractional part is called the decimal point." COM_SUPPORTGROUPS_CURRENCY_DECIMALSYMBOL_HINT="." COM_SUPPORTGROUPS_CURRENCY_DECIMALSYMBOL_LABEL="Decimal symbol" +COM_SUPPORTGROUPS_CURRENCY_DECIMALSYMBOL_MESSAGE="Error! Please add currency decimal symbol here." COM_SUPPORTGROUPS_CURRENCY_DETAILS="Details" COM_SUPPORTGROUPS_CURRENCY_EDIT="Editing the Currency" COM_SUPPORTGROUPS_CURRENCY_ERROR_UNIQUE_ALIAS="Another Currency has the same alias." COM_SUPPORTGROUPS_CURRENCY_ID="Id" +COM_SUPPORTGROUPS_CURRENCY_MODIFIED_BY_DESC="The last user that modified this Currency." +COM_SUPPORTGROUPS_CURRENCY_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_CURRENCY_MODIFIED_DATE_DESC="The date this Currency was modified." +COM_SUPPORTGROUPS_CURRENCY_MODIFIED_DATE_LABEL="Modified Date" COM_SUPPORTGROUPS_CURRENCY_NAME="Name" COM_SUPPORTGROUPS_CURRENCY_NAME_DESCRIPTION="Enter Name Here" COM_SUPPORTGROUPS_CURRENCY_NAME_HINT="Name Here" COM_SUPPORTGROUPS_CURRENCY_NAME_LABEL="Name" +COM_SUPPORTGROUPS_CURRENCY_NAME_MESSAGE="Error! Please add name here." COM_SUPPORTGROUPS_CURRENCY_NEGATIVESTYLE="Negativestyle" COM_SUPPORTGROUPS_CURRENCY_NEGATIVESTYLE_DESCRIPTION="Please use the following placeholders {sign}{number} {symbol} to build the currency negative style." COM_SUPPORTGROUPS_CURRENCY_NEGATIVESTYLE_HINT="{sign}{number} {symbol}" COM_SUPPORTGROUPS_CURRENCY_NEGATIVESTYLE_LABEL="Negative style" +COM_SUPPORTGROUPS_CURRENCY_NEGATIVESTYLE_MESSAGE="Error! Please add currency negative style here." COM_SUPPORTGROUPS_CURRENCY_NEW="A New Currency" COM_SUPPORTGROUPS_CURRENCY_NUMERICCODE="Numericcode" COM_SUPPORTGROUPS_CURRENCY_NUMERICCODE_DESCRIPTION="There is also a three-digit code number assigned to each currency, in the same manner as there is also a three-digit code number assigned to each country as part of ISO 3166. This numeric code is usually the same as the ISO 3166-1 numeric code. For example, USD (United States dollar) has code 840 which is also the numeric code for the US (United States)." COM_SUPPORTGROUPS_CURRENCY_NUMERICCODE_HINT="516" COM_SUPPORTGROUPS_CURRENCY_NUMERICCODE_LABEL="Numeric Code" +COM_SUPPORTGROUPS_CURRENCY_NUMERICCODE_MESSAGE="Error! Please add numeric code here." COM_SUPPORTGROUPS_CURRENCY_ORDERING_LABEL="Ordering" COM_SUPPORTGROUPS_CURRENCY_PERMISSION="Permissions" COM_SUPPORTGROUPS_CURRENCY_POSITIVESTYLE="Positivestyle" COM_SUPPORTGROUPS_CURRENCY_POSITIVESTYLE_DESCRIPTION="Please use the following placeholders {number} {symbol} to build the currency positive style." COM_SUPPORTGROUPS_CURRENCY_POSITIVESTYLE_HINT="{number} {symbol}" COM_SUPPORTGROUPS_CURRENCY_POSITIVESTYLE_LABEL="Positive style" +COM_SUPPORTGROUPS_CURRENCY_POSITIVESTYLE_MESSAGE="Error! Please add currency positive style here." COM_SUPPORTGROUPS_CURRENCY_PUBLISHING="Publishing" COM_SUPPORTGROUPS_CURRENCY_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Currency to customise the alias." COM_SUPPORTGROUPS_CURRENCY_STATUS="Status" @@ -294,33 +557,225 @@ COM_SUPPORTGROUPS_CURRENCY_SYMBOL="Symbol" COM_SUPPORTGROUPS_CURRENCY_SYMBOL_DESCRIPTION="A currency symbol is a graphic symbol used as a shorthand for a currency's name, especially in reference to amounts of money." COM_SUPPORTGROUPS_CURRENCY_SYMBOL_HINT="N$" COM_SUPPORTGROUPS_CURRENCY_SYMBOL_LABEL="Symbol" +COM_SUPPORTGROUPS_CURRENCY_SYMBOL_MESSAGE="Error! Please add currency symbol here." COM_SUPPORTGROUPS_CURRENCY_THOUSANDS="Thousands" COM_SUPPORTGROUPS_CURRENCY_THOUSANDS_HINT=" " COM_SUPPORTGROUPS_CURRENCY_THOUSANDS_LABEL="Thousands separator" +COM_SUPPORTGROUPS_CURRENCY_THOUSANDS_MESSAGE="Error! Please add currency thousands separator here." COM_SUPPORTGROUPS_CURRENCY_VERSION_DESC="A count of the number of times this Currency has been revised." COM_SUPPORTGROUPS_CURRENCY_VERSION_LABEL="Revision" COM_SUPPORTGROUPS_DASH="Dashboard" COM_SUPPORTGROUPS_DASHBOARD="Support Groups Dashboard" -COM_SUPPORTGROUPS_DASHBOARD_CLINICS="Clinics

" +COM_SUPPORTGROUPS_DASHBOARD_ADDITIONAL_INFORMATION="Additional Information

" +COM_SUPPORTGROUPS_DASHBOARD_ADDITIONAL_INFO_ADD="Add Additional Info

" +COM_SUPPORTGROUPS_DASHBOARD_AREAS="Areas

" +COM_SUPPORTGROUPS_DASHBOARD_AREA_ADD="Add Area

" COM_SUPPORTGROUPS_DASHBOARD_COUNTRIES="Countries

" COM_SUPPORTGROUPS_DASHBOARD_CURRENCIES="Currencies

" +COM_SUPPORTGROUPS_DASHBOARD_FACILITIES="Facilities

" +COM_SUPPORTGROUPS_DASHBOARD_FACILITY_ADD="Add Facility

" COM_SUPPORTGROUPS_DASHBOARD_HELP_DOCUMENTS="Help Documents

" -COM_SUPPORTGROUPS_DASHBOARD_LOCATIONS="Locations

" COM_SUPPORTGROUPS_DASHBOARD_PAYMENTS="Payments

" COM_SUPPORTGROUPS_DASHBOARD_PAYMENT_ADD="Add Payment

" COM_SUPPORTGROUPS_DASHBOARD_REGIONS="Regions

" +COM_SUPPORTGROUPS_DASHBOARD_REGION_ADD="Add Region

" COM_SUPPORTGROUPS_DASHBOARD_SUPPORT_GROUPS="Support Groups

" COM_SUPPORTGROUPS_DASHBOARD_SUPPORT_GROUP_ADD="Add Support Group

" COM_SUPPORTGROUPS_DATE="Date" +COM_SUPPORTGROUPS_DRAG_ME_TO_THE_CLINIC_LOCATION="Drag me to the Clinic Location!" +COM_SUPPORTGROUPS_DRAG_ME_TO_THE_GROUP_LOCATION="Drag me to the Group Location!" COM_SUPPORTGROUPS_EDIT_CREATED_BY="Edit Created By" COM_SUPPORTGROUPS_EDIT_CREATED_BY_DESC=" Allows users in this group to edit created by." COM_SUPPORTGROUPS_EDIT_CREATED_DATE="Edit Created Date" COM_SUPPORTGROUPS_EDIT_CREATED_DATE_DESC=" Allows users in this group to edit created date." +COM_SUPPORTGROUPS_EDIT_S="Edit %s" COM_SUPPORTGROUPS_EDIT_VERSIONS="Edit Version" COM_SUPPORTGROUPS_EDIT_VERSIONS_DESC=" Allows users in this group to edit versions." COM_SUPPORTGROUPS_EXPORT_DATA="Export Data" COM_SUPPORTGROUPS_EXPORT_DATA_DESC=" Allows users in this group to export data." COM_SUPPORTGROUPS_EXPORT_FAILED="Export Failed" +COM_SUPPORTGROUPS_FACILITIES="Facilities" +COM_SUPPORTGROUPS_FACILITIES_ACCESS="Facilities Access" +COM_SUPPORTGROUPS_FACILITIES_ACCESS_DESC="Allows the users in this group to access access facilities" +COM_SUPPORTGROUPS_FACILITIES_BATCH_OPTIONS="Batch process the selected Facilities" +COM_SUPPORTGROUPS_FACILITIES_BATCH_TIP="All changes will be applied to all selected Facilities" +COM_SUPPORTGROUPS_FACILITIES_BATCH_USE="Facilities Batch Use" +COM_SUPPORTGROUPS_FACILITIES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch facilities" +COM_SUPPORTGROUPS_FACILITIES_CREATE="Facilities Create" +COM_SUPPORTGROUPS_FACILITIES_CREATE_DESC="Allows the users in this group to create create facilities" +COM_SUPPORTGROUPS_FACILITIES_DASHBOARD_ADD="Facilities Dashboard Add" +COM_SUPPORTGROUPS_FACILITIES_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the facility" +COM_SUPPORTGROUPS_FACILITIES_DASHBOARD_LIST="Facilities Dashboard List" +COM_SUPPORTGROUPS_FACILITIES_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the facility" +COM_SUPPORTGROUPS_FACILITIES_DELETE="Facilities Delete" +COM_SUPPORTGROUPS_FACILITIES_DELETE_DESC="Allows the users in this group to delete delete facilities" +COM_SUPPORTGROUPS_FACILITIES_EDIT="Facilities Edit" +COM_SUPPORTGROUPS_FACILITIES_EDIT_ALIAS="Facilities Edit Alias" +COM_SUPPORTGROUPS_FACILITIES_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_CREATED_BY="Facilities Edit Created By" +COM_SUPPORTGROUPS_FACILITIES_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by facilities" +COM_SUPPORTGROUPS_FACILITIES_EDIT_CREATED_DATE="Facilities Edit Created Date" +COM_SUPPORTGROUPS_FACILITIES_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created facilities" +COM_SUPPORTGROUPS_FACILITIES_EDIT_DESC="Allows the users in this group to edit the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_DETAILS="Facilities Edit Details" +COM_SUPPORTGROUPS_FACILITIES_EDIT_DETAILS_DESC="Allows the users in this group to update the edit details of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_FACILITY_TYPE="Facilities Edit Facility Type" +COM_SUPPORTGROUPS_FACILITIES_EDIT_FACILITY_TYPE_DESC="Allows the users in this group to update the edit facility type of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_NAME="Facilities Edit Name" +COM_SUPPORTGROUPS_FACILITIES_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_NOTE_SET_MARKER="Facilities Edit Note Set Marker" +COM_SUPPORTGROUPS_FACILITIES_EDIT_NOTE_SET_MARKER_DESC="Allows the users in this group to update the edit note set marker of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_OWN="Facilities Edit Own" +COM_SUPPORTGROUPS_FACILITIES_EDIT_OWN_DESC="Allows the users in this group to edit edit own facilities created by them" +COM_SUPPORTGROUPS_FACILITIES_EDIT_PHONE="Facilities Edit Phone" +COM_SUPPORTGROUPS_FACILITIES_EDIT_PHONE_DESC="Allows the users in this group to update the edit phone of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_STATE="Facilities Edit State" +COM_SUPPORTGROUPS_FACILITIES_EDIT_STATE_DESC="Allows the users in this group to update the state of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_VERSION="Facilities Edit Version" +COM_SUPPORTGROUPS_FACILITIES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version facilities" +COM_SUPPORTGROUPS_FACILITIES_EXPORT="Facilities Export" +COM_SUPPORTGROUPS_FACILITIES_EXPORT_DESC="Allows the users in this group to export export facilities" +COM_SUPPORTGROUPS_FACILITIES_IMPORT="Facilities Import" +COM_SUPPORTGROUPS_FACILITIES_IMPORT_DESC="Allows the users in this group to import import facilities" +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_ARCHIVED="%s Facilities archived." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_ARCHIVED_1="%s Facility archived." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_CHECKED_IN_0="No Facility successfully checked in." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_CHECKED_IN_1="%d Facility successfully checked in." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_CHECKED_IN_MORE="%d Facilities successfully checked in." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_DELETED="%s Facilities deleted." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_DELETED_1="%s Facility deleted." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_FEATURED="%s Facilities featured." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_FEATURED_1="%s Facility featured." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_PUBLISHED="%s Facilities published." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_PUBLISHED_1="%s Facility published." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_TRASHED="%s Facilities trashed." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_TRASHED_1="%s Facility trashed." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_UNFEATURED="%s Facilities unfeatured." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_UNFEATURED_1="%s Facility unfeatured." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_UNPUBLISHED="%s Facilities unpublished." +COM_SUPPORTGROUPS_FACILITIES_N_ITEMS_UNPUBLISHED_1="%s Facility unpublished." +COM_SUPPORTGROUPS_FACILITIES_SUBMENU="Facilities Submenu" +COM_SUPPORTGROUPS_FACILITIES_SUBMENU_DESC="Allows the users in this group to update the submenu of the facility" +COM_SUPPORTGROUPS_FACILITY="Facility" +COM_SUPPORTGROUPS_FACILITY_ALIAS="Alias" +COM_SUPPORTGROUPS_FACILITY_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_FACILITY_ALIAS_LABEL="Alias" +COM_SUPPORTGROUPS_FACILITY_CREATED_BY_DESC="The user that created this Facility." +COM_SUPPORTGROUPS_FACILITY_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_FACILITY_CREATED_DATE_DESC="The date this Facility was created." +COM_SUPPORTGROUPS_FACILITY_CREATED_DATE_LABEL="Created Date" +COM_SUPPORTGROUPS_FACILITY_DETAILS="Details" +COM_SUPPORTGROUPS_FACILITY_DETAILS_LABEL="Details" +COM_SUPPORTGROUPS_FACILITY_EDIT="Editing the Facility" +COM_SUPPORTGROUPS_FACILITY_ERROR_UNIQUE_ALIAS="Another Facility has the same alias." +COM_SUPPORTGROUPS_FACILITY_FACILITY_TYPE="Facility Type" +COM_SUPPORTGROUPS_FACILITY_FACILITY_TYPE_DESCRIPTION="Please select the facility type." +COM_SUPPORTGROUPS_FACILITY_FACILITY_TYPE_LABEL="Type" +COM_SUPPORTGROUPS_FACILITY_ID="Id" +COM_SUPPORTGROUPS_FACILITY_LOCATION="Location" +COM_SUPPORTGROUPS_FACILITY_MARKER="Marker" +COM_SUPPORTGROUPS_FACILITY_MODIFIED_BY_DESC="The last user that modified this Facility." +COM_SUPPORTGROUPS_FACILITY_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_FACILITY_MODIFIED_DATE_DESC="The date this Facility was modified." +COM_SUPPORTGROUPS_FACILITY_MODIFIED_DATE_LABEL="Modified Date" +COM_SUPPORTGROUPS_FACILITY_NAME="Name" +COM_SUPPORTGROUPS_FACILITY_NAME_DESCRIPTION="Enter Name Here" +COM_SUPPORTGROUPS_FACILITY_NAME_HINT="Name Here" +COM_SUPPORTGROUPS_FACILITY_NAME_LABEL="Name" +COM_SUPPORTGROUPS_FACILITY_NAME_MESSAGE="Error! Please add name here." +COM_SUPPORTGROUPS_FACILITY_NEW="A New Facility" +COM_SUPPORTGROUPS_FACILITY_NOTE_SET_MARKER_DESCRIPTION="

" +COM_SUPPORTGROUPS_FACILITY_NOTE_SET_MARKER_LABEL="Add Facility Marker to the Map" +COM_SUPPORTGROUPS_FACILITY_ORDERING_LABEL="Ordering" +COM_SUPPORTGROUPS_FACILITY_PERMISSION="Permissions" +COM_SUPPORTGROUPS_FACILITY_PHONE="Phone" +COM_SUPPORTGROUPS_FACILITY_PHONE_DESCRIPTION="The phone number of the contact person." +COM_SUPPORTGROUPS_FACILITY_PHONE_HINT="Phone Number Here!" +COM_SUPPORTGROUPS_FACILITY_PHONE_LABEL="Phone Number" +COM_SUPPORTGROUPS_FACILITY_PHONE_MESSAGE="Error! Please add phone number here." +COM_SUPPORTGROUPS_FACILITY_PUBLISHING="Publishing" +COM_SUPPORTGROUPS_FACILITY_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Facility to customise the alias." +COM_SUPPORTGROUPS_FACILITY_SETTINGS="Settings" +COM_SUPPORTGROUPS_FACILITY_STATUS="Status" +COM_SUPPORTGROUPS_FACILITY_TYPE="Facility Type" +COM_SUPPORTGROUPS_FACILITY_TYPES="Facility Types" +COM_SUPPORTGROUPS_FACILITY_TYPES_ACCESS="Facility Types Access" +COM_SUPPORTGROUPS_FACILITY_TYPES_ACCESS_DESC="Allows the users in this group to access access facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_BATCH_OPTIONS="Batch process the selected Facility Types" +COM_SUPPORTGROUPS_FACILITY_TYPES_BATCH_TIP="All changes will be applied to all selected Facility Types" +COM_SUPPORTGROUPS_FACILITY_TYPES_BATCH_USE="Facility Types Batch Use" +COM_SUPPORTGROUPS_FACILITY_TYPES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_CREATE="Facility Types Create" +COM_SUPPORTGROUPS_FACILITY_TYPES_CREATE_DESC="Allows the users in this group to create create facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_DELETE="Facility Types Delete" +COM_SUPPORTGROUPS_FACILITY_TYPES_DELETE_DESC="Allows the users in this group to delete delete facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT="Facility Types Edit" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_ALIAS="Facility Types Edit Alias" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the facility type" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_CREATED_BY="Facility Types Edit Created By" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_CREATED_DATE="Facility Types Edit Created Date" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_DESC="Allows the users in this group to edit the facility type" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_NAME="Facility Types Edit Name" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the facility type" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_OWN="Facility Types Edit Own" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_OWN_DESC="Allows the users in this group to edit edit own facility types created by them" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_STATE="Facility Types Edit State" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_STATE_DESC="Allows the users in this group to update the state of the facility type" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_VERSION="Facility Types Edit Version" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_EXPORT="Facility Types Export" +COM_SUPPORTGROUPS_FACILITY_TYPES_EXPORT_DESC="Allows the users in this group to export export facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_IMPORT="Facility Types Import" +COM_SUPPORTGROUPS_FACILITY_TYPES_IMPORT_DESC="Allows the users in this group to import import facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_ARCHIVED="%s Facility Types archived." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_ARCHIVED_1="%s Facility Type archived." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_CHECKED_IN_0="No Facility Type successfully checked in." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_CHECKED_IN_1="%d Facility Type successfully checked in." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_CHECKED_IN_MORE="%d Facility Types successfully checked in." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_DELETED="%s Facility Types deleted." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_DELETED_1="%s Facility Type deleted." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_FEATURED="%s Facility Types featured." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_FEATURED_1="%s Facility Type featured." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_PUBLISHED="%s Facility Types published." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_PUBLISHED_1="%s Facility Type published." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_TRASHED="%s Facility Types trashed." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_TRASHED_1="%s Facility Type trashed." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_UNFEATURED="%s Facility Types unfeatured." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_UNFEATURED_1="%s Facility Type unfeatured." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_UNPUBLISHED="%s Facility Types unpublished." +COM_SUPPORTGROUPS_FACILITY_TYPES_N_ITEMS_UNPUBLISHED_1="%s Facility Type unpublished." +COM_SUPPORTGROUPS_FACILITY_TYPE_ALIAS="Alias" +COM_SUPPORTGROUPS_FACILITY_TYPE_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_FACILITY_TYPE_ALIAS_LABEL="Alias" +COM_SUPPORTGROUPS_FACILITY_TYPE_CREATED_BY_DESC="The user that created this Facility Type." +COM_SUPPORTGROUPS_FACILITY_TYPE_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_FACILITY_TYPE_CREATED_DATE_DESC="The date this Facility Type was created." +COM_SUPPORTGROUPS_FACILITY_TYPE_CREATED_DATE_LABEL="Created Date" +COM_SUPPORTGROUPS_FACILITY_TYPE_DETAILS="Details" +COM_SUPPORTGROUPS_FACILITY_TYPE_EDIT="Editing the Facility Type" +COM_SUPPORTGROUPS_FACILITY_TYPE_ERROR_UNIQUE_ALIAS="Another Facility Type has the same alias." +COM_SUPPORTGROUPS_FACILITY_TYPE_ID="Id" +COM_SUPPORTGROUPS_FACILITY_TYPE_MODIFIED_BY_DESC="The last user that modified this Facility Type." +COM_SUPPORTGROUPS_FACILITY_TYPE_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_FACILITY_TYPE_MODIFIED_DATE_DESC="The date this Facility Type was modified." +COM_SUPPORTGROUPS_FACILITY_TYPE_MODIFIED_DATE_LABEL="Modified Date" +COM_SUPPORTGROUPS_FACILITY_TYPE_NAME="Name" +COM_SUPPORTGROUPS_FACILITY_TYPE_NAME_DESCRIPTION="Enter Name Here" +COM_SUPPORTGROUPS_FACILITY_TYPE_NAME_HINT="Name Here" +COM_SUPPORTGROUPS_FACILITY_TYPE_NAME_LABEL="Name" +COM_SUPPORTGROUPS_FACILITY_TYPE_NAME_MESSAGE="Error! Please add name here." +COM_SUPPORTGROUPS_FACILITY_TYPE_NEW="A New Facility Type" +COM_SUPPORTGROUPS_FACILITY_TYPE_ORDERING_LABEL="Ordering" +COM_SUPPORTGROUPS_FACILITY_TYPE_PERMISSION="Permissions" +COM_SUPPORTGROUPS_FACILITY_TYPE_PUBLISHING="Publishing" +COM_SUPPORTGROUPS_FACILITY_TYPE_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Facility Type to customise the alias." +COM_SUPPORTGROUPS_FACILITY_TYPE_STATUS="Status" +COM_SUPPORTGROUPS_FACILITY_TYPE_VERSION_DESC="A count of the number of times this Facility Type has been revised." +COM_SUPPORTGROUPS_FACILITY_TYPE_VERSION_LABEL="Revision" +COM_SUPPORTGROUPS_FACILITY_VERSION_DESC="A count of the number of times this Facility has been revised." +COM_SUPPORTGROUPS_FACILITY_VERSION_LABEL="Revision" COM_SUPPORTGROUPS_HELP_DOCUMENT="Help Document" COM_SUPPORTGROUPS_HELP_DOCUMENTS="Help Documents" COM_SUPPORTGROUPS_HELP_DOCUMENTS_ACCESS="Help Documents Access" @@ -368,19 +823,20 @@ COM_SUPPORTGROUPS_HELP_DOCUMENTS_SUBMENU="Help Documents Submenu" COM_SUPPORTGROUPS_HELP_DOCUMENTS_SUBMENU_DESC="Allows the users in this group to update the submenu of the help document" COM_SUPPORTGROUPS_HELP_DOCUMENT_ADMIN="Admin" COM_SUPPORTGROUPS_HELP_DOCUMENT_ADMIN_VIEW="Admin View" -COM_SUPPORTGROUPS_HELP_DOCUMENT_ADMIN_VIEW_DESCRIPTION="Select the view being targeted" +COM_SUPPORTGROUPS_HELP_DOCUMENT_ADMIN_VIEW_DESCRIPTION="Select the view being target." COM_SUPPORTGROUPS_HELP_DOCUMENT_ADMIN_VIEW_LABEL="Admin Views" COM_SUPPORTGROUPS_HELP_DOCUMENT_ALIAS="Alias" COM_SUPPORTGROUPS_HELP_DOCUMENT_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_HELP_DOCUMENT_ALIAS_LABEL="Alias" COM_SUPPORTGROUPS_HELP_DOCUMENT_ALL="All" COM_SUPPORTGROUPS_HELP_DOCUMENT_ARTICLE="Article" COM_SUPPORTGROUPS_HELP_DOCUMENT_ARTICLE_LABEL="Article" COM_SUPPORTGROUPS_HELP_DOCUMENT_CONTENT="Content" COM_SUPPORTGROUPS_HELP_DOCUMENT_CONTENT_LABEL="Content" -COM_SUPPORTGROUPS_HELP_DOCUMENT_CREATED_BY_DESC="The user that created the Help Document." -COM_SUPPORTGROUPS_HELP_DOCUMENT_CREATED_BY_LABEL="Created by" -COM_SUPPORTGROUPS_HELP_DOCUMENT_CREATED_DATE_DESC="The date Help Document was created." -COM_SUPPORTGROUPS_HELP_DOCUMENT_CREATED_DATE_LABEL="Created date" +COM_SUPPORTGROUPS_HELP_DOCUMENT_CREATED_BY_DESC="The user that created this Help Document." +COM_SUPPORTGROUPS_HELP_DOCUMENT_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_HELP_DOCUMENT_CREATED_DATE_DESC="The date this Help Document was created." +COM_SUPPORTGROUPS_HELP_DOCUMENT_CREATED_DATE_LABEL="Created Date" COM_SUPPORTGROUPS_HELP_DOCUMENT_DETAILS="Details" COM_SUPPORTGROUPS_HELP_DOCUMENT_EDIT="Editing the Help Document" COM_SUPPORTGROUPS_HELP_DOCUMENT_ERROR_UNIQUE_ALIAS="Another Help Document has the same alias." @@ -392,6 +848,10 @@ COM_SUPPORTGROUPS_HELP_DOCUMENT_JOOMLA_ARTICLE="Joomla Article" COM_SUPPORTGROUPS_HELP_DOCUMENT_LOCATION="Location" COM_SUPPORTGROUPS_HELP_DOCUMENT_LOCATION_DESCRIPTION="Select the help target location." COM_SUPPORTGROUPS_HELP_DOCUMENT_LOCATION_LABEL="Location" +COM_SUPPORTGROUPS_HELP_DOCUMENT_MODIFIED_BY_DESC="The last user that modified this Help Document." +COM_SUPPORTGROUPS_HELP_DOCUMENT_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_HELP_DOCUMENT_MODIFIED_DATE_DESC="The date this Help Document was modified." +COM_SUPPORTGROUPS_HELP_DOCUMENT_MODIFIED_DATE_LABEL="Modified Date" COM_SUPPORTGROUPS_HELP_DOCUMENT_NEW="A New Help Document" COM_SUPPORTGROUPS_HELP_DOCUMENT_NOT_REQUIRED="Not Required" COM_SUPPORTGROUPS_HELP_DOCUMENT_ORDERING_LABEL="Ordering" @@ -401,7 +861,7 @@ COM_SUPPORTGROUPS_HELP_DOCUMENT_SAVE_WARNING="Alias already existed so a number COM_SUPPORTGROUPS_HELP_DOCUMENT_SELECT_AN_OPTION="Select an option" COM_SUPPORTGROUPS_HELP_DOCUMENT_SITE="Site" COM_SUPPORTGROUPS_HELP_DOCUMENT_SITE_VIEW="Site View" -COM_SUPPORTGROUPS_HELP_DOCUMENT_SITE_VIEW_DESCRIPTION="Select the view being targeted" +COM_SUPPORTGROUPS_HELP_DOCUMENT_SITE_VIEW_DESCRIPTION="Select the view being target." COM_SUPPORTGROUPS_HELP_DOCUMENT_SITE_VIEW_LABEL="Site Views" COM_SUPPORTGROUPS_HELP_DOCUMENT_SOME="Some" COM_SUPPORTGROUPS_HELP_DOCUMENT_STATUS="Status" @@ -413,6 +873,7 @@ COM_SUPPORTGROUPS_HELP_DOCUMENT_TITLE="Title" COM_SUPPORTGROUPS_HELP_DOCUMENT_TITLE_DESCRIPTION="Enter Title Here" COM_SUPPORTGROUPS_HELP_DOCUMENT_TITLE_HINT="Title Here" COM_SUPPORTGROUPS_HELP_DOCUMENT_TITLE_LABEL="Title" +COM_SUPPORTGROUPS_HELP_DOCUMENT_TITLE_MESSAGE="Error! Please add title here." COM_SUPPORTGROUPS_HELP_DOCUMENT_TYPE="Type" COM_SUPPORTGROUPS_HELP_DOCUMENT_TYPE_DESCRIPTION="Select the help type." COM_SUPPORTGROUPS_HELP_DOCUMENT_TYPE_LABEL="Type" @@ -420,6 +881,7 @@ COM_SUPPORTGROUPS_HELP_DOCUMENT_URL="Url" COM_SUPPORTGROUPS_HELP_DOCUMENT_URL_DESCRIPTION="Enter url" COM_SUPPORTGROUPS_HELP_DOCUMENT_URL_HINT="http://www.example.com" COM_SUPPORTGROUPS_HELP_DOCUMENT_URL_LABEL="URL" +COM_SUPPORTGROUPS_HELP_DOCUMENT_URL_MESSAGE="Error! Please add url here." COM_SUPPORTGROUPS_HELP_DOCUMENT_VERSION_DESC="A count of the number of times this Help Document has been revised." COM_SUPPORTGROUPS_HELP_DOCUMENT_VERSION_LABEL="Revision" COM_SUPPORTGROUPS_HELP_MANAGER="Help" @@ -451,11 +913,15 @@ COM_SUPPORTGROUPS_IMPORT_NO_IMPORT_TYPE_FOUND="Import type not found." COM_SUPPORTGROUPS_IMPORT_PLEASE_SELECT_COLUMN="-- Please Select Column --" COM_SUPPORTGROUPS_IMPORT_SELECT_FILE="Select File" COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_DIRECTORY="Set the path to file" -COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_CLINICS="Select the file to import data to clinics." +COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_ADDITIONAL_INFORMATION="Select the file to import data to additional_information." +COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_AREAS="Select the file to import data to areas." +COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_AREA_TYPES="Select the file to import data to area_types." COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_COUNTRIES="Select the file to import data to countries." COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_CURRENCIES="Select the file to import data to currencies." +COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_FACILITIES="Select the file to import data to facilities." +COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_FACILITY_TYPES="Select the file to import data to facility_types." COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_HELP_DOCUMENTS="Select the file to import data to help_documents." -COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_LOCATIONS="Select the file to import data to locations." +COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_INFO_TYPES="Select the file to import data to info_types." COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_PAYMENTS="Select the file to import data to payments." COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_REGIONS="Select the file to import data to regions." COM_SUPPORTGROUPS_IMPORT_SELECT_FILE_FOR_SUPPORT_GROUPS="Select the file to import data to support_groups." @@ -466,92 +932,94 @@ COM_SUPPORTGROUPS_IMPORT_TITLE="Data Importer" COM_SUPPORTGROUPS_IMPORT_UNABLE_TO_FIND_IMPORT_PACKAGE="Package to import not found." COM_SUPPORTGROUPS_IMPORT_UPDATE_DATA="Import Data" COM_SUPPORTGROUPS_IMPORT_UPLOAD_BOTTON="Upload File" +COM_SUPPORTGROUPS_INACTIVE="Inactive" +COM_SUPPORTGROUPS_INFO_TYPE="Info Type" +COM_SUPPORTGROUPS_INFO_TYPES="Info Types" +COM_SUPPORTGROUPS_INFO_TYPES_ACCESS="Info Types Access" +COM_SUPPORTGROUPS_INFO_TYPES_ACCESS_DESC="Allows the users in this group to access access info types" +COM_SUPPORTGROUPS_INFO_TYPES_BATCH_OPTIONS="Batch process the selected Info Types" +COM_SUPPORTGROUPS_INFO_TYPES_BATCH_TIP="All changes will be applied to all selected Info Types" +COM_SUPPORTGROUPS_INFO_TYPES_BATCH_USE="Info Types Batch Use" +COM_SUPPORTGROUPS_INFO_TYPES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch info types" +COM_SUPPORTGROUPS_INFO_TYPES_CREATE="Info Types Create" +COM_SUPPORTGROUPS_INFO_TYPES_CREATE_DESC="Allows the users in this group to create create info types" +COM_SUPPORTGROUPS_INFO_TYPES_DELETE="Info Types Delete" +COM_SUPPORTGROUPS_INFO_TYPES_DELETE_DESC="Allows the users in this group to delete delete info types" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT="Info Types Edit" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_ALIAS="Info Types Edit Alias" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the info type" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_CREATED_BY="Info Types Edit Created By" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by info types" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_CREATED_DATE="Info Types Edit Created Date" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created info types" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_DESC="Allows the users in this group to edit the info type" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_NAME="Info Types Edit Name" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the info type" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_OWN="Info Types Edit Own" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_OWN_DESC="Allows the users in this group to edit edit own info types created by them" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_STATE="Info Types Edit State" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_STATE_DESC="Allows the users in this group to update the state of the info type" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_VERSION="Info Types Edit Version" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version info types" +COM_SUPPORTGROUPS_INFO_TYPES_EXPORT="Info Types Export" +COM_SUPPORTGROUPS_INFO_TYPES_EXPORT_DESC="Allows the users in this group to export export info types" +COM_SUPPORTGROUPS_INFO_TYPES_IMPORT="Info Types Import" +COM_SUPPORTGROUPS_INFO_TYPES_IMPORT_DESC="Allows the users in this group to import import info types" +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_ARCHIVED="%s Info Types archived." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_ARCHIVED_1="%s Info Type archived." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_CHECKED_IN_0="No Info Type successfully checked in." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_CHECKED_IN_1="%d Info Type successfully checked in." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_CHECKED_IN_MORE="%d Info Types successfully checked in." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_DELETED="%s Info Types deleted." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_DELETED_1="%s Info Type deleted." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_FEATURED="%s Info Types featured." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_FEATURED_1="%s Info Type featured." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_PUBLISHED="%s Info Types published." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_PUBLISHED_1="%s Info Type published." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_TRASHED="%s Info Types trashed." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_TRASHED_1="%s Info Type trashed." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_UNFEATURED="%s Info Types unfeatured." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_UNFEATURED_1="%s Info Type unfeatured." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_UNPUBLISHED="%s Info Types unpublished." +COM_SUPPORTGROUPS_INFO_TYPES_N_ITEMS_UNPUBLISHED_1="%s Info Type unpublished." +COM_SUPPORTGROUPS_INFO_TYPE_ALIAS="Alias" +COM_SUPPORTGROUPS_INFO_TYPE_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_INFO_TYPE_ALIAS_LABEL="Alias" +COM_SUPPORTGROUPS_INFO_TYPE_CREATED_BY_DESC="The user that created this Info Type." +COM_SUPPORTGROUPS_INFO_TYPE_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_INFO_TYPE_CREATED_DATE_DESC="The date this Info Type was created." +COM_SUPPORTGROUPS_INFO_TYPE_CREATED_DATE_LABEL="Created Date" +COM_SUPPORTGROUPS_INFO_TYPE_DETAILS="Details" +COM_SUPPORTGROUPS_INFO_TYPE_EDIT="Editing the Info Type" +COM_SUPPORTGROUPS_INFO_TYPE_ERROR_UNIQUE_ALIAS="Another Info Type has the same alias." +COM_SUPPORTGROUPS_INFO_TYPE_ID="Id" +COM_SUPPORTGROUPS_INFO_TYPE_MODIFIED_BY_DESC="The last user that modified this Info Type." +COM_SUPPORTGROUPS_INFO_TYPE_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_INFO_TYPE_MODIFIED_DATE_DESC="The date this Info Type was modified." +COM_SUPPORTGROUPS_INFO_TYPE_MODIFIED_DATE_LABEL="Modified Date" +COM_SUPPORTGROUPS_INFO_TYPE_NAME="Name" +COM_SUPPORTGROUPS_INFO_TYPE_NAME_DESCRIPTION="Enter Name Here" +COM_SUPPORTGROUPS_INFO_TYPE_NAME_HINT="Name Here" +COM_SUPPORTGROUPS_INFO_TYPE_NAME_LABEL="Name" +COM_SUPPORTGROUPS_INFO_TYPE_NAME_MESSAGE="Error! Please add name here." +COM_SUPPORTGROUPS_INFO_TYPE_NEW="A New Info Type" +COM_SUPPORTGROUPS_INFO_TYPE_ORDERING_LABEL="Ordering" +COM_SUPPORTGROUPS_INFO_TYPE_PERMISSION="Permissions" +COM_SUPPORTGROUPS_INFO_TYPE_PUBLISHING="Publishing" +COM_SUPPORTGROUPS_INFO_TYPE_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Info Type to customise the alias." +COM_SUPPORTGROUPS_INFO_TYPE_STATUS="Status" +COM_SUPPORTGROUPS_INFO_TYPE_VERSION_DESC="A count of the number of times this Info Type has been revised." +COM_SUPPORTGROUPS_INFO_TYPE_VERSION_LABEL="Revision" COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS="- Keep Original Access -" COM_SUPPORTGROUPS_KEEP_ORIGINAL_CATEGORY="- Keep Original Category -" COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE="- Keep Original State -" COM_SUPPORTGROUPS_LICENSE="License" -COM_SUPPORTGROUPS_LOCATION="Location" -COM_SUPPORTGROUPS_LOCATIONS="Locations" -COM_SUPPORTGROUPS_LOCATIONS_ACCESS="Locations Access" -COM_SUPPORTGROUPS_LOCATIONS_ACCESS_DESC="Allows the users in this group to access access locations" -COM_SUPPORTGROUPS_LOCATIONS_BATCH_OPTIONS="Batch process the selected Locations" -COM_SUPPORTGROUPS_LOCATIONS_BATCH_TIP="All changes will be applied to all selected Locations" -COM_SUPPORTGROUPS_LOCATIONS_BATCH_USE="Locations Batch Use" -COM_SUPPORTGROUPS_LOCATIONS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch locations" -COM_SUPPORTGROUPS_LOCATIONS_CREATE="Locations Create" -COM_SUPPORTGROUPS_LOCATIONS_CREATE_DESC="Allows the users in this group to create create locations" -COM_SUPPORTGROUPS_LOCATIONS_DASHBOARD_LIST="Locations Dashboard List" -COM_SUPPORTGROUPS_LOCATIONS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the location" -COM_SUPPORTGROUPS_LOCATIONS_DELETE="Locations Delete" -COM_SUPPORTGROUPS_LOCATIONS_DELETE_DESC="Allows the users in this group to delete delete locations" -COM_SUPPORTGROUPS_LOCATIONS_EDIT="Locations Edit" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_CREATED_BY="Locations Edit Created By" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by locations" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_CREATED_DATE="Locations Edit Created Date" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created locations" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_DESC="Allows the users in this group to edit the location" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_NAME="Locations Edit Name" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the location" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_OWN="Locations Edit Own" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_OWN_DESC="Allows the users in this group to edit edit own locations created by them" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_REGION="Locations Edit Region" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_REGION_DESC="Allows the users in this group to update the edit region of the location" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_STATE="Locations Edit State" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_STATE_DESC="Allows the users in this group to update the state of the location" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_VERSION="Locations Edit Version" -COM_SUPPORTGROUPS_LOCATIONS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version locations" -COM_SUPPORTGROUPS_LOCATIONS_EXPORT="Locations Export" -COM_SUPPORTGROUPS_LOCATIONS_EXPORT_DESC="Allows the users in this group to export export locations" -COM_SUPPORTGROUPS_LOCATIONS_IMPORT="Locations Import" -COM_SUPPORTGROUPS_LOCATIONS_IMPORT_DESC="Allows the users in this group to import import locations" -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_ARCHIVED="%s Locations archived." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_ARCHIVED_1="%s Location archived." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_CHECKED_IN_0="No Location successfully checked in." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_CHECKED_IN_1="%d Location successfully checked in." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_CHECKED_IN_MORE="%d Locations successfully checked in." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_DELETED="%s Locations deleted." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_DELETED_1="%s Location deleted." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_FEATURED="%s Locations featured." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_FEATURED_1="%s Location featured." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_PUBLISHED="%s Locations published." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_PUBLISHED_1="%s Location published." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_TRASHED="%s Locations trashed." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_TRASHED_1="%s Location trashed." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_UNFEATURED="%s Locations unfeatured." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_UNFEATURED_1="%s Location unfeatured." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_UNPUBLISHED="%s Locations unpublished." -COM_SUPPORTGROUPS_LOCATIONS_N_ITEMS_UNPUBLISHED_1="%s Location unpublished." -COM_SUPPORTGROUPS_LOCATIONS_SUBMENU="Locations Submenu" -COM_SUPPORTGROUPS_LOCATIONS_SUBMENU_DESC="Allows the users in this group to update the submenu of the location" -COM_SUPPORTGROUPS_LOCATION_AREA="Area" -COM_SUPPORTGROUPS_LOCATION_CREATED_BY_DESC="The user that created the Location." -COM_SUPPORTGROUPS_LOCATION_CREATED_BY_LABEL="Created by" -COM_SUPPORTGROUPS_LOCATION_CREATED_DATE_DESC="The date Location was created." -COM_SUPPORTGROUPS_LOCATION_CREATED_DATE_LABEL="Created date" -COM_SUPPORTGROUPS_LOCATION_EDIT="Editing the Location" -COM_SUPPORTGROUPS_LOCATION_ERROR_UNIQUE_ALIAS="Another Location has the same alias." -COM_SUPPORTGROUPS_LOCATION_ID="Id" -COM_SUPPORTGROUPS_LOCATION_NAME="Name" -COM_SUPPORTGROUPS_LOCATION_NAME_DESCRIPTION="Enter Name Here" -COM_SUPPORTGROUPS_LOCATION_NAME_HINT="Name Here" -COM_SUPPORTGROUPS_LOCATION_NAME_LABEL="Name" -COM_SUPPORTGROUPS_LOCATION_NEW="A New Location" -COM_SUPPORTGROUPS_LOCATION_NOTE_SET_AREA_DESCRIPTION="We will add a map here that the location can be drawn on." -COM_SUPPORTGROUPS_LOCATION_NOTE_SET_AREA_LABEL="Set Location" -COM_SUPPORTGROUPS_LOCATION_ORDERING_LABEL="Ordering" -COM_SUPPORTGROUPS_LOCATION_PERMISSION="Permissions" -COM_SUPPORTGROUPS_LOCATION_PUBLISHING="Publishing" -COM_SUPPORTGROUPS_LOCATION_REGION="Region" -COM_SUPPORTGROUPS_LOCATION_REGION_DESCRIPTION="Please select the region this location belongs to." -COM_SUPPORTGROUPS_LOCATION_REGION_LABEL="Region" -COM_SUPPORTGROUPS_LOCATION_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Location to customise the alias." -COM_SUPPORTGROUPS_LOCATION_SETTINGS="Settings" -COM_SUPPORTGROUPS_LOCATION_STATUS="Status" -COM_SUPPORTGROUPS_LOCATION_SUPPORT_GROUPS="Support Groups" -COM_SUPPORTGROUPS_LOCATION_VERSION_DESC="A count of the number of times this Location has been revised." -COM_SUPPORTGROUPS_LOCATION_VERSION_LABEL="Revision" +COM_SUPPORTGROUPS_MAP_ACCESS_SITE="Map (Site) Access" +COM_SUPPORTGROUPS_MAP_ACCESS_SITE_DESC=" Allows the users in this group to access site map." COM_SUPPORTGROUPS_NEW="New" +COM_SUPPORTGROUPS_NOT_FOUND_OR_ACCESS_DENIED="Not found or access denied!" COM_SUPPORTGROUPS_NO_ACCESS_GRANTED="No Access Granted!" +COM_SUPPORTGROUPS_OPTIONS="Options" COM_SUPPORTGROUPS_PAYMENT="Payment" COM_SUPPORTGROUPS_PAYMENTS="Payments" COM_SUPPORTGROUPS_PAYMENTS_ACCESS="Payments Access" @@ -610,17 +1078,22 @@ COM_SUPPORTGROUPS_PAYMENTS_N_ITEMS_UNPUBLISHED_1="%s Payment unpublished." COM_SUPPORTGROUPS_PAYMENTS_SUBMENU="Payments Submenu" COM_SUPPORTGROUPS_PAYMENTS_SUBMENU_DESC="Allows the users in this group to update the submenu of the payment" COM_SUPPORTGROUPS_PAYMENT_AMOUNT="Amount" -COM_SUPPORTGROUPS_PAYMENT_AMOUNT_DESCRIPTION="The amount paid in this support group." +COM_SUPPORTGROUPS_PAYMENT_AMOUNT_DESCRIPTION="The amount paid." COM_SUPPORTGROUPS_PAYMENT_AMOUNT_HINT="Only Numbers & dot" COM_SUPPORTGROUPS_PAYMENT_AMOUNT_LABEL="Amount" -COM_SUPPORTGROUPS_PAYMENT_CREATED_BY_DESC="The user that created the Payment." -COM_SUPPORTGROUPS_PAYMENT_CREATED_BY_LABEL="Created by" -COM_SUPPORTGROUPS_PAYMENT_CREATED_DATE_DESC="The date Payment was created." -COM_SUPPORTGROUPS_PAYMENT_CREATED_DATE_LABEL="Created date" +COM_SUPPORTGROUPS_PAYMENT_AMOUNT_MESSAGE="Error! Please add amount paid here." +COM_SUPPORTGROUPS_PAYMENT_CREATED_BY_DESC="The user that created this Payment." +COM_SUPPORTGROUPS_PAYMENT_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_PAYMENT_CREATED_DATE_DESC="The date this Payment was created." +COM_SUPPORTGROUPS_PAYMENT_CREATED_DATE_LABEL="Created Date" COM_SUPPORTGROUPS_PAYMENT_DETAILS="Details" COM_SUPPORTGROUPS_PAYMENT_EDIT="Editing the Payment" COM_SUPPORTGROUPS_PAYMENT_ERROR_UNIQUE_ALIAS="Another Payment has the same alias." COM_SUPPORTGROUPS_PAYMENT_ID="Id" +COM_SUPPORTGROUPS_PAYMENT_MODIFIED_BY_DESC="The last user that modified this Payment." +COM_SUPPORTGROUPS_PAYMENT_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_PAYMENT_MODIFIED_DATE_DESC="The date this Payment was modified." +COM_SUPPORTGROUPS_PAYMENT_MODIFIED_DATE_LABEL="Modified Date" COM_SUPPORTGROUPS_PAYMENT_NEW="A New Payment" COM_SUPPORTGROUPS_PAYMENT_ORDERING_LABEL="Ordering" COM_SUPPORTGROUPS_PAYMENT_PERMISSION="Permissions" @@ -656,6 +1129,9 @@ COM_SUPPORTGROUPS_PAYMENT_VERSION_DESC="A count of the number of times this Paym COM_SUPPORTGROUPS_PAYMENT_VERSION_LABEL="Revision" COM_SUPPORTGROUPS_PAYMENT_YEAR="Year" COM_SUPPORTGROUPS_PAYMENT_YEAR_LABEL="Year" +COM_SUPPORTGROUPS_PLEASE_ADD_YOUR_API_KEY_TO_THE_COMPONENT_GLOBAL="Please add your API key to the Component Global" +COM_SUPPORTGROUPS_PLEASE_CHECK_AGAIN_LATTER="Please check again latter." +COM_SUPPORTGROUPS_PUBLISHED="Published" COM_SUPPORTGROUPS_REGION="Region" COM_SUPPORTGROUPS_REGIONS="Regions" COM_SUPPORTGROUPS_REGIONS_ACCESS="Regions Access" @@ -666,11 +1142,15 @@ COM_SUPPORTGROUPS_REGIONS_BATCH_USE="Regions Batch Use" COM_SUPPORTGROUPS_REGIONS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch regions" COM_SUPPORTGROUPS_REGIONS_CREATE="Regions Create" COM_SUPPORTGROUPS_REGIONS_CREATE_DESC="Allows the users in this group to create create regions" +COM_SUPPORTGROUPS_REGIONS_DASHBOARD_ADD="Regions Dashboard Add" +COM_SUPPORTGROUPS_REGIONS_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the region" COM_SUPPORTGROUPS_REGIONS_DASHBOARD_LIST="Regions Dashboard List" COM_SUPPORTGROUPS_REGIONS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the region" COM_SUPPORTGROUPS_REGIONS_DELETE="Regions Delete" COM_SUPPORTGROUPS_REGIONS_DELETE_DESC="Allows the users in this group to delete delete regions" COM_SUPPORTGROUPS_REGIONS_EDIT="Regions Edit" +COM_SUPPORTGROUPS_REGIONS_EDIT_ALIAS="Regions Edit Alias" +COM_SUPPORTGROUPS_REGIONS_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the region" COM_SUPPORTGROUPS_REGIONS_EDIT_COUNTRY="Regions Edit Country" COM_SUPPORTGROUPS_REGIONS_EDIT_COUNTRY_DESC="Allows the users in this group to update the edit country of the region" COM_SUPPORTGROUPS_REGIONS_EDIT_CREATED_BY="Regions Edit Created By" @@ -709,38 +1189,47 @@ COM_SUPPORTGROUPS_REGIONS_N_ITEMS_UNPUBLISHED="%s Regions unpublished." COM_SUPPORTGROUPS_REGIONS_N_ITEMS_UNPUBLISHED_1="%s Region unpublished." COM_SUPPORTGROUPS_REGIONS_SUBMENU="Regions Submenu" COM_SUPPORTGROUPS_REGIONS_SUBMENU_DESC="Allows the users in this group to update the submenu of the region" +COM_SUPPORTGROUPS_REGION_ALIAS="Alias" +COM_SUPPORTGROUPS_REGION_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_REGION_ALIAS_LABEL="Alias" COM_SUPPORTGROUPS_REGION_COUNTRY="Country" COM_SUPPORTGROUPS_REGION_COUNTRY_DESCRIPTION="Select the country." COM_SUPPORTGROUPS_REGION_COUNTRY_LABEL="Country" -COM_SUPPORTGROUPS_REGION_CREATED_BY_DESC="The user that created the Region." -COM_SUPPORTGROUPS_REGION_CREATED_BY_LABEL="Created by" -COM_SUPPORTGROUPS_REGION_CREATED_DATE_DESC="The date Region was created." -COM_SUPPORTGROUPS_REGION_CREATED_DATE_LABEL="Created date" +COM_SUPPORTGROUPS_REGION_CREATED_BY_DESC="The user that created this Region." +COM_SUPPORTGROUPS_REGION_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_REGION_CREATED_DATE_DESC="The date this Region was created." +COM_SUPPORTGROUPS_REGION_CREATED_DATE_LABEL="Created Date" +COM_SUPPORTGROUPS_REGION_DETAILS="Details" COM_SUPPORTGROUPS_REGION_EDIT="Editing the Region" COM_SUPPORTGROUPS_REGION_ERROR_UNIQUE_ALIAS="Another Region has the same alias." COM_SUPPORTGROUPS_REGION_ID="Id" -COM_SUPPORTGROUPS_REGION_LOCATIONS="Locations" +COM_SUPPORTGROUPS_REGION_MODIFIED_BY_DESC="The last user that modified this Region." +COM_SUPPORTGROUPS_REGION_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_REGION_MODIFIED_DATE_DESC="The date this Region was modified." +COM_SUPPORTGROUPS_REGION_MODIFIED_DATE_LABEL="Modified Date" COM_SUPPORTGROUPS_REGION_NAME="Name" COM_SUPPORTGROUPS_REGION_NAME_DESCRIPTION="Enter Name Here" COM_SUPPORTGROUPS_REGION_NAME_HINT="Name Here" COM_SUPPORTGROUPS_REGION_NAME_LABEL="Name" +COM_SUPPORTGROUPS_REGION_NAME_MESSAGE="Error! Please add name here." COM_SUPPORTGROUPS_REGION_NEW="A New Region" COM_SUPPORTGROUPS_REGION_ORDERING_LABEL="Ordering" COM_SUPPORTGROUPS_REGION_PERMISSION="Permissions" COM_SUPPORTGROUPS_REGION_PUBLISHING="Publishing" COM_SUPPORTGROUPS_REGION_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Region to customise the alias." -COM_SUPPORTGROUPS_REGION_SETTINGS="Settings" COM_SUPPORTGROUPS_REGION_STATUS="Status" COM_SUPPORTGROUPS_REGION_VERSION_DESC="A count of the number of times this Region has been revised." COM_SUPPORTGROUPS_REGION_VERSION_LABEL="Revision" COM_SUPPORTGROUPS_SAVE_SUCCESS="Great! Item successfully saved." COM_SUPPORTGROUPS_SAVE_WARNING="The value already existed so please select another." -COM_SUPPORTGROUPS_SUBMENU_CLINICS="Clinics" +COM_SUPPORTGROUPS_SMART_EXPORT="Smart Export" +COM_SUPPORTGROUPS_SUBMENU_ADDITIONAL_INFORMATION="Additional Information" +COM_SUPPORTGROUPS_SUBMENU_AREAS="Areas" COM_SUPPORTGROUPS_SUBMENU_COUNTRIES="Countries" COM_SUPPORTGROUPS_SUBMENU_CURRENCIES="Currencies" COM_SUPPORTGROUPS_SUBMENU_DASHBOARD="Dashboard" +COM_SUPPORTGROUPS_SUBMENU_FACILITIES="Facilities" COM_SUPPORTGROUPS_SUBMENU_HELP_DOCUMENTS="Help Documents" -COM_SUPPORTGROUPS_SUBMENU_LOCATIONS="Locations" COM_SUPPORTGROUPS_SUBMENU_PAYMENTS="Payments" COM_SUPPORTGROUPS_SUBMENU_REGIONS="Regions" COM_SUPPORTGROUPS_SUBMENU_SUPPORT_GROUPS="Support Groups" @@ -748,6 +1237,8 @@ COM_SUPPORTGROUPS_SUPPORT_GROUP="Support Group" COM_SUPPORTGROUPS_SUPPORT_GROUPS="Support Groups" COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESS="Support Groups Access" COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESS_DESC="Allows the users in this group to access access support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESS_SITE="Support Groups (Site) Access" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESS_SITE_DESC=" Allows the users in this group to access site support groups." COM_SUPPORTGROUPS_SUPPORT_GROUPS_BATCH_OPTIONS="Batch process the selected Support Groups" COM_SUPPORTGROUPS_SUPPORT_GROUPS_BATCH_TIP="All changes will be applied to all selected Support Groups" COM_SUPPORTGROUPS_SUPPORT_GROUPS_BATCH_USE="Support Groups Batch Use" @@ -761,19 +1252,25 @@ COM_SUPPORTGROUPS_SUPPORT_GROUPS_DASHBOARD_LIST_DESC="Allows the users in this g COM_SUPPORTGROUPS_SUPPORT_GROUPS_DELETE="Support Groups Delete" COM_SUPPORTGROUPS_SUPPORT_GROUPS_DELETE_DESC="Allows the users in this group to delete delete support groups" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT="Support Groups Edit" -COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CLINIC="Support Groups Edit Clinic" -COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CLINIC_DESC="Allows the users in this group to update the edit clinic of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_ALIAS="Support Groups Edit Alias" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_AREA="Support Groups Edit Area" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_AREA_DESC="Allows the users in this group to update the edit area of the support group" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CREATED_BY="Support Groups Edit Created By" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by support groups" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CREATED_DATE="Support Groups Edit Created Date" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created support groups" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_DESC="Allows the users in this group to edit the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_DETAILS="Support Groups Edit Details" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_DETAILS_DESC="Allows the users in this group to update the edit details of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FACILITY="Support Groups Edit Facility" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FACILITY_DESC="Allows the users in this group to update the edit facility of the support group" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FEMALE="Support Groups Edit Female" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FEMALE_ART="Support Groups Edit Female Art" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FEMALE_ART_DESC="Allows the users in this group to update the edit female art of the support group" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FEMALE_DESC="Allows the users in this group to update the edit female of the support group" -COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_LOCATION="Support Groups Edit Location" -COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_LOCATION_DESC="Allows the users in this group to update the edit location of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_INFO="Support Groups Edit Info" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_INFO_DESC="Allows the users in this group to update the edit info of the support group" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE="Support Groups Edit Male" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE_ART="Support Groups Edit Male Art" COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE_ART_DESC="Allows the users in this group to update the edit male art of the support group" @@ -813,50 +1310,71 @@ COM_SUPPORTGROUPS_SUPPORT_GROUPS_N_ITEMS_UNPUBLISHED="%s Support Groups unpublis COM_SUPPORTGROUPS_SUPPORT_GROUPS_N_ITEMS_UNPUBLISHED_1="%s Support Group unpublished." COM_SUPPORTGROUPS_SUPPORT_GROUPS_SUBMENU="Support Groups Submenu" COM_SUPPORTGROUPS_SUPPORT_GROUPS_SUBMENU_DESC="Allows the users in this group to update the submenu of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUP_ALIAS="Alias" +COM_SUPPORTGROUPS_SUPPORT_GROUP_ALIAS_HINT="Auto-generated from name" +COM_SUPPORTGROUPS_SUPPORT_GROUP_ALIAS_LABEL="Alias" COM_SUPPORTGROUPS_SUPPORT_GROUP_AREA="Area" -COM_SUPPORTGROUPS_SUPPORT_GROUP_CLINIC="Clinic" -COM_SUPPORTGROUPS_SUPPORT_GROUP_CLINIC_DESCRIPTION="Please select the nearest clinic." -COM_SUPPORTGROUPS_SUPPORT_GROUP_CLINIC_LABEL="Clinic" -COM_SUPPORTGROUPS_SUPPORT_GROUP_CREATED_BY_DESC="The user that created the Support Group." -COM_SUPPORTGROUPS_SUPPORT_GROUP_CREATED_BY_LABEL="Created by" -COM_SUPPORTGROUPS_SUPPORT_GROUP_CREATED_DATE_DESC="The date Support Group was created." -COM_SUPPORTGROUPS_SUPPORT_GROUP_CREATED_DATE_LABEL="Created date" +COM_SUPPORTGROUPS_SUPPORT_GROUP_AREA_DESCRIPTION="Please select the area this support_group belongs to." +COM_SUPPORTGROUPS_SUPPORT_GROUP_AREA_LABEL="Area" +COM_SUPPORTGROUPS_SUPPORT_GROUP_CREATED_BY_DESC="The user that created this Support Group." +COM_SUPPORTGROUPS_SUPPORT_GROUP_CREATED_BY_LABEL="Created By" +COM_SUPPORTGROUPS_SUPPORT_GROUP_CREATED_DATE_DESC="The date this Support Group was created." +COM_SUPPORTGROUPS_SUPPORT_GROUP_CREATED_DATE_LABEL="Created Date" COM_SUPPORTGROUPS_SUPPORT_GROUP_DETAILS="Details" +COM_SUPPORTGROUPS_SUPPORT_GROUP_DETAILS_LABEL="Details" COM_SUPPORTGROUPS_SUPPORT_GROUP_EDIT="Editing the Support Group" COM_SUPPORTGROUPS_SUPPORT_GROUP_ERROR_UNIQUE_ALIAS="Another Support Group has the same alias." +COM_SUPPORTGROUPS_SUPPORT_GROUP_FACILITY="Facility" +COM_SUPPORTGROUPS_SUPPORT_GROUP_FACILITY_DESCRIPTION="Please select the nearest facilities." +COM_SUPPORTGROUPS_SUPPORT_GROUP_FACILITY_LABEL="Facility" COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE="Female" COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_ART="Female Art" COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_ART_DESCRIPTION="The number of female members on ART in this support group." COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_ART_HINT="Only Numbers" COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_ART_LABEL="Females on ART" +COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_ART_MESSAGE="Error! Please add number of females on ART here." COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_CHILDREN="Female Children" COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_CHILDREN_DESCRIPTION="The number of female members between the age of 5 and 14 years in this support group." COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_CHILDREN_HINT="Only Numbers" COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_CHILDREN_LABEL="Females (5-14)" +COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_CHILDREN_MESSAGE="Error! Please add number of females here." COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_DESCRIPTION="The number of female members in this support group." COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_HINT="Only Numbers" COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_LABEL="Females" +COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_MESSAGE="Error! Please add number of females text here." COM_SUPPORTGROUPS_SUPPORT_GROUP_ID="Id" +COM_SUPPORTGROUPS_SUPPORT_GROUP_INFO="Info" +COM_SUPPORTGROUPS_SUPPORT_GROUP_INFO_DESCRIPTION="Select the additional info." +COM_SUPPORTGROUPS_SUPPORT_GROUP_INFO_LABEL="Additional info" COM_SUPPORTGROUPS_SUPPORT_GROUP_LOCATION="Location" -COM_SUPPORTGROUPS_SUPPORT_GROUP_LOCATION_DESCRIPTION="Please select the location this support_group belongs to." -COM_SUPPORTGROUPS_SUPPORT_GROUP_LOCATION_LABEL="Location" COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE="Male" COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_ART="Male Art" COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_ART_DESCRIPTION="The number of male members on ART in this support group." COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_ART_HINT="Only Numbers" COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_ART_LABEL="Males on ART" +COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_ART_MESSAGE="Error! Please add number of males on ART here." COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_CHILDREN="Male Children" COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_CHILDREN_DESCRIPTION="The number of male members between the age of 5 and 14 years in this support group." COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_CHILDREN_HINT="Only Numbers" COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_CHILDREN_LABEL="Males (5-14)" +COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_CHILDREN_MESSAGE="Error! Please add number of males here." COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_DESCRIPTION="The number of male members in this support group." COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_HINT="Only Numbers" COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_LABEL="Males" +COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_MESSAGE="Error! Please add number of males text here." +COM_SUPPORTGROUPS_SUPPORT_GROUP_MARKER="Marker" +COM_SUPPORTGROUPS_SUPPORT_GROUP_MODIFIED_BY_DESC="The last user that modified this Support Group." +COM_SUPPORTGROUPS_SUPPORT_GROUP_MODIFIED_BY_LABEL="Modified By" +COM_SUPPORTGROUPS_SUPPORT_GROUP_MODIFIED_DATE_DESC="The date this Support Group was modified." +COM_SUPPORTGROUPS_SUPPORT_GROUP_MODIFIED_DATE_LABEL="Modified Date" COM_SUPPORTGROUPS_SUPPORT_GROUP_NAME="Name" COM_SUPPORTGROUPS_SUPPORT_GROUP_NAME_DESCRIPTION="Enter Name Here" COM_SUPPORTGROUPS_SUPPORT_GROUP_NAME_HINT="Name Here" COM_SUPPORTGROUPS_SUPPORT_GROUP_NAME_LABEL="Name" +COM_SUPPORTGROUPS_SUPPORT_GROUP_NAME_MESSAGE="Error! Please add name here." COM_SUPPORTGROUPS_SUPPORT_GROUP_NEW="A New Support Group" +COM_SUPPORTGROUPS_SUPPORT_GROUP_NOTE_SET_MARKER_DESCRIPTION="

" +COM_SUPPORTGROUPS_SUPPORT_GROUP_NOTE_SET_MARKER_LABEL="Add Group Meet-up Marker to the Map" COM_SUPPORTGROUPS_SUPPORT_GROUP_ORDERING_LABEL="Ordering" COM_SUPPORTGROUPS_SUPPORT_GROUP_PAYMENTS="Payments" COM_SUPPORTGROUPS_SUPPORT_GROUP_PERMISSION="Permissions" @@ -864,12 +1382,19 @@ COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE="Phone" COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE_DESCRIPTION="The phone number of the contact person." COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE_HINT="Phone Number Here!" COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE_LABEL="Phone Number" +COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE_MESSAGE="Error! Please add phone number here." COM_SUPPORTGROUPS_SUPPORT_GROUP_PUBLISHING="Publishing" COM_SUPPORTGROUPS_SUPPORT_GROUP_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Support Group to customise the alias." +COM_SUPPORTGROUPS_SUPPORT_GROUP_SMART_EXPORT_BUTTON_ACCESS="Support Group Smart Export Button Access" +COM_SUPPORTGROUPS_SUPPORT_GROUP_SMART_EXPORT_BUTTON_ACCESS_DESC=" Allows the users in this group to access the smart export button." COM_SUPPORTGROUPS_SUPPORT_GROUP_STATUS="Status" COM_SUPPORTGROUPS_SUPPORT_GROUP_VERSION_DESC="A count of the number of times this Support Group has been revised." COM_SUPPORTGROUPS_SUPPORT_GROUP_VERSION_LABEL="Revision" +COM_SUPPORTGROUPS_THE_NOTICE_BOARD_IS_LOADING="The notice board is loading" +COM_SUPPORTGROUPS_THE_README_IS_LOADING="The readme is loading" +COM_SUPPORTGROUPS_TRASHED="Trashed" +COM_SUPPORTGROUPS_UNDER_GOOGLE_API_TAP="under (Google API) tap." COM_SUPPORTGROUPS_USE_BATCH="Use Batch" COM_SUPPORTGROUPS_USE_BATCH_DESC=" Allows users in this group to use batch copy/update method." COM_SUPPORTGROUPS_VERSION="Version" -COM_SUPPORTGROUPS_WEBSITE="Website" +COM_SUPPORTGROUPS_WEBSITE="Website" \ No newline at end of file diff --git a/admin/language/en-GB/en-GB.com_supportgroups.sys.ini b/admin/language/en-GB/en-GB.com_supportgroups.sys.ini index e04ea4b..bb49569 100644 --- a/admin/language/en-GB/en-GB.com_supportgroups.sys.ini +++ b/admin/language/en-GB/en-GB.com_supportgroups.sys.ini @@ -1,8 +1,436 @@ COM_SUPPORTGROUPS="Support Groups" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_ACCESS="Additional Information Access" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_ACCESS_DESC="Allows the users in this group to access access additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_BATCH_USE="Additional Information Batch Use" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_CREATE="Additional Information Create" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_CREATE_DESC="Allows the users in this group to create create additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DASHBOARD_ADD="Additional Information Dashboard Add" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DASHBOARD_LIST="Additional Information Dashboard List" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DELETE="Additional Information Delete" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_DELETE_DESC="Allows the users in this group to delete delete additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT="Additional Information Edit" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_ALIAS="Additional Information Edit Alias" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_CREATED_BY="Additional Information Edit Created By" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_CREATED_DATE="Additional Information Edit Created Date" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_DESC="Allows the users in this group to edit the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_DETAILS="Additional Information Edit Details" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_DETAILS_DESC="Allows the users in this group to update the edit details of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_INFO_TYPE="Additional Information Edit Info Type" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_INFO_TYPE_DESC="Allows the users in this group to update the edit info type of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_NAME="Additional Information Edit Name" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_OWN="Additional Information Edit Own" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_OWN_DESC="Allows the users in this group to edit edit own additional information created by them" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_STATE="Additional Information Edit State" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_STATE_DESC="Allows the users in this group to update the state of the additional info" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_VERSION="Additional Information Edit Version" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EDIT_VERSION_DESC="Allows users in this group to edit versions of version additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EXPORT="Additional Information Export" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_EXPORT_DESC="Allows the users in this group to export export additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_IMPORT="Additional Information Import" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_IMPORT_DESC="Allows the users in this group to import import additional information" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_SUBMENU="Additional Information Submenu" +COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_SUBMENU_DESC="Allows the users in this group to update the submenu of the additional info" +COM_SUPPORTGROUPS_AREAS_ACCESS="Areas Access" +COM_SUPPORTGROUPS_AREAS_ACCESS_DESC="Allows the users in this group to access access areas" +COM_SUPPORTGROUPS_AREAS_BATCH_USE="Areas Batch Use" +COM_SUPPORTGROUPS_AREAS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch areas" +COM_SUPPORTGROUPS_AREAS_CREATE="Areas Create" +COM_SUPPORTGROUPS_AREAS_CREATE_DESC="Allows the users in this group to create create areas" +COM_SUPPORTGROUPS_AREAS_DASHBOARD_ADD="Areas Dashboard Add" +COM_SUPPORTGROUPS_AREAS_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the area" +COM_SUPPORTGROUPS_AREAS_DASHBOARD_LIST="Areas Dashboard List" +COM_SUPPORTGROUPS_AREAS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the area" +COM_SUPPORTGROUPS_AREAS_DELETE="Areas Delete" +COM_SUPPORTGROUPS_AREAS_DELETE_DESC="Allows the users in this group to delete delete areas" +COM_SUPPORTGROUPS_AREAS_EDIT="Areas Edit" +COM_SUPPORTGROUPS_AREAS_EDIT_ALIAS="Areas Edit Alias" +COM_SUPPORTGROUPS_AREAS_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_AREA_TYPE="Areas Edit Area Type" +COM_SUPPORTGROUPS_AREAS_EDIT_AREA_TYPE_DESC="Allows the users in this group to update the edit area type of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_COLOR="Areas Edit Color" +COM_SUPPORTGROUPS_AREAS_EDIT_COLOR_DESC="Allows the users in this group to update the edit color of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_CREATED_BY="Areas Edit Created By" +COM_SUPPORTGROUPS_AREAS_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by areas" +COM_SUPPORTGROUPS_AREAS_EDIT_CREATED_DATE="Areas Edit Created Date" +COM_SUPPORTGROUPS_AREAS_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created areas" +COM_SUPPORTGROUPS_AREAS_EDIT_DESC="Allows the users in this group to edit the area" +COM_SUPPORTGROUPS_AREAS_EDIT_DETAILS="Areas Edit Details" +COM_SUPPORTGROUPS_AREAS_EDIT_DETAILS_DESC="Allows the users in this group to update the edit details of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_NAME="Areas Edit Name" +COM_SUPPORTGROUPS_AREAS_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_OWN="Areas Edit Own" +COM_SUPPORTGROUPS_AREAS_EDIT_OWN_DESC="Allows the users in this group to edit edit own areas created by them" +COM_SUPPORTGROUPS_AREAS_EDIT_REGION="Areas Edit Region" +COM_SUPPORTGROUPS_AREAS_EDIT_REGION_DESC="Allows the users in this group to update the edit region of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_STATE="Areas Edit State" +COM_SUPPORTGROUPS_AREAS_EDIT_STATE_DESC="Allows the users in this group to update the state of the area" +COM_SUPPORTGROUPS_AREAS_EDIT_VERSION="Areas Edit Version" +COM_SUPPORTGROUPS_AREAS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version areas" +COM_SUPPORTGROUPS_AREAS_EXPORT="Areas Export" +COM_SUPPORTGROUPS_AREAS_EXPORT_DESC="Allows the users in this group to export export areas" +COM_SUPPORTGROUPS_AREAS_IMPORT="Areas Import" +COM_SUPPORTGROUPS_AREAS_IMPORT_DESC="Allows the users in this group to import import areas" +COM_SUPPORTGROUPS_AREAS_SUBMENU="Areas Submenu" +COM_SUPPORTGROUPS_AREAS_SUBMENU_DESC="Allows the users in this group to update the submenu of the area" +COM_SUPPORTGROUPS_AREA_TYPES_ACCESS="Area Types Access" +COM_SUPPORTGROUPS_AREA_TYPES_ACCESS_DESC="Allows the users in this group to access access area types" +COM_SUPPORTGROUPS_AREA_TYPES_BATCH_USE="Area Types Batch Use" +COM_SUPPORTGROUPS_AREA_TYPES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch area types" +COM_SUPPORTGROUPS_AREA_TYPES_CREATE="Area Types Create" +COM_SUPPORTGROUPS_AREA_TYPES_CREATE_DESC="Allows the users in this group to create create area types" +COM_SUPPORTGROUPS_AREA_TYPES_DELETE="Area Types Delete" +COM_SUPPORTGROUPS_AREA_TYPES_DELETE_DESC="Allows the users in this group to delete delete area types" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT="Area Types Edit" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_ALIAS="Area Types Edit Alias" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the area type" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_CREATED_BY="Area Types Edit Created By" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by area types" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_CREATED_DATE="Area Types Edit Created Date" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created area types" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_DESC="Allows the users in this group to edit the area type" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_NAME="Area Types Edit Name" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the area type" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_OWN="Area Types Edit Own" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_OWN_DESC="Allows the users in this group to edit edit own area types created by them" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_STATE="Area Types Edit State" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_STATE_DESC="Allows the users in this group to update the state of the area type" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_VERSION="Area Types Edit Version" +COM_SUPPORTGROUPS_AREA_TYPES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version area types" +COM_SUPPORTGROUPS_AREA_TYPES_EXPORT="Area Types Export" +COM_SUPPORTGROUPS_AREA_TYPES_EXPORT_DESC="Allows the users in this group to export export area types" +COM_SUPPORTGROUPS_AREA_TYPES_IMPORT="Area Types Import" +COM_SUPPORTGROUPS_AREA_TYPES_IMPORT_DESC="Allows the users in this group to import import area types" COM_SUPPORTGROUPS_CONFIGURATION="Support Groups Configuration" +COM_SUPPORTGROUPS_COUNTRIES_ACCESS="Countries Access" +COM_SUPPORTGROUPS_COUNTRIES_ACCESS_DESC="Allows the users in this group to access access countries" +COM_SUPPORTGROUPS_COUNTRIES_BATCH_USE="Countries Batch Use" +COM_SUPPORTGROUPS_COUNTRIES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch countries" +COM_SUPPORTGROUPS_COUNTRIES_CREATE="Countries Create" +COM_SUPPORTGROUPS_COUNTRIES_CREATE_DESC="Allows the users in this group to create create countries" +COM_SUPPORTGROUPS_COUNTRIES_DASHBOARD_LIST="Countries Dashboard List" +COM_SUPPORTGROUPS_COUNTRIES_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the country" +COM_SUPPORTGROUPS_COUNTRIES_DELETE="Countries Delete" +COM_SUPPORTGROUPS_COUNTRIES_DELETE_DESC="Allows the users in this group to delete delete countries" +COM_SUPPORTGROUPS_COUNTRIES_EDIT="Countries Edit" +COM_SUPPORTGROUPS_COUNTRIES_EDIT_DESC="Allows the users in this group to edit the country" +COM_SUPPORTGROUPS_COUNTRIES_EDIT_OWN="Countries Edit Own" +COM_SUPPORTGROUPS_COUNTRIES_EDIT_OWN_DESC="Allows the users in this group to edit edit own countries created by them" +COM_SUPPORTGROUPS_COUNTRIES_EDIT_STATE="Countries Edit State" +COM_SUPPORTGROUPS_COUNTRIES_EDIT_STATE_DESC="Allows the users in this group to update the state of the country" +COM_SUPPORTGROUPS_COUNTRIES_EDIT_VERSION="Countries Edit Version" +COM_SUPPORTGROUPS_COUNTRIES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version countries" +COM_SUPPORTGROUPS_COUNTRIES_EXPORT="Countries Export" +COM_SUPPORTGROUPS_COUNTRIES_EXPORT_DESC="Allows the users in this group to export export countries" +COM_SUPPORTGROUPS_COUNTRIES_IMPORT="Countries Import" +COM_SUPPORTGROUPS_COUNTRIES_IMPORT_DESC="Allows the users in this group to import import countries" +COM_SUPPORTGROUPS_COUNTRIES_SUBMENU="Countries Submenu" +COM_SUPPORTGROUPS_COUNTRIES_SUBMENU_DESC="Allows the users in this group to update the submenu of the country" +COM_SUPPORTGROUPS_CURRENCIES_ACCESS="Currencies Access" +COM_SUPPORTGROUPS_CURRENCIES_ACCESS_DESC="Allows the users in this group to access access currencies" +COM_SUPPORTGROUPS_CURRENCIES_BATCH_USE="Currencies Batch Use" +COM_SUPPORTGROUPS_CURRENCIES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch currencies" +COM_SUPPORTGROUPS_CURRENCIES_CREATE="Currencies Create" +COM_SUPPORTGROUPS_CURRENCIES_CREATE_DESC="Allows the users in this group to create create currencies" +COM_SUPPORTGROUPS_CURRENCIES_DASHBOARD_LIST="Currencies Dashboard List" +COM_SUPPORTGROUPS_CURRENCIES_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the currency" +COM_SUPPORTGROUPS_CURRENCIES_DELETE="Currencies Delete" +COM_SUPPORTGROUPS_CURRENCIES_DELETE_DESC="Allows the users in this group to delete delete currencies" +COM_SUPPORTGROUPS_CURRENCIES_EDIT="Currencies Edit" +COM_SUPPORTGROUPS_CURRENCIES_EDIT_DESC="Allows the users in this group to edit the currency" +COM_SUPPORTGROUPS_CURRENCIES_EDIT_OWN="Currencies Edit Own" +COM_SUPPORTGROUPS_CURRENCIES_EDIT_OWN_DESC="Allows the users in this group to edit edit own currencies created by them" +COM_SUPPORTGROUPS_CURRENCIES_EDIT_STATE="Currencies Edit State" +COM_SUPPORTGROUPS_CURRENCIES_EDIT_STATE_DESC="Allows the users in this group to update the state of the currency" +COM_SUPPORTGROUPS_CURRENCIES_EDIT_VERSION="Currencies Edit Version" +COM_SUPPORTGROUPS_CURRENCIES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version currencies" +COM_SUPPORTGROUPS_CURRENCIES_EXPORT="Currencies Export" +COM_SUPPORTGROUPS_CURRENCIES_EXPORT_DESC="Allows the users in this group to export export currencies" +COM_SUPPORTGROUPS_CURRENCIES_IMPORT="Currencies Import" +COM_SUPPORTGROUPS_CURRENCIES_IMPORT_DESC="Allows the users in this group to import import currencies" +COM_SUPPORTGROUPS_CURRENCIES_SUBMENU="Currencies Submenu" +COM_SUPPORTGROUPS_CURRENCIES_SUBMENU_DESC="Allows the users in this group to update the submenu of the currency" +COM_SUPPORTGROUPS_EDIT_CREATED_BY="Edit Created By" +COM_SUPPORTGROUPS_EDIT_CREATED_BY_DESC=" Allows users in this group to edit created by." +COM_SUPPORTGROUPS_EDIT_CREATED_DATE="Edit Created Date" +COM_SUPPORTGROUPS_EDIT_CREATED_DATE_DESC=" Allows users in this group to edit created date." +COM_SUPPORTGROUPS_EDIT_VERSIONS="Edit Version" +COM_SUPPORTGROUPS_EDIT_VERSIONS_DESC=" Allows users in this group to edit versions." +COM_SUPPORTGROUPS_EXPORT_DATA="Export Data" +COM_SUPPORTGROUPS_EXPORT_DATA_DESC=" Allows users in this group to export data." +COM_SUPPORTGROUPS_FACILITIES_ACCESS="Facilities Access" +COM_SUPPORTGROUPS_FACILITIES_ACCESS_DESC="Allows the users in this group to access access facilities" +COM_SUPPORTGROUPS_FACILITIES_BATCH_USE="Facilities Batch Use" +COM_SUPPORTGROUPS_FACILITIES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch facilities" +COM_SUPPORTGROUPS_FACILITIES_CREATE="Facilities Create" +COM_SUPPORTGROUPS_FACILITIES_CREATE_DESC="Allows the users in this group to create create facilities" +COM_SUPPORTGROUPS_FACILITIES_DASHBOARD_ADD="Facilities Dashboard Add" +COM_SUPPORTGROUPS_FACILITIES_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the facility" +COM_SUPPORTGROUPS_FACILITIES_DASHBOARD_LIST="Facilities Dashboard List" +COM_SUPPORTGROUPS_FACILITIES_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the facility" +COM_SUPPORTGROUPS_FACILITIES_DELETE="Facilities Delete" +COM_SUPPORTGROUPS_FACILITIES_DELETE_DESC="Allows the users in this group to delete delete facilities" +COM_SUPPORTGROUPS_FACILITIES_EDIT="Facilities Edit" +COM_SUPPORTGROUPS_FACILITIES_EDIT_ALIAS="Facilities Edit Alias" +COM_SUPPORTGROUPS_FACILITIES_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_CREATED_BY="Facilities Edit Created By" +COM_SUPPORTGROUPS_FACILITIES_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by facilities" +COM_SUPPORTGROUPS_FACILITIES_EDIT_CREATED_DATE="Facilities Edit Created Date" +COM_SUPPORTGROUPS_FACILITIES_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created facilities" +COM_SUPPORTGROUPS_FACILITIES_EDIT_DESC="Allows the users in this group to edit the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_DETAILS="Facilities Edit Details" +COM_SUPPORTGROUPS_FACILITIES_EDIT_DETAILS_DESC="Allows the users in this group to update the edit details of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_FACILITY_TYPE="Facilities Edit Facility Type" +COM_SUPPORTGROUPS_FACILITIES_EDIT_FACILITY_TYPE_DESC="Allows the users in this group to update the edit facility type of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_NAME="Facilities Edit Name" +COM_SUPPORTGROUPS_FACILITIES_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_NOTE_SET_MARKER="Facilities Edit Note Set Marker" +COM_SUPPORTGROUPS_FACILITIES_EDIT_NOTE_SET_MARKER_DESC="Allows the users in this group to update the edit note set marker of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_OWN="Facilities Edit Own" +COM_SUPPORTGROUPS_FACILITIES_EDIT_OWN_DESC="Allows the users in this group to edit edit own facilities created by them" +COM_SUPPORTGROUPS_FACILITIES_EDIT_PHONE="Facilities Edit Phone" +COM_SUPPORTGROUPS_FACILITIES_EDIT_PHONE_DESC="Allows the users in this group to update the edit phone of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_STATE="Facilities Edit State" +COM_SUPPORTGROUPS_FACILITIES_EDIT_STATE_DESC="Allows the users in this group to update the state of the facility" +COM_SUPPORTGROUPS_FACILITIES_EDIT_VERSION="Facilities Edit Version" +COM_SUPPORTGROUPS_FACILITIES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version facilities" +COM_SUPPORTGROUPS_FACILITIES_EXPORT="Facilities Export" +COM_SUPPORTGROUPS_FACILITIES_EXPORT_DESC="Allows the users in this group to export export facilities" +COM_SUPPORTGROUPS_FACILITIES_IMPORT="Facilities Import" +COM_SUPPORTGROUPS_FACILITIES_IMPORT_DESC="Allows the users in this group to import import facilities" +COM_SUPPORTGROUPS_FACILITIES_SUBMENU="Facilities Submenu" +COM_SUPPORTGROUPS_FACILITIES_SUBMENU_DESC="Allows the users in this group to update the submenu of the facility" +COM_SUPPORTGROUPS_FACILITY_TYPES_ACCESS="Facility Types Access" +COM_SUPPORTGROUPS_FACILITY_TYPES_ACCESS_DESC="Allows the users in this group to access access facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_BATCH_USE="Facility Types Batch Use" +COM_SUPPORTGROUPS_FACILITY_TYPES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_CREATE="Facility Types Create" +COM_SUPPORTGROUPS_FACILITY_TYPES_CREATE_DESC="Allows the users in this group to create create facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_DELETE="Facility Types Delete" +COM_SUPPORTGROUPS_FACILITY_TYPES_DELETE_DESC="Allows the users in this group to delete delete facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT="Facility Types Edit" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_ALIAS="Facility Types Edit Alias" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the facility type" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_CREATED_BY="Facility Types Edit Created By" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_CREATED_DATE="Facility Types Edit Created Date" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_DESC="Allows the users in this group to edit the facility type" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_NAME="Facility Types Edit Name" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the facility type" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_OWN="Facility Types Edit Own" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_OWN_DESC="Allows the users in this group to edit edit own facility types created by them" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_STATE="Facility Types Edit State" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_STATE_DESC="Allows the users in this group to update the state of the facility type" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_VERSION="Facility Types Edit Version" +COM_SUPPORTGROUPS_FACILITY_TYPES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_EXPORT="Facility Types Export" +COM_SUPPORTGROUPS_FACILITY_TYPES_EXPORT_DESC="Allows the users in this group to export export facility types" +COM_SUPPORTGROUPS_FACILITY_TYPES_IMPORT="Facility Types Import" +COM_SUPPORTGROUPS_FACILITY_TYPES_IMPORT_DESC="Allows the users in this group to import import facility types" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_ACCESS="Help Documents Access" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_ACCESS_DESC="Allows the users in this group to access access help documents" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_BATCH_USE="Help Documents Batch Use" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch help documents" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_CREATE="Help Documents Create" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_CREATE_DESC="Allows the users in this group to create create help documents" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_DASHBOARD_LIST="Help Documents Dashboard List" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the help document" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_DELETE="Help Documents Delete" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_DELETE_DESC="Allows the users in this group to delete delete help documents" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EDIT="Help Documents Edit" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EDIT_DESC="Allows the users in this group to edit the help document" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EDIT_OWN="Help Documents Edit Own" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EDIT_OWN_DESC="Allows the users in this group to edit edit own help documents created by them" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EDIT_STATE="Help Documents Edit State" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EDIT_STATE_DESC="Allows the users in this group to update the state of the help document" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EDIT_VERSION="Help Documents Edit Version" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version help documents" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EXPORT="Help Documents Export" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_EXPORT_DESC="Allows the users in this group to export export help documents" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_IMPORT="Help Documents Import" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_IMPORT_DESC="Allows the users in this group to import import help documents" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_SUBMENU="Help Documents Submenu" +COM_SUPPORTGROUPS_HELP_DOCUMENTS_SUBMENU_DESC="Allows the users in this group to update the submenu of the help document" +COM_SUPPORTGROUPS_IMPORT_DATA="Import Data" +COM_SUPPORTGROUPS_IMPORT_DATA_DESC=" Allows users in this group to import data." +COM_SUPPORTGROUPS_INFO_TYPES_ACCESS="Info Types Access" +COM_SUPPORTGROUPS_INFO_TYPES_ACCESS_DESC="Allows the users in this group to access access info types" +COM_SUPPORTGROUPS_INFO_TYPES_BATCH_USE="Info Types Batch Use" +COM_SUPPORTGROUPS_INFO_TYPES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch info types" +COM_SUPPORTGROUPS_INFO_TYPES_CREATE="Info Types Create" +COM_SUPPORTGROUPS_INFO_TYPES_CREATE_DESC="Allows the users in this group to create create info types" +COM_SUPPORTGROUPS_INFO_TYPES_DELETE="Info Types Delete" +COM_SUPPORTGROUPS_INFO_TYPES_DELETE_DESC="Allows the users in this group to delete delete info types" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT="Info Types Edit" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_ALIAS="Info Types Edit Alias" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the info type" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_CREATED_BY="Info Types Edit Created By" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by info types" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_CREATED_DATE="Info Types Edit Created Date" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created info types" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_DESC="Allows the users in this group to edit the info type" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_NAME="Info Types Edit Name" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the info type" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_OWN="Info Types Edit Own" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_OWN_DESC="Allows the users in this group to edit edit own info types created by them" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_STATE="Info Types Edit State" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_STATE_DESC="Allows the users in this group to update the state of the info type" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_VERSION="Info Types Edit Version" +COM_SUPPORTGROUPS_INFO_TYPES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version info types" +COM_SUPPORTGROUPS_INFO_TYPES_EXPORT="Info Types Export" +COM_SUPPORTGROUPS_INFO_TYPES_EXPORT_DESC="Allows the users in this group to export export info types" +COM_SUPPORTGROUPS_INFO_TYPES_IMPORT="Info Types Import" +COM_SUPPORTGROUPS_INFO_TYPES_IMPORT_DESC="Allows the users in this group to import import info types" +COM_SUPPORTGROUPS_MAP_ACCESS_SITE="Map (Site) Access" +COM_SUPPORTGROUPS_MAP_ACCESS_SITE_DESC=" Allows the users in this group to access site map." COM_SUPPORTGROUPS_MENU="» Support Groups" -COM_SUPPORTGROUPS_MENU_CLINICS="Clinics" -COM_SUPPORTGROUPS_MENU_LOCATIONS="Locations" +COM_SUPPORTGROUPS_MENU_AREAS="Areas" +COM_SUPPORTGROUPS_MENU_FACILITIES="Facilities" +COM_SUPPORTGROUPS_MENU_MAP_DESC="Map of support groups" +COM_SUPPORTGROUPS_MENU_MAP_OPTION="Map" +COM_SUPPORTGROUPS_MENU_MAP_TITLE="Map" COM_SUPPORTGROUPS_MENU_PAYMENTS="Payments" COM_SUPPORTGROUPS_MENU_REGIONS="Regions" +COM_SUPPORTGROUPS_MENU_SUPPORTGROUPS_DESC="List all support groups" +COM_SUPPORTGROUPS_MENU_SUPPORTGROUPS_OPTION="Support Groups" +COM_SUPPORTGROUPS_MENU_SUPPORTGROUPS_TITLE="Support Groups" COM_SUPPORTGROUPS_MENU_SUPPORT_GROUPS="Support Groups" +COM_SUPPORTGROUPS_PAYMENTS_ACCESS="Payments Access" +COM_SUPPORTGROUPS_PAYMENTS_ACCESS_DESC="Allows the users in this group to access access payments" +COM_SUPPORTGROUPS_PAYMENTS_BATCH_USE="Payments Batch Use" +COM_SUPPORTGROUPS_PAYMENTS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch payments" +COM_SUPPORTGROUPS_PAYMENTS_CREATE="Payments Create" +COM_SUPPORTGROUPS_PAYMENTS_CREATE_DESC="Allows the users in this group to create create payments" +COM_SUPPORTGROUPS_PAYMENTS_DASHBOARD_ADD="Payments Dashboard Add" +COM_SUPPORTGROUPS_PAYMENTS_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the payment" +COM_SUPPORTGROUPS_PAYMENTS_DASHBOARD_LIST="Payments Dashboard List" +COM_SUPPORTGROUPS_PAYMENTS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the payment" +COM_SUPPORTGROUPS_PAYMENTS_DELETE="Payments Delete" +COM_SUPPORTGROUPS_PAYMENTS_DELETE_DESC="Allows the users in this group to delete delete payments" +COM_SUPPORTGROUPS_PAYMENTS_EDIT="Payments Edit" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_AMOUNT="Payments Edit Amount" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_AMOUNT_DESC="Allows the users in this group to update the edit amount of the payment" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_CREATED_BY="Payments Edit Created By" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by payments" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_CREATED_DATE="Payments Edit Created Date" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created payments" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_DESC="Allows the users in this group to edit the payment" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_OWN="Payments Edit Own" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_OWN_DESC="Allows the users in this group to edit edit own payments created by them" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_STATE="Payments Edit State" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_STATE_DESC="Allows the users in this group to update the state of the payment" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_SUPPORT_GROUP="Payments Edit Support Group" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_SUPPORT_GROUP_DESC="Allows the users in this group to update the edit support group of the payment" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_VERSION="Payments Edit Version" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version payments" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_YEAR="Payments Edit Year" +COM_SUPPORTGROUPS_PAYMENTS_EDIT_YEAR_DESC="Allows the users in this group to update the edit year of the payment" +COM_SUPPORTGROUPS_PAYMENTS_EXPORT="Payments Export" +COM_SUPPORTGROUPS_PAYMENTS_EXPORT_DESC="Allows the users in this group to export export payments" +COM_SUPPORTGROUPS_PAYMENTS_IMPORT="Payments Import" +COM_SUPPORTGROUPS_PAYMENTS_IMPORT_DESC="Allows the users in this group to import import payments" +COM_SUPPORTGROUPS_PAYMENTS_SUBMENU="Payments Submenu" +COM_SUPPORTGROUPS_PAYMENTS_SUBMENU_DESC="Allows the users in this group to update the submenu of the payment" +COM_SUPPORTGROUPS_REGIONS_ACCESS="Regions Access" +COM_SUPPORTGROUPS_REGIONS_ACCESS_DESC="Allows the users in this group to access access regions" +COM_SUPPORTGROUPS_REGIONS_BATCH_USE="Regions Batch Use" +COM_SUPPORTGROUPS_REGIONS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch regions" +COM_SUPPORTGROUPS_REGIONS_CREATE="Regions Create" +COM_SUPPORTGROUPS_REGIONS_CREATE_DESC="Allows the users in this group to create create regions" +COM_SUPPORTGROUPS_REGIONS_DASHBOARD_ADD="Regions Dashboard Add" +COM_SUPPORTGROUPS_REGIONS_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the region" +COM_SUPPORTGROUPS_REGIONS_DASHBOARD_LIST="Regions Dashboard List" +COM_SUPPORTGROUPS_REGIONS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the region" +COM_SUPPORTGROUPS_REGIONS_DELETE="Regions Delete" +COM_SUPPORTGROUPS_REGIONS_DELETE_DESC="Allows the users in this group to delete delete regions" +COM_SUPPORTGROUPS_REGIONS_EDIT="Regions Edit" +COM_SUPPORTGROUPS_REGIONS_EDIT_ALIAS="Regions Edit Alias" +COM_SUPPORTGROUPS_REGIONS_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the region" +COM_SUPPORTGROUPS_REGIONS_EDIT_COUNTRY="Regions Edit Country" +COM_SUPPORTGROUPS_REGIONS_EDIT_COUNTRY_DESC="Allows the users in this group to update the edit country of the region" +COM_SUPPORTGROUPS_REGIONS_EDIT_CREATED_BY="Regions Edit Created By" +COM_SUPPORTGROUPS_REGIONS_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by regions" +COM_SUPPORTGROUPS_REGIONS_EDIT_CREATED_DATE="Regions Edit Created Date" +COM_SUPPORTGROUPS_REGIONS_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created regions" +COM_SUPPORTGROUPS_REGIONS_EDIT_DESC="Allows the users in this group to edit the region" +COM_SUPPORTGROUPS_REGIONS_EDIT_NAME="Regions Edit Name" +COM_SUPPORTGROUPS_REGIONS_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the region" +COM_SUPPORTGROUPS_REGIONS_EDIT_OWN="Regions Edit Own" +COM_SUPPORTGROUPS_REGIONS_EDIT_OWN_DESC="Allows the users in this group to edit edit own regions created by them" +COM_SUPPORTGROUPS_REGIONS_EDIT_STATE="Regions Edit State" +COM_SUPPORTGROUPS_REGIONS_EDIT_STATE_DESC="Allows the users in this group to update the state of the region" +COM_SUPPORTGROUPS_REGIONS_EDIT_VERSION="Regions Edit Version" +COM_SUPPORTGROUPS_REGIONS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version regions" +COM_SUPPORTGROUPS_REGIONS_EXPORT="Regions Export" +COM_SUPPORTGROUPS_REGIONS_EXPORT_DESC="Allows the users in this group to export export regions" +COM_SUPPORTGROUPS_REGIONS_IMPORT="Regions Import" +COM_SUPPORTGROUPS_REGIONS_IMPORT_DESC="Allows the users in this group to import import regions" +COM_SUPPORTGROUPS_REGIONS_SUBMENU="Regions Submenu" +COM_SUPPORTGROUPS_REGIONS_SUBMENU_DESC="Allows the users in this group to update the submenu of the region" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESS="Support Groups Access" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESS_DESC="Allows the users in this group to access access support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESS_SITE="Support Groups (Site) Access" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESS_SITE_DESC=" Allows the users in this group to access site support groups." +COM_SUPPORTGROUPS_SUPPORT_GROUPS_BATCH_USE="Support Groups Batch Use" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_CREATE="Support Groups Create" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_CREATE_DESC="Allows the users in this group to create create support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_DASHBOARD_ADD="Support Groups Dashboard Add" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_DASHBOARD_LIST="Support Groups Dashboard List" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_DELETE="Support Groups Delete" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_DELETE_DESC="Allows the users in this group to delete delete support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT="Support Groups Edit" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_ALIAS="Support Groups Edit Alias" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_ALIAS_DESC="Allows the users in this group to update the edit alias of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_AREA="Support Groups Edit Area" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_AREA_DESC="Allows the users in this group to update the edit area of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CREATED_BY="Support Groups Edit Created By" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CREATED_BY_DESC="Allows the users in this group to update the created by of the edit created by support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CREATED_DATE="Support Groups Edit Created Date" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_CREATED_DATE_DESC="Allows the users in this group to update the created date of the edit created support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_DESC="Allows the users in this group to edit the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_DETAILS="Support Groups Edit Details" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_DETAILS_DESC="Allows the users in this group to update the edit details of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FACILITY="Support Groups Edit Facility" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FACILITY_DESC="Allows the users in this group to update the edit facility of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FEMALE="Support Groups Edit Female" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FEMALE_ART="Support Groups Edit Female Art" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FEMALE_ART_DESC="Allows the users in this group to update the edit female art of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_FEMALE_DESC="Allows the users in this group to update the edit female of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_INFO="Support Groups Edit Info" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_INFO_DESC="Allows the users in this group to update the edit info of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE="Support Groups Edit Male" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE_ART="Support Groups Edit Male Art" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE_ART_DESC="Allows the users in this group to update the edit male art of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE_CHILDREN="Support Groups Edit Male Children" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE_CHILDREN_DESC="Allows the users in this group to update the edit male children of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_MALE_DESC="Allows the users in this group to update the edit male of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_NAME="Support Groups Edit Name" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_NAME_DESC="Allows the users in this group to update the edit name of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_OWN="Support Groups Edit Own" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_OWN_DESC="Allows the users in this group to edit edit own support groups created by them" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_PHONE="Support Groups Edit Phone" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_PHONE_DESC="Allows the users in this group to update the edit phone of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_STATE="Support Groups Edit State" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_STATE_DESC="Allows the users in this group to update the state of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_VERSION="Support Groups Edit Version" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EXPORT="Support Groups Export" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_EXPORT_DESC="Allows the users in this group to export export support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_IMPORT="Support Groups Import" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_IMPORT_DESC="Allows the users in this group to import import support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_SUBMENU="Support Groups Submenu" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_SUBMENU_DESC="Allows the users in this group to update the submenu of the support group" +COM_SUPPORTGROUPS_SUPPORT_GROUP_SMART_EXPORT_BUTTON_ACCESS="Support Group Smart Export Button Access" +COM_SUPPORTGROUPS_SUPPORT_GROUP_SMART_EXPORT_BUTTON_ACCESS_DESC=" Allows the users in this group to access the smart export button." +COM_SUPPORTGROUPS_USE_BATCH="Use Batch" +COM_SUPPORTGROUPS_USE_BATCH_DESC=" Allows users in this group to use batch copy/update method." \ No newline at end of file diff --git a/admin/layouts/location/index.html b/admin/layouts/additional_info/index.html similarity index 100% rename from admin/layouts/location/index.html rename to admin/layouts/additional_info/index.html diff --git a/admin/layouts/clinic/metadata.php b/admin/layouts/additional_info/metadata.php similarity index 96% rename from admin/layouts/clinic/metadata.php rename to admin/layouts/additional_info/metadata.php index 12c0508..48152c0 100644 --- a/admin/layouts/clinic/metadata.php +++ b/admin/layouts/additional_info/metadata.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage metadata.php diff --git a/admin/layouts/location/publishing.php b/admin/layouts/additional_info/publishing.php similarity index 96% rename from admin/layouts/location/publishing.php rename to admin/layouts/additional_info/publishing.php index 1e9db24..2265b9a 100644 --- a/admin/layouts/location/publishing.php +++ b/admin/layouts/additional_info/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publishing.php diff --git a/admin/layouts/location/settings_above.php b/admin/layouts/additional_info/settings_above.php similarity index 95% rename from admin/layouts/location/settings_above.php rename to admin/layouts/additional_info/settings_above.php index d2fd54d..670c08b 100644 --- a/admin/layouts/location/settings_above.php +++ b/admin/layouts/additional_info/settings_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage settings_above.php @@ -31,7 +31,7 @@ $form = $displayData->getForm(); $fields = array( 'name', - 'region' + 'alias' ); ?> diff --git a/admin/layouts/location/settings_fullwidth.php b/admin/layouts/additional_info/settings_fullwidth.php similarity index 95% rename from admin/layouts/location/settings_fullwidth.php rename to admin/layouts/additional_info/settings_fullwidth.php index a0b76e5..7f05058 100644 --- a/admin/layouts/location/settings_fullwidth.php +++ b/admin/layouts/additional_info/settings_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage settings_fullwidth.php @@ -30,8 +30,7 @@ defined('_JEXEC') or die('Restricted access'); $form = $displayData->getForm(); $fields = $displayData->get('fields') ?: array( - 'note_set_area', - 'area' + 'details' ); ?> diff --git a/admin/layouts/additional_info/settings_left.php b/admin/layouts/additional_info/settings_left.php new file mode 100644 index 0000000..a3bc735 --- /dev/null +++ b/admin/layouts/additional_info/settings_left.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'info_type' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/additional_info/support_groups_fullwidth.php b/admin/layouts/additional_info/support_groups_fullwidth.php new file mode 100644 index 0000000..be4dd43 --- /dev/null +++ b/admin/layouts/additional_info/support_groups_fullwidth.php @@ -0,0 +1,146 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +// set the defaults +$items = $displayData->vvwsupport_groups; +$user = JFactory::getUser(); +$id = $displayData->item->id; +$edit = "index.php?option=com_supportgroups&view=support_groups&task=support_group.edit"; + +?> +
+ + + + + + + + + + + + + + + + $item): ?> + authorise('core.manage', 'com_checkin') || $item->checked_out == $user->id || $item->checked_out == 0; + $userChkOut = JFactory::getUser($item->checked_out); + $canDo = SupportgroupsHelper::getActions('support_group',$item,'support_groups'); + ?> + + + + + + + + published == 1):?> + + published == 0):?> + + published == 2):?> + + published == -2):?> + + + + + + +
+ + + + + + + + + + + + + + + +
+ get('support_group.edit')): ?> + escape($item->name); ?> + checked_out): ?> + name, $item->checked_out_time, 'support_groups.', $canCheckin); ?> + + +
escape($item->name); ?>
+ +
+ escape($item->phone); ?> + + authorise('area.edit', 'com_supportgroups.area.' . (int)$item->area)): ?> + escape($item->area_name); ?> + +
escape($item->area_name); ?>
+ +
+ authorise('facility.edit', 'com_supportgroups.facility.' . (int)$item->facility)): ?> + escape($item->facility_name); ?> + +
escape($item->facility_name); ?>
+ +
+ escape($item->male); ?> + + escape($item->female); ?> + + + + + + + + + + + + + + + + + + id; ?> +
+ +
+ +
+ +
diff --git a/admin/views/clinic/tmpl/index.html b/admin/layouts/area/index.html similarity index 100% rename from admin/views/clinic/tmpl/index.html rename to admin/layouts/area/index.html diff --git a/admin/layouts/location/metadata.php b/admin/layouts/area/metadata.php similarity index 96% rename from admin/layouts/location/metadata.php rename to admin/layouts/area/metadata.php index 12c0508..48152c0 100644 --- a/admin/layouts/location/metadata.php +++ b/admin/layouts/area/metadata.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage metadata.php diff --git a/admin/layouts/clinic/publishing.php b/admin/layouts/area/publishing.php similarity index 96% rename from admin/layouts/clinic/publishing.php rename to admin/layouts/area/publishing.php index 1e9db24..2265b9a 100644 --- a/admin/layouts/clinic/publishing.php +++ b/admin/layouts/area/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publishing.php diff --git a/admin/layouts/area/settings_above.php b/admin/layouts/area/settings_above.php new file mode 100644 index 0000000..5901e5d --- /dev/null +++ b/admin/layouts/area/settings_above.php @@ -0,0 +1,43 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = array( + 'name', + 'alias', + 'area_type' +); + +?> +
+ renderField($field); + } ?> +
diff --git a/admin/layouts/area/settings_fullwidth.php b/admin/layouts/area/settings_fullwidth.php new file mode 100644 index 0000000..7f05058 --- /dev/null +++ b/admin/layouts/area/settings_fullwidth.php @@ -0,0 +1,48 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'details' +); + +?> +
+ +
+
+ getLabel($field); ?> +
+
+ getInput($field); ?> +
+
+ +
diff --git a/admin/layouts/region/settings_left.php b/admin/layouts/area/settings_left.php similarity index 95% rename from admin/layouts/region/settings_left.php rename to admin/layouts/area/settings_left.php index 4482cc3..21a5603 100644 --- a/admin/layouts/region/settings_left.php +++ b/admin/layouts/area/settings_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage settings_left.php @@ -30,7 +30,7 @@ defined('_JEXEC') or die('Restricted access'); $form = $displayData->getForm(); $fields = $displayData->get('fields') ?: array( - 'name' + 'region' ); $hiddenFields = $displayData->get('hidden_fields') ?: array(); diff --git a/admin/layouts/region/settings_right.php b/admin/layouts/area/settings_right.php similarity index 95% rename from admin/layouts/region/settings_right.php rename to admin/layouts/area/settings_right.php index 90edc8b..5e245da 100644 --- a/admin/layouts/region/settings_right.php +++ b/admin/layouts/area/settings_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage settings_right.php @@ -30,7 +30,7 @@ defined('_JEXEC') or die('Restricted access'); $form = $displayData->getForm(); $fields = $displayData->get('fields') ?: array( - 'country' + 'color' ); $hiddenFields = $displayData->get('hidden_fields') ?: array(); diff --git a/admin/layouts/location/support_groups_fullwidth.php b/admin/layouts/area/support_groups_fullwidth.php similarity index 66% rename from admin/layouts/location/support_groups_fullwidth.php rename to admin/layouts/area/support_groups_fullwidth.php index ad3a4ee..8ad7b2e 100644 --- a/admin/layouts/location/support_groups_fullwidth.php +++ b/admin/layouts/area/support_groups_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage support_groups_fullwidth.php @@ -28,13 +28,13 @@ defined('_JEXEC') or die('Restricted access'); // set the defaults -$items = $displayData->vvwsupport_groups; +$items = $displayData->vvxsupport_groups; $user = JFactory::getUser(); $id = $displayData->item->id; -$edit = "index.php?option=com_supportgroups&view=support_groups&task=support_group.edit"; -$ref = ($id) ? "&ref=location&refid=".$id : ""; -$new = "index.php?option=com_supportgroups&view=support_group&layout=edit".$ref; -$can = SupportgroupsHelper::getActions('support_group'); +$edit = "index.php?option=com_supportgroups&view=support_groups&task=support_group.edit"; +$ref = ($id) ? "&ref=area&refid=".$id : ""; +$new = "index.php?option=com_supportgroups&view=support_group&layout=edit".$ref; +$can = SupportgroupsHelper::getActions('support_group'); ?>
@@ -42,31 +42,31 @@ $can = SupportgroupsHelper::getActions('support_group');

- +
- - - - - - - - @@ -81,7 +81,7 @@ $can = SupportgroupsHelper::getActions('support_group'); published == 1):?> - published == 0):?> - published == 2):?> - published == -2):?> - @@ -139,13 +139,6 @@ $can = SupportgroupsHelper::getActions('support_group'); - - - - -
+ + - + + - + + + + + +
get('support_group.edit')): ?> - escape($item->name); ?> + escape($item->name); ?> checked_out): ?> name, $item->checked_out_time, 'support_groups.', $canCheckin); ?> @@ -93,13 +93,13 @@ $can = SupportgroupsHelper::getActions('support_group'); escape($item->phone); ?> - escape($item->location_name); ?> + escape($item->area_name); ?> - authorise('clinic.edit', 'com_supportgroups.clinic.' . (int)$item->clinic)): ?> - escape($item->clinic_name); ?> + authorise('facility.edit', 'com_supportgroups.facility.' . (int)$item->facility)): ?> + escape($item->facility_name); ?> -
escape($item->clinic_name); ?>
+
escape($item->facility_name); ?>
@@ -109,27 +109,27 @@ $can = SupportgroupsHelper::getActions('support_group'); escape($item->female); ?> - - + + + - - + + + - - + + + - - + + +
- -
diff --git a/admin/layouts/area_type/details_left.php b/admin/layouts/area_type/details_left.php new file mode 100644 index 0000000..d6a6ca3 --- /dev/null +++ b/admin/layouts/area_type/details_left.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'name' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/area_type/details_right.php b/admin/layouts/area_type/details_right.php new file mode 100644 index 0000000..ed92110 --- /dev/null +++ b/admin/layouts/area_type/details_right.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'alias' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/views/clinics/index.html b/admin/layouts/area_type/index.html similarity index 100% rename from admin/views/clinics/index.html rename to admin/layouts/area_type/index.html diff --git a/admin/layouts/area_type/publishing.php b/admin/layouts/area_type/publishing.php new file mode 100644 index 0000000..311b53c --- /dev/null +++ b/admin/layouts/area_type/publishing.php @@ -0,0 +1,58 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'created', + 'created_by', + 'modified', + 'modified_by' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/area_type/publlshing.php b/admin/layouts/area_type/publlshing.php new file mode 100644 index 0000000..1c1a486 --- /dev/null +++ b/admin/layouts/area_type/publlshing.php @@ -0,0 +1,60 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'published', + 'ordering', + 'access', + 'version', + 'hits', + 'id' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/batchselection.php b/admin/layouts/batchselection.php index 63fb63a..9de95ea 100644 --- a/admin/layouts/batchselection.php +++ b/admin/layouts/batchselection.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage batchselection.php diff --git a/admin/layouts/country/metadata.php b/admin/layouts/country/metadata.php index 12c0508..48152c0 100644 --- a/admin/layouts/country/metadata.php +++ b/admin/layouts/country/metadata.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage metadata.php diff --git a/admin/layouts/country/publishing.php b/admin/layouts/country/publishing.php index 1e9db24..2265b9a 100644 --- a/admin/layouts/country/publishing.php +++ b/admin/layouts/country/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publishing.php diff --git a/admin/layouts/country/regions_fullwidth.php b/admin/layouts/country/regions_fullwidth.php index 59ece1c..a881f33 100644 --- a/admin/layouts/country/regions_fullwidth.php +++ b/admin/layouts/country/regions_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage regions_fullwidth.php @@ -31,10 +31,10 @@ defined('_JEXEC') or die('Restricted access'); $items = $displayData->vvyregions; $user = JFactory::getUser(); $id = $displayData->item->id; -$edit = "index.php?option=com_supportgroups&view=regions&task=region.edit"; -$ref = ($id) ? "&ref=country&refid=".$id : ""; -$new = "index.php?option=com_supportgroups&view=region&layout=edit".$ref; -$can = SupportgroupsHelper::getActions('region'); +$edit = "index.php?option=com_supportgroups&view=regions&task=region.edit"; +$ref = ($id) ? "&ref=country&refid=".$id : ""; +$new = "index.php?option=com_supportgroups&view=region&layout=edit".$ref; +$can = SupportgroupsHelper::getActions('region'); ?>
@@ -42,19 +42,19 @@ $can = SupportgroupsHelper::getActions('region');

- +
- - - - @@ -81,27 +81,27 @@ $can = SupportgroupsHelper::getActions('region'); escape($item->country_name); ?> published == 1):?> - published == 0):?> - published == 2):?> - published == -2):?> - @@ -111,13 +111,6 @@ $can = SupportgroupsHelper::getActions('region'); - - - - -
+ + + +
- - + + + - - + + + - - + + + - - + + +
- -
diff --git a/admin/layouts/country/settings_above.php b/admin/layouts/country/settings_above.php index 6e9fcc7..670c08b 100644 --- a/admin/layouts/country/settings_above.php +++ b/admin/layouts/country/settings_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage settings_above.php diff --git a/admin/layouts/country/settings_left.php b/admin/layouts/country/settings_left.php index bdf5843..70122bb 100644 --- a/admin/layouts/country/settings_left.php +++ b/admin/layouts/country/settings_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage settings_left.php diff --git a/admin/layouts/country/settings_right.php b/admin/layouts/country/settings_right.php index 47940cc..53045b0 100644 --- a/admin/layouts/country/settings_right.php +++ b/admin/layouts/country/settings_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage settings_right.php diff --git a/admin/layouts/currency/details_above.php b/admin/layouts/currency/details_above.php index b5e95da..0aea828 100644 --- a/admin/layouts/currency/details_above.php +++ b/admin/layouts/currency/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_above.php diff --git a/admin/layouts/currency/details_left.php b/admin/layouts/currency/details_left.php index 0eca2fb..2b422ba 100644 --- a/admin/layouts/currency/details_left.php +++ b/admin/layouts/currency/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_left.php diff --git a/admin/layouts/currency/details_right.php b/admin/layouts/currency/details_right.php index e28ecef..4788417 100644 --- a/admin/layouts/currency/details_right.php +++ b/admin/layouts/currency/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_right.php diff --git a/admin/layouts/currency/metadata.php b/admin/layouts/currency/metadata.php index 12c0508..48152c0 100644 --- a/admin/layouts/currency/metadata.php +++ b/admin/layouts/currency/metadata.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage metadata.php diff --git a/admin/layouts/currency/publishing.php b/admin/layouts/currency/publishing.php index 1e9db24..2265b9a 100644 --- a/admin/layouts/currency/publishing.php +++ b/admin/layouts/currency/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publishing.php diff --git a/admin/views/clinics/tmpl/index.html b/admin/layouts/facility/index.html similarity index 100% rename from admin/views/clinics/tmpl/index.html rename to admin/layouts/facility/index.html diff --git a/admin/layouts/facility/location_fullwidth.php b/admin/layouts/facility/location_fullwidth.php new file mode 100644 index 0000000..1aff1b8 --- /dev/null +++ b/admin/layouts/facility/location_fullwidth.php @@ -0,0 +1,48 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'note_set_marker' +); + +?> +
+ +
+
+ getLabel($field); ?> +
+
+ getInput($field); ?> +
+
+ +
diff --git a/admin/layouts/facility/metadata.php b/admin/layouts/facility/metadata.php new file mode 100644 index 0000000..48152c0 --- /dev/null +++ b/admin/layouts/facility/metadata.php @@ -0,0 +1,56 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +// JLayout for standard handling of metadata fields in the administrator content edit screens. +$fieldSets = $form->getFieldsets('metadata'); +?> + + $fieldSet) : ?> + description) && trim($fieldSet->description)) : ?> +

escape(JText::_($fieldSet->description)); ?>

+ + + renderField('metadesc'); + echo $form->renderField('metakey'); + } + + foreach ($form->getFieldset($name) as $field) + { + if ($field->name != 'jform[metadata][tags][]') + { + echo $field->renderField(); + } + } ?> + diff --git a/admin/layouts/facility/publishing.php b/admin/layouts/facility/publishing.php new file mode 100644 index 0000000..2265b9a --- /dev/null +++ b/admin/layouts/facility/publishing.php @@ -0,0 +1,64 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'created', + 'created_by', + 'modified', + 'modified_by', + 'published', + 'ordering', + 'access', + 'version', + 'hits', + 'id' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/facility/settings_above.php b/admin/layouts/facility/settings_above.php new file mode 100644 index 0000000..670c08b --- /dev/null +++ b/admin/layouts/facility/settings_above.php @@ -0,0 +1,42 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = array( + 'name', + 'alias' +); + +?> +
+ renderField($field); + } ?> +
diff --git a/admin/layouts/facility/settings_fullwidth.php b/admin/layouts/facility/settings_fullwidth.php new file mode 100644 index 0000000..7f05058 --- /dev/null +++ b/admin/layouts/facility/settings_fullwidth.php @@ -0,0 +1,48 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'details' +); + +?> +
+ +
+
+ getLabel($field); ?> +
+
+ getInput($field); ?> +
+
+ +
diff --git a/admin/layouts/facility/settings_left.php b/admin/layouts/facility/settings_left.php new file mode 100644 index 0000000..ae4318d --- /dev/null +++ b/admin/layouts/facility/settings_left.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'facility_type' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/facility/settings_right.php b/admin/layouts/facility/settings_right.php new file mode 100644 index 0000000..ec27d63 --- /dev/null +++ b/admin/layouts/facility/settings_right.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'phone' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/clinic/details_under.php b/admin/layouts/facility/settings_under.php similarity index 93% rename from admin/layouts/clinic/details_under.php rename to admin/layouts/facility/settings_under.php index b5bfe87..79bbdbd 100644 --- a/admin/layouts/clinic/details_under.php +++ b/admin/layouts/facility/settings_under.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups - @subpackage details_under.php + @subpackage settings_under.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -30,7 +30,7 @@ defined('_JEXEC') or die('Restricted access'); $form = $displayData->getForm(); $fields = array( - 'area' + 'marker' ); ?> diff --git a/admin/layouts/facility_type/details_left.php b/admin/layouts/facility_type/details_left.php new file mode 100644 index 0000000..d6a6ca3 --- /dev/null +++ b/admin/layouts/facility_type/details_left.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'name' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/facility_type/details_right.php b/admin/layouts/facility_type/details_right.php new file mode 100644 index 0000000..ed92110 --- /dev/null +++ b/admin/layouts/facility_type/details_right.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'alias' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/views/location/tmpl/index.html b/admin/layouts/facility_type/index.html similarity index 100% rename from admin/views/location/tmpl/index.html rename to admin/layouts/facility_type/index.html diff --git a/admin/layouts/facility_type/publishing.php b/admin/layouts/facility_type/publishing.php new file mode 100644 index 0000000..311b53c --- /dev/null +++ b/admin/layouts/facility_type/publishing.php @@ -0,0 +1,58 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'created', + 'created_by', + 'modified', + 'modified_by' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/facility_type/publlshing.php b/admin/layouts/facility_type/publlshing.php new file mode 100644 index 0000000..1c1a486 --- /dev/null +++ b/admin/layouts/facility_type/publlshing.php @@ -0,0 +1,60 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'published', + 'ordering', + 'access', + 'version', + 'hits', + 'id' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/help_document/details_above.php b/admin/layouts/help_document/details_above.php index 9880405..84bd830 100644 --- a/admin/layouts/help_document/details_above.php +++ b/admin/layouts/help_document/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_above.php diff --git a/admin/layouts/help_document/details_fullwidth.php b/admin/layouts/help_document/details_fullwidth.php index 9a2b4cc..a4eda73 100644 --- a/admin/layouts/help_document/details_fullwidth.php +++ b/admin/layouts/help_document/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_fullwidth.php diff --git a/admin/layouts/help_document/details_left.php b/admin/layouts/help_document/details_left.php index 462661a..f7019f6 100644 --- a/admin/layouts/help_document/details_left.php +++ b/admin/layouts/help_document/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_left.php diff --git a/admin/layouts/help_document/details_right.php b/admin/layouts/help_document/details_right.php index 0fc5d0e..b5e5e34 100644 --- a/admin/layouts/help_document/details_right.php +++ b/admin/layouts/help_document/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_right.php diff --git a/admin/layouts/help_document/details_under.php b/admin/layouts/help_document/details_under.php index ac835f3..3df2fdc 100644 --- a/admin/layouts/help_document/details_under.php +++ b/admin/layouts/help_document/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_under.php diff --git a/admin/layouts/help_document/publishing.php b/admin/layouts/help_document/publishing.php index a8d2a6d..311b53c 100644 --- a/admin/layouts/help_document/publishing.php +++ b/admin/layouts/help_document/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publishing.php diff --git a/admin/layouts/help_document/publlshing.php b/admin/layouts/help_document/publlshing.php index a93233d..1c1a486 100644 --- a/admin/layouts/help_document/publlshing.php +++ b/admin/layouts/help_document/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publlshing.php diff --git a/admin/layouts/info_type/details_left.php b/admin/layouts/info_type/details_left.php new file mode 100644 index 0000000..d6a6ca3 --- /dev/null +++ b/admin/layouts/info_type/details_left.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'name' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/info_type/details_right.php b/admin/layouts/info_type/details_right.php new file mode 100644 index 0000000..ed92110 --- /dev/null +++ b/admin/layouts/info_type/details_right.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'alias' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/views/locations/index.html b/admin/layouts/info_type/index.html similarity index 100% rename from admin/views/locations/index.html rename to admin/layouts/info_type/index.html diff --git a/admin/layouts/info_type/publishing.php b/admin/layouts/info_type/publishing.php new file mode 100644 index 0000000..311b53c --- /dev/null +++ b/admin/layouts/info_type/publishing.php @@ -0,0 +1,58 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'created', + 'created_by', + 'modified', + 'modified_by' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/info_type/publlshing.php b/admin/layouts/info_type/publlshing.php new file mode 100644 index 0000000..1c1a486 --- /dev/null +++ b/admin/layouts/info_type/publlshing.php @@ -0,0 +1,60 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'published', + 'ordering', + 'access', + 'version', + 'hits', + 'id' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/payment/details_above.php b/admin/layouts/payment/details_above.php index c1d0df5..fc8c537 100644 --- a/admin/layouts/payment/details_above.php +++ b/admin/layouts/payment/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_above.php diff --git a/admin/layouts/payment/details_left.php b/admin/layouts/payment/details_left.php index 78a923d..6caed4b 100644 --- a/admin/layouts/payment/details_left.php +++ b/admin/layouts/payment/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_left.php diff --git a/admin/layouts/payment/details_right.php b/admin/layouts/payment/details_right.php index 16a246f..f3ee901 100644 --- a/admin/layouts/payment/details_right.php +++ b/admin/layouts/payment/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_right.php diff --git a/admin/layouts/payment/publishing.php b/admin/layouts/payment/publishing.php index a8d2a6d..311b53c 100644 --- a/admin/layouts/payment/publishing.php +++ b/admin/layouts/payment/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publishing.php diff --git a/admin/layouts/payment/publlshing.php b/admin/layouts/payment/publlshing.php index a93233d..1c1a486 100644 --- a/admin/layouts/payment/publlshing.php +++ b/admin/layouts/payment/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publlshing.php diff --git a/admin/layouts/clinic/details_above.php b/admin/layouts/region/details_above.php similarity index 95% rename from admin/layouts/clinic/details_above.php rename to admin/layouts/region/details_above.php index 8d2e998..0aea828 100644 --- a/admin/layouts/clinic/details_above.php +++ b/admin/layouts/region/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_above.php @@ -31,7 +31,7 @@ $form = $displayData->getForm(); $fields = array( 'name', - 'phone' + 'alias' ); ?> diff --git a/admin/layouts/region/details_right.php b/admin/layouts/region/details_right.php new file mode 100644 index 0000000..1be54d1 --- /dev/null +++ b/admin/layouts/region/details_right.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'country' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/region/locations_fullwidth.php b/admin/layouts/region/locations_fullwidth.php deleted file mode 100644 index f7d1761..0000000 --- a/admin/layouts/region/locations_fullwidth.php +++ /dev/null @@ -1,127 +0,0 @@ - - @copyright Copyright (C) 2015. All Rights Reserved - @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html - - Support Groups - -/-----------------------------------------------------------------------------------------------------------------------------*/ - -// No direct access to this file - -defined('_JEXEC') or die('Restricted access'); - -// set the defaults -$items = $displayData->vvxlocations; -$user = JFactory::getUser(); -$id = $displayData->item->id; -$edit = "index.php?option=com_supportgroups&view=locations&task=location.edit"; -$ref = ($id) ? "&ref=region&refid=".$id : ""; -$new = "index.php?option=com_supportgroups&view=location&layout=edit".$ref; -$can = SupportgroupsHelper::getActions('location'); - -?> -
-get('location.create')): ?> -

- - - - - - - - - - - - - $item): ?> - authorise('core.manage', 'com_checkin') || $item->checked_out == $user->id || $item->checked_out == 0; - $userChkOut = JFactory::getUser($item->checked_out); - $canDo = SupportgroupsHelper::getActions('location',$item,'locations'); - ?> - - - - published == 1):?> - - published == 0):?> - - published == 2):?> - - published == -2):?> - - - - - - - - - - - -
- - - - - - - -
- get('location.edit')): ?> - escape($item->name); ?> - checked_out): ?> - name, $item->checked_out_time, 'locations.', $canCheckin); ?> - - -
escape($item->name); ?>
- -
- escape($item->region_name); ?> - - - - - - - - - - - - - - - - - - id; ?> -
- -
- -
- -
- -
diff --git a/admin/layouts/region/metadata.php b/admin/layouts/region/metadata.php index 12c0508..48152c0 100644 --- a/admin/layouts/region/metadata.php +++ b/admin/layouts/region/metadata.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage metadata.php diff --git a/admin/layouts/region/publishing.php b/admin/layouts/region/publishing.php index 1e9db24..2265b9a 100644 --- a/admin/layouts/region/publishing.php +++ b/admin/layouts/region/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publishing.php diff --git a/admin/layouts/support_group/details_above.php b/admin/layouts/support_group/details_above.php index 97e976a..0aea828 100644 --- a/admin/layouts/support_group/details_above.php +++ b/admin/layouts/support_group/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_above.php @@ -30,7 +30,8 @@ defined('_JEXEC') or die('Restricted access'); $form = $displayData->getForm(); $fields = array( - 'name' + 'name', + 'alias' ); ?> diff --git a/admin/layouts/clinic/details_fullwidth.php b/admin/layouts/support_group/details_fullwidth.php similarity index 95% rename from admin/layouts/clinic/details_fullwidth.php rename to admin/layouts/support_group/details_fullwidth.php index b11cfea..2ef2913 100644 --- a/admin/layouts/clinic/details_fullwidth.php +++ b/admin/layouts/support_group/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_fullwidth.php @@ -30,7 +30,7 @@ defined('_JEXEC') or die('Restricted access'); $form = $displayData->getForm(); $fields = $displayData->get('fields') ?: array( - 'note_set_area' + 'details' ); ?> diff --git a/admin/layouts/support_group/details_left.php b/admin/layouts/support_group/details_left.php index b25fab4..1f8eb52 100644 --- a/admin/layouts/support_group/details_left.php +++ b/admin/layouts/support_group/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_left.php @@ -31,8 +31,8 @@ $form = $displayData->getForm(); $fields = $displayData->get('fields') ?: array( 'phone', - 'location', - 'clinic' + 'facility', + 'info' ); $hiddenFields = $displayData->get('hidden_fields') ?: array(); diff --git a/admin/layouts/support_group/details_right.php b/admin/layouts/support_group/details_right.php index 6086b0c..9d1f64e 100644 --- a/admin/layouts/support_group/details_right.php +++ b/admin/layouts/support_group/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_right.php diff --git a/admin/layouts/support_group/details_under.php b/admin/layouts/support_group/details_under.php index b5bfe87..7950862 100644 --- a/admin/layouts/support_group/details_under.php +++ b/admin/layouts/support_group/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage details_under.php @@ -30,7 +30,7 @@ defined('_JEXEC') or die('Restricted access'); $form = $displayData->getForm(); $fields = array( - 'area' + 'marker' ); ?> diff --git a/admin/layouts/support_group/location_fullwidth.php b/admin/layouts/support_group/location_fullwidth.php new file mode 100644 index 0000000..1aff1b8 --- /dev/null +++ b/admin/layouts/support_group/location_fullwidth.php @@ -0,0 +1,48 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'note_set_marker' +); + +?> +
+ +
+
+ getLabel($field); ?> +
+
+ getInput($field); ?> +
+
+ +
diff --git a/admin/layouts/support_group/location_left.php b/admin/layouts/support_group/location_left.php new file mode 100644 index 0000000..ebbb39c --- /dev/null +++ b/admin/layouts/support_group/location_left.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'area' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/support_group/metadata.php b/admin/layouts/support_group/metadata.php index 12c0508..48152c0 100644 --- a/admin/layouts/support_group/metadata.php +++ b/admin/layouts/support_group/metadata.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage metadata.php diff --git a/admin/layouts/support_group/payments_fullwidth.php b/admin/layouts/support_group/payments_fullwidth.php index 2849ce7..8bbedee 100644 --- a/admin/layouts/support_group/payments_fullwidth.php +++ b/admin/layouts/support_group/payments_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage payments_fullwidth.php @@ -31,10 +31,10 @@ defined('_JEXEC') or die('Restricted access'); $items = $displayData->vvvpayments; $user = JFactory::getUser(); $id = $displayData->item->id; -$edit = "index.php?option=com_supportgroups&view=payments&task=payment.edit"; -$ref = ($id) ? "&ref=support_group&refid=".$id : ""; -$new = "index.php?option=com_supportgroups&view=payment&layout=edit".$ref; -$can = SupportgroupsHelper::getActions('payment'); +$edit = "index.php?option=com_supportgroups&view=payments&task=payment.edit"; +$ref = ($id) ? "&ref=support_group&refid=".$id : ""; +$new = "index.php?option=com_supportgroups&view=payment&layout=edit".$ref; +$can = SupportgroupsHelper::getActions('payment'); ?>
@@ -42,22 +42,22 @@ $can = SupportgroupsHelper::getActions('payment');

- +
- - - - - @@ -87,27 +87,27 @@ $can = SupportgroupsHelper::getActions('payment'); escape($item->amount); ?> published == 1):?> - published == 0):?> - published == 2):?> - published == -2):?> - @@ -117,13 +117,6 @@ $can = SupportgroupsHelper::getActions('payment'); - - - - -
+ + + + +
- - + + + - - + + + - - + + + - - + + +
- -
diff --git a/admin/layouts/support_group/publishing.php b/admin/layouts/support_group/publishing.php index 1e9db24..2265b9a 100644 --- a/admin/layouts/support_group/publishing.php +++ b/admin/layouts/support_group/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage publishing.php diff --git a/admin/models/location.php b/admin/models/additional_info.php similarity index 74% rename from admin/models/location.php rename to admin/models/additional_info.php index ed35ded..4a2bc4e 100644 --- a/admin/models/location.php +++ b/admin/models/additional_info.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 16 of this MVC + @build 25th October, 2017 + @created 9th March, 2016 @package Support Groups - @subpackage location.php + @subpackage additional_info.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -32,9 +32,9 @@ use Joomla\Registry\Registry; jimport('joomla.application.component.modeladmin'); /** - * Supportgroups Location Model + * Supportgroups Additional_info Model */ -class SupportgroupsModelLocation extends JModelAdmin +class SupportgroupsModelAdditional_info extends JModelAdmin { /** * @var string The prefix to use with controller messages. @@ -48,7 +48,7 @@ class SupportgroupsModelLocation extends JModelAdmin * @var string * @since 3.2 */ - public $typeAlias = 'com_supportgroups.location'; + public $typeAlias = 'com_supportgroups.additional_info'; /** * Returns a Table object, always creating it @@ -61,7 +61,7 @@ class SupportgroupsModelLocation extends JModelAdmin * * @since 1.6 */ - public function getTable($type = 'location', $prefix = 'SupportgroupsTable', $config = array()) + public function getTable($type = 'additional_info', $prefix = 'SupportgroupsTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } @@ -79,7 +79,7 @@ class SupportgroupsModelLocation extends JModelAdmin { if ($item = parent::getItem($pk)) { - if (!empty($item->params)) + if (!empty($item->params) && !is_array($item->params)) { // Convert the params field to an array. $registry = new Registry; @@ -98,10 +98,10 @@ class SupportgroupsModelLocation extends JModelAdmin if (!empty($item->id)) { $item->tags = new JHelperTags; - $item->tags->getTagIds($item->id, 'com_supportgroups.location'); + $item->tags->getTagIds($item->id, 'com_supportgroups.additional_info'); } } - $this->locationvvvw = $item->id; + $this->idvvvw = $item->id; return $item; } @@ -125,28 +125,13 @@ class SupportgroupsModelLocation extends JModelAdmin // From the supportgroups_support_group table $query->from($db->quoteName('#__supportgroups_support_group', 'a')); - // From the supportgroups_location table. - $query->select($db->quoteName('g.name','location_name')); - $query->join('LEFT', $db->quoteName('#__supportgroups_location', 'g') . ' ON (' . $db->quoteName('a.location') . ' = ' . $db->quoteName('g.id') . ')'); + // From the supportgroups_area table. + $query->select($db->quoteName('g.name','area_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_area', 'g') . ' ON (' . $db->quoteName('a.area') . ' = ' . $db->quoteName('g.id') . ')'); - // From the supportgroups_clinic table. - $query->select($db->quoteName('h.name','clinic_name')); - $query->join('LEFT', $db->quoteName('#__supportgroups_clinic', 'h') . ' ON (' . $db->quoteName('a.clinic') . ' = ' . $db->quoteName('h.id') . ')'); - - // Filter by locationvvvw global. - $locationvvvw = $this->locationvvvw; - if (is_numeric($locationvvvw )) - { - $query->where('a.location = ' . (int) $locationvvvw ); - } - elseif (is_string($locationvvvw)) - { - $query->where('a.location = ' . $db->quote($locationvvvw)); - } - else - { - $query->where('a.location = -5'); - } + // From the supportgroups_facility table. + $query->select($db->quoteName('h.name','facility_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_facility', 'h') . ' ON (' . $db->quoteName('a.facility') . ' = ' . $db->quoteName('h.id') . ')'); // Join over the asset groups. $query->select('ag.title AS access_level'); @@ -164,6 +149,7 @@ class SupportgroupsModelLocation extends JModelAdmin } // Order the results by ordering + $query->order('a.published ASC'); $query->order('a.ordering ASC'); // Load the items @@ -189,6 +175,33 @@ class SupportgroupsModelLocation extends JModelAdmin } } + + // Filter by idvvvw Array Field + $idvvvw = $this->idvvvw; + if (SupportgroupsHelper::checkArray($items) && $idvvvw) + { + foreach ($items as $nr => &$item) + { + if (SupportgroupsHelper::checkJson($item->info)) + { + $item->info = json_decode($item->info, true); + } + elseif (!isset($item->info) || !SupportgroupsHelper::checkArray($item->info)) + { + unset($items[$nr]); + continue; + } + if (!in_array($idvvvw,$item->info)) + { + unset($items[$nr]); + continue; + } + } + } + else + { + return false; + } return $items; } return false; @@ -205,8 +218,9 @@ class SupportgroupsModelLocation extends JModelAdmin * @since 1.6 */ public function getForm($data = array(), $loadData = true) - { // Get the form. - $form = $this->loadForm('com_supportgroups.location', 'location', array('control' => 'jform', 'load_data' => $loadData)); + { + // Get the form. + $form = $this->loadForm('com_supportgroups.additional_info', 'additional_info', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { @@ -230,8 +244,8 @@ class SupportgroupsModelLocation extends JModelAdmin // Check for existing item. // Modify the form based on Edit State access controls. - if ($id != 0 && (!$user->authorise('location.edit.state', 'com_supportgroups.location.' . (int) $id)) - || ($id == 0 && !$user->authorise('location.edit.state', 'com_supportgroups'))) + if ($id != 0 && (!$user->authorise('additional_info.edit.state', 'com_supportgroups.additional_info.' . (int) $id)) + || ($id == 0 && !$user->authorise('additional_info.edit.state', 'com_supportgroups'))) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); @@ -247,8 +261,8 @@ class SupportgroupsModelLocation extends JModelAdmin $form->setValue('created_by', null, $user->id); } // Modify the form based on Edit Creaded By access controls. - if ($id != 0 && (!$user->authorise('location.edit.created_by', 'com_supportgroups.location.' . (int) $id)) - || ($id == 0 && !$user->authorise('location.edit.created_by', 'com_supportgroups'))) + if ($id != 0 && (!$user->authorise('additional_info.edit.created_by', 'com_supportgroups.additional_info.' . (int) $id)) + || ($id == 0 && !$user->authorise('additional_info.edit.created_by', 'com_supportgroups'))) { // Disable fields for display. $form->setFieldAttribute('created_by', 'disabled', 'true'); @@ -258,8 +272,8 @@ class SupportgroupsModelLocation extends JModelAdmin $form->setFieldAttribute('created_by', 'filter', 'unset'); } // Modify the form based on Edit Creaded Date access controls. - if ($id != 0 && (!$user->authorise('location.edit.created', 'com_supportgroups.location.' . (int) $id)) - || ($id == 0 && !$user->authorise('location.edit.created', 'com_supportgroups'))) + if ($id != 0 && (!$user->authorise('additional_info.edit.created', 'com_supportgroups.additional_info.' . (int) $id)) + || ($id == 0 && !$user->authorise('additional_info.edit.created', 'com_supportgroups'))) { // Disable fields for display. $form->setFieldAttribute('created', 'disabled', 'true'); @@ -267,8 +281,8 @@ class SupportgroupsModelLocation extends JModelAdmin $form->setFieldAttribute('created', 'filter', 'unset'); } // Modify the form based on Edit Name access controls. - if ($id != 0 && (!$user->authorise('location.edit.name', 'com_supportgroups.location.' . (int) $id)) - || ($id == 0 && !$user->authorise('location.edit.name', 'com_supportgroups'))) + if ($id != 0 && (!$user->authorise('additional_info.edit.name', 'com_supportgroups.additional_info.' . (int) $id)) + || ($id == 0 && !$user->authorise('additional_info.edit.name', 'com_supportgroups'))) { // Disable fields for display. $form->setFieldAttribute('name', 'disabled', 'true'); @@ -282,20 +296,52 @@ class SupportgroupsModelLocation extends JModelAdmin $form->setFieldAttribute('name', 'required', 'false'); } } - // Modify the form based on Edit Region access controls. - if ($id != 0 && (!$user->authorise('location.edit.region', 'com_supportgroups.location.' . (int) $id)) - || ($id == 0 && !$user->authorise('location.edit.region', 'com_supportgroups'))) + // Modify the form based on Edit Info Type access controls. + if ($id != 0 && (!$user->authorise('additional_info.edit.info_type', 'com_supportgroups.additional_info.' . (int) $id)) + || ($id == 0 && !$user->authorise('additional_info.edit.info_type', 'com_supportgroups'))) { // Disable fields for display. - $form->setFieldAttribute('region', 'disabled', 'true'); + $form->setFieldAttribute('info_type', 'disabled', 'true'); // Disable fields for display. - $form->setFieldAttribute('region', 'readonly', 'true'); - if (!$form->getValue('region')) + $form->setFieldAttribute('info_type', 'readonly', 'true'); + if (!$form->getValue('info_type')) { // Disable fields while saving. - $form->setFieldAttribute('region', 'filter', 'unset'); + $form->setFieldAttribute('info_type', 'filter', 'unset'); // Disable fields while saving. - $form->setFieldAttribute('region', 'required', 'false'); + $form->setFieldAttribute('info_type', 'required', 'false'); + } + } + // Modify the form based on Edit Details access controls. + if ($id != 0 && (!$user->authorise('additional_info.edit.details', 'com_supportgroups.additional_info.' . (int) $id)) + || ($id == 0 && !$user->authorise('additional_info.edit.details', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('details', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('details', 'readonly', 'true'); + if (!$form->getValue('details')) + { + // Disable fields while saving. + $form->setFieldAttribute('details', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('details', 'required', 'false'); + } + } + // Modify the form based on Edit Alias access controls. + if ($id != 0 && (!$user->authorise('additional_info.edit.alias', 'com_supportgroups.additional_info.' . (int) $id)) + || ($id == 0 && !$user->authorise('additional_info.edit.alias', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('alias', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('alias', 'readonly', 'true'); + if (!$form->getValue('alias')) + { + // Disable fields while saving. + $form->setFieldAttribute('alias', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('alias', 'required', 'false'); } } // Only load these values if no id is found @@ -322,7 +368,7 @@ class SupportgroupsModelLocation extends JModelAdmin */ public function getScript() { - return 'administrator/components/com_supportgroups/models/forms/location.js'; + return 'administrator/components/com_supportgroups/models/forms/additional_info.js'; } /** @@ -345,7 +391,7 @@ class SupportgroupsModelLocation extends JModelAdmin $user = JFactory::getUser(); // The record has been set. Check the record permissions. - return $user->authorise('location.delete', 'com_supportgroups.location.' . (int) $record->id); + return $user->authorise('additional_info.delete', 'com_supportgroups.additional_info.' . (int) $record->id); } return false; } @@ -367,14 +413,14 @@ class SupportgroupsModelLocation extends JModelAdmin if ($recordId) { // The record has been set. Check the record permissions. - $permission = $user->authorise('location.edit.state', 'com_supportgroups.location.' . (int) $recordId); + $permission = $user->authorise('additional_info.edit.state', 'com_supportgroups.additional_info.' . (int) $recordId); if (!$permission && !is_null($permission)) { return false; } } // In the absense of better information, revert to the component permissions. - return $user->authorise('location.edit.state', 'com_supportgroups'); + return $user->authorise('additional_info.edit.state', 'com_supportgroups'); } /** @@ -391,7 +437,7 @@ class SupportgroupsModelLocation extends JModelAdmin // Check specific edit permission then general edit permission. $user = JFactory::getUser(); - return $user->authorise('location.edit', 'com_supportgroups.location.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('location.edit', 'com_supportgroups'); + return $user->authorise('additional_info.edit', 'com_supportgroups.additional_info.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('additional_info.edit', 'com_supportgroups'); } /** @@ -432,7 +478,7 @@ class SupportgroupsModelLocation extends JModelAdmin $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('MAX(ordering)') - ->from($db->quoteName('#__supportgroups_location')); + ->from($db->quoteName('#__supportgroups_additional_info')); $db->setQuery($query); $max = $db->loadResult(); @@ -462,7 +508,7 @@ class SupportgroupsModelLocation extends JModelAdmin protected function loadFormData() { // Check the session for previously entered form data. - $data = JFactory::getApplication()->getUserState('com_supportgroups.edit.location.data', array()); + $data = JFactory::getApplication()->getUserState('com_supportgroups.edit.additional_info.data', array()); if (empty($data)) { @@ -502,6 +548,26 @@ class SupportgroupsModelLocation extends JModelAdmin return true; } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } /** * Method to perform batch operations on an item or a set of items. @@ -540,7 +606,7 @@ class SupportgroupsModelLocation extends JModelAdmin $this->tableClassName = get_class($this->table); $this->contentType = new JUcmType; $this->type = $this->contentType->getTypeByTable($this->tableClassName); - $this->canDo = SupportgroupsHelper::getActions('location'); + $this->canDo = SupportgroupsHelper::getActions('additional_info'); $this->batchSet = true; if (!$this->canDo->get('core.batch')) @@ -618,12 +684,10 @@ class SupportgroupsModelLocation extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); - $this->canDo = SupportgroupsHelper::getActions('location'); + $this->canDo = SupportgroupsHelper::getActions('additional_info'); } - if (!$this->canDo->get('location.create') && !$this->canDo->get('location.batch')) + if (!$this->canDo->get('additional_info.create') && !$this->canDo->get('additional_info.batch')) { return false; } @@ -638,13 +702,12 @@ class SupportgroupsModelLocation extends JModelAdmin { $values['published'] = 0; } - elseif (isset($values['published']) && !$this->canDo->get('location.edit.state')) + elseif (isset($values['published']) && !$this->canDo->get('additional_info.edit.state')) { $values['published'] = 0; } $newIds = array(); - // Parent exists so let's proceed while (!empty($pks)) { @@ -654,17 +717,11 @@ class SupportgroupsModelLocation extends JModelAdmin $this->table->reset(); // only allow copy if user may edit this item. - - if (!$this->user->authorise('location.edit', $contexts[$pk])) - + if (!$this->user->authorise('additional_info.edit', $contexts[$pk])) { - // Not fatal error - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); - continue; - } // Check that the row actually exists @@ -674,7 +731,6 @@ class SupportgroupsModelLocation extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -685,7 +741,11 @@ class SupportgroupsModelLocation extends JModelAdmin } } - $this->table->name = $this->generateUniqe('name',$this->table->name); + // Only for strings + if (SupportgroupsHelper::checkString($this->table->name) && !is_numeric($this->table->name)) + { + $this->table->name = $this->generateUniqe('name',$this->table->name); + } // insert all set values if (SupportgroupsHelper::checkArray($values)) @@ -767,19 +827,17 @@ class SupportgroupsModelLocation extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); - $this->canDo = SupportgroupsHelper::getActions('location'); + $this->canDo = SupportgroupsHelper::getActions('additional_info'); } - if (!$this->canDo->get('location.edit') && !$this->canDo->get('location.batch')) + if (!$this->canDo->get('additional_info.edit') && !$this->canDo->get('additional_info.batch')) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); return false; } // make sure published only updates if user has the permission. - if (isset($values['published']) && !$this->canDo->get('location.edit.state')) + if (isset($values['published']) && !$this->canDo->get('additional_info.edit.state')) { unset($values['published']); } @@ -789,10 +847,9 @@ class SupportgroupsModelLocation extends JModelAdmin // Parent exists so we proceed foreach ($pks as $pk) { - if (!$this->user->authorise('location.edit', $contexts[$pk])) + if (!$this->user->authorise('additional_info.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); - return false; } @@ -803,7 +860,6 @@ class SupportgroupsModelLocation extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -820,7 +876,7 @@ class SupportgroupsModelLocation extends JModelAdmin foreach ($values as $key => $value) { // Do special action for access. - if ('access' == $key && strlen($value) > 0) + if ('access' === $key && strlen($value) > 0) { $this->table->$key = $value; } @@ -893,7 +949,7 @@ class SupportgroupsModelLocation extends JModelAdmin } // Alter the uniqe field for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { // Automatic handling of other uniqe fields $uniqeFields = $this->getUniqeFields(); @@ -938,9 +994,9 @@ class SupportgroupsModelLocation extends JModelAdmin } /** - * Method to change the title & alias. + * Method to change the title * - * @param string $title The title. + * @param string $title The title. * * @return array Contains the modified title and alias. * diff --git a/admin/models/additional_information.php b/admin/models/additional_information.php new file mode 100644 index 0000000..b4faf35 --- /dev/null +++ b/admin/models/additional_information.php @@ -0,0 +1,384 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the Joomla modellist library +jimport('joomla.application.component.modellist'); + +/** + * Additional_information Model + */ +class SupportgroupsModelAdditional_information extends JModelList +{ + public function __construct($config = array()) + { + if (empty($config['filter_fields'])) + { + $config['filter_fields'] = array( + 'a.id','id', + 'a.published','published', + 'a.ordering','ordering', + 'a.created_by','created_by', + 'a.modified_by','modified_by', + 'a.name','name', + 'a.info_type','info_type' + ); + } + + parent::__construct($config); + } + + /** + * Method to auto-populate the model state. + * + * @return void + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + + // Adjust the context to support modal layouts. + if ($layout = $app->input->get('layout')) + { + $this->context .= '.' . $layout; + } + $name = $this->getUserStateFromRequest($this->context . '.filter.name', 'filter_name'); + $this->setState('filter.name', $name); + + $info_type = $this->getUserStateFromRequest($this->context . '.filter.info_type', 'filter_info_type'); + $this->setState('filter.info_type', $info_type); + + $sorting = $this->getUserStateFromRequest($this->context . '.filter.sorting', 'filter_sorting', 0, 'int'); + $this->setState('filter.sorting', $sorting); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $created_by = $this->getUserStateFromRequest($this->context . '.filter.created_by', 'filter_created_by', ''); + $this->setState('filter.created_by', $created_by); + + $created = $this->getUserStateFromRequest($this->context . '.filter.created', 'filter_created'); + $this->setState('filter.created', $created); + + // List state information. + parent::populateState($ordering, $direction); + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems() + { + // check in items + $this->checkInNow(); + + // load parent items + $items = parent::getItems(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('additional_info.access', 'com_supportgroups.additional_info.' . (int) $item->id) && $user->authorise('additional_info.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + } + } + + // return items + return $items; + } + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_item table + $query->from($db->quoteName('#__supportgroups_additional_info', 'a')); + + // From the supportgroups_info_type table. + $query->select($db->quoteName('g.name','info_type_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_info_type', 'g') . ' ON (' . $db->quoteName('a.info_type') . ' = ' . $db->quoteName('g.id') . ')'); + + // Filter by published state + $published = $this->getState('filter.published'); + if (is_numeric($published)) + { + $query->where('a.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(a.published = 0 OR a.published = 1)'); + } + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('a.access = ' . (int) $access); + } + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + // Filter by search. + $search = $this->getState('filter.search'); + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('a.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.name LIKE '.$search.' OR a.info_type LIKE '.$search.' OR g.name LIKE '.$search.' OR a.details LIKE '.$search.')'); + } + } + + // Filter by info_type. + if ($info_type = $this->getState('filter.info_type')) + { + $query->where('a.info_type = ' . $db->quote($db->escape($info_type))); + } + + // Add the list ordering clause. + $orderCol = $this->state->get('list.ordering', 'a.id'); + $orderDirn = $this->state->get('list.direction', 'asc'); + if ($orderCol != '') + { + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + } + + return $query; + } + + /** + * Method to get list export data. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExportData($pks) + { + // setup the query + if (SupportgroupsHelper::checkArray($pks)) + { + // Set a value to know this is exporting method. + $_export = true; + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_additional_info table + $query->from($db->quoteName('#__supportgroups_additional_info', 'a')); + $query->where('a.id IN (' . implode(',',$pks) . ')'); + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + + // Order the results by ordering + $query->order('a.ordering ASC'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('additional_info.access', 'com_supportgroups.additional_info.' . (int) $item->id) && $user->authorise('additional_info.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + // unset the values we don't want exported. + unset($item->asset_id); + unset($item->checked_out); + unset($item->checked_out_time); + } + } + // Add headers to items array. + $headers = $this->getExImPortHeaders(); + if (SupportgroupsHelper::checkObject($headers)) + { + array_unshift($items,$headers); + } + return $items; + } + } + return false; + } + + /** + * Method to get header. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExImPortHeaders() + { + // Get a db connection. + $db = JFactory::getDbo(); + // get the columns + $columns = $db->getTableColumns("#__supportgroups_additional_info"); + if (SupportgroupsHelper::checkArray($columns)) + { + // remove the headers you don't import/export. + unset($columns['asset_id']); + unset($columns['checked_out']); + unset($columns['checked_out_time']); + $headers = new stdClass(); + foreach ($columns as $column => $type) + { + $headers->{$column} = $column; + } + return $headers; + } + return false; + } + + /** + * Method to get a store id based on model configuration state. + * + * @return string A store id. + * + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.id'); + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.ordering'); + $id .= ':' . $this->getState('filter.created_by'); + $id .= ':' . $this->getState('filter.modified_by'); + $id .= ':' . $this->getState('filter.name'); + $id .= ':' . $this->getState('filter.info_type'); + + return parent::getStoreId($id); + } + + /** + * Build an SQL query to checkin all items left checked out longer then a set time. + * + * @return a bool + * + */ + protected function checkInNow() + { + // Get set check in time + $time = JComponentHelper::getParams('com_supportgroups')->get('check_in'); + + if ($time) + { + + // Get a db connection. + $db = JFactory::getDbo(); + // reset query + $query = $db->getQuery(true); + $query->select('*'); + $query->from($db->quoteName('#__supportgroups_additional_info')); + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + // Get Yesterdays date + $date = JFactory::getDate()->modify($time)->toSql(); + // reset query + $query = $db->getQuery(true); + + // Fields to update. + $fields = array( + $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', + $db->quoteName('checked_out') . '=0' + ); + + // Conditions for which records should be updated. + $conditions = array( + $db->quoteName('checked_out') . '!=0', + $db->quoteName('checked_out_time') . '<\''.$date.'\'' + ); + + // Check table + $query->update($db->quoteName('#__supportgroups_additional_info'))->set($fields)->where($conditions); + + $db->setQuery($query); + + $db->execute(); + } + } + + return false; + } +} diff --git a/admin/models/ajax.php b/admin/models/ajax.php new file mode 100644 index 0000000..3955a2e --- /dev/null +++ b/admin/models/ajax.php @@ -0,0 +1,95 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.application.component.helper'); + +/** + * Supportgroups Ajax Model + */ +class SupportgroupsModelAjax extends JModelList +{ + protected $app_params; + + public function __construct() + { + parent::__construct(); + // get params + $this->app_params = JComponentHelper::getParams('com_supportgroups'); + + } + + // Used in support_group + + /** + * Check and if a vdm notice is new (per/user) + **/ + public function isNew($notice) + { + // first get the file path + $path_filename = SupportgroupsHelper::getFilePath('path', 'usernotice', 'md', JFactory::getUser()->username, JPATH_COMPONENT_ADMINISTRATOR); + // check if the file is set + if (($content = @file_get_contents($path_filename)) !== FALSE) + { + if ($notice == $content) + { + return false; + } + } + return true; + } + + /** + * set That a notice has been read (per/user) + **/ + public function isRead($notice) + { + // first get the file path + $path_filename = SupportgroupsHelper::getFilePath('path', 'usernotice', 'md', JFactory::getUser()->username, JPATH_COMPONENT_ADMINISTRATOR); + // set as read if not already set + if (($content = @file_get_contents($path_filename)) !== FALSE) + { + if ($notice == $content) + { + return true; + } + } + return $this->saveFile($notice,$path_filename); + } + + protected function saveFile($data,$path_filename) + { + if (SupportgroupsHelper::checkString($data)) + { + $fp = fopen($path_filename, 'w'); + fwrite($fp, $data); + fclose($fp); + return true; + } + return false; + } +} diff --git a/admin/models/area.php b/admin/models/area.php new file mode 100644 index 0000000..496a854 --- /dev/null +++ b/admin/models/area.php @@ -0,0 +1,1110 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla modelform library +jimport('joomla.application.component.modeladmin'); + +/** + * Supportgroups Area Model + */ +class SupportgroupsModelArea extends JModelAdmin +{ + /** + * @var string The prefix to use with controller messages. + * @since 1.6 + */ + protected $text_prefix = 'COM_SUPPORTGROUPS'; + + /** + * The type alias for this content type. + * + * @var string + * @since 3.2 + */ + public $typeAlias = 'com_supportgroups.area'; + + /** + * Returns a Table object, always creating it + * + * @param type $type The table type to instantiate + * @param string $prefix A prefix for the table class name. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return JTable A database object + * + * @since 1.6 + */ + public function getTable($type = 'area', $prefix = 'SupportgroupsTable', $config = array()) + { + return JTable::getInstance($type, $prefix, $config); + } + + /** + * Method to get a single record. + * + * @param integer $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.6 + */ + public function getItem($pk = null) + { + if ($item = parent::getItem($pk)) + { + if (!empty($item->params) && !is_array($item->params)) + { + // Convert the params field to an array. + $registry = new Registry; + $registry->loadString($item->params); + $item->params = $registry->toArray(); + } + + if (!empty($item->metadata)) + { + // Convert the metadata field to an array. + $registry = new Registry; + $registry->loadString($item->metadata); + $item->metadata = $registry->toArray(); + } + + if (!empty($item->id)) + { + $item->tags = new JHelperTags; + $item->tags->getTagIds($item->id, 'com_supportgroups.area'); + } + } + $this->areavvvx = $item->id; + + return $item; + } + + /** + * Method to get list data. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getVvxsupport_groups() + { + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_support_group table + $query->from($db->quoteName('#__supportgroups_support_group', 'a')); + + // From the supportgroups_area table. + $query->select($db->quoteName('g.name','area_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_area', 'g') . ' ON (' . $db->quoteName('a.area') . ' = ' . $db->quoteName('g.id') . ')'); + + // From the supportgroups_facility table. + $query->select($db->quoteName('h.name','facility_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_facility', 'h') . ' ON (' . $db->quoteName('a.facility') . ' = ' . $db->quoteName('h.id') . ')'); + + // Filter by areavvvx global. + $areavvvx = $this->areavvvx; + if (is_numeric($areavvvx )) + { + $query->where('a.area = ' . (int) $areavvvx ); + } + elseif (is_string($areavvvx)) + { + $query->where('a.area = ' . $db->quote($areavvvx)); + } + else + { + $query->where('a.area = -5'); + } + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('a.access = ' . (int) $access); + } + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + + // Order the results by ordering + $query->order('a.published ASC'); + $query->order('a.ordering ASC'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('support_group.access', 'com_supportgroups.support_group.' . (int) $item->id) && $user->authorise('support_group.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + } + } + return $items; + } + return false; + } + + /** + * Method to get the record form. + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 1.6 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_supportgroups.area', 'area', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0, 'INT'); + } + // The back end uses id so we use that the rest of the time and set it to 0 by default. + else + { + $id = $jinput->get('id', 0, 'INT'); + } + + $user = JFactory::getUser(); + + // Check for existing item. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('area.edit.state', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.state', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + // If this is a new item insure the greated by is set. + if (0 == $id) + { + // Set the created_by to this user + $form->setValue('created_by', null, $user->id); + } + // Modify the form based on Edit Creaded By access controls. + if ($id != 0 && (!$user->authorise('area.edit.created_by', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.created_by', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('created_by', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('created_by', 'readonly', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created_by', 'filter', 'unset'); + } + // Modify the form based on Edit Creaded Date access controls. + if ($id != 0 && (!$user->authorise('area.edit.created', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.created', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('created', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created', 'filter', 'unset'); + } + // Modify the form based on Edit Name access controls. + if ($id != 0 && (!$user->authorise('area.edit.name', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.name', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('name', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('name', 'readonly', 'true'); + if (!$form->getValue('name')) + { + // Disable fields while saving. + $form->setFieldAttribute('name', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('name', 'required', 'false'); + } + } + // Modify the form based on Edit Area Type access controls. + if ($id != 0 && (!$user->authorise('area.edit.area_type', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.area_type', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('area_type', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('area_type', 'readonly', 'true'); + if (!$form->getValue('area_type')) + { + // Disable fields while saving. + $form->setFieldAttribute('area_type', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('area_type', 'required', 'false'); + } + } + // Modify the form based on Edit Region access controls. + if ($id != 0 && (!$user->authorise('area.edit.region', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.region', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('region', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('region', 'readonly', 'true'); + if (!$form->getValue('region')) + { + // Disable fields while saving. + $form->setFieldAttribute('region', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('region', 'required', 'false'); + } + } + // Modify the form based on Edit Details access controls. + if ($id != 0 && (!$user->authorise('area.edit.details', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.details', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('details', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('details', 'readonly', 'true'); + if (!$form->getValue('details')) + { + // Disable fields while saving. + $form->setFieldAttribute('details', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('details', 'required', 'false'); + } + } + // Modify the form based on Edit Color access controls. + if ($id != 0 && (!$user->authorise('area.edit.color', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.color', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('color', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('color', 'readonly', 'true'); + if (!$form->getValue('color')) + { + // Disable fields while saving. + $form->setFieldAttribute('color', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('color', 'required', 'false'); + } + } + // Modify the form based on Edit Alias access controls. + if ($id != 0 && (!$user->authorise('area.edit.alias', 'com_supportgroups.area.' . (int) $id)) + || ($id == 0 && !$user->authorise('area.edit.alias', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('alias', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('alias', 'readonly', 'true'); + if (!$form->getValue('alias')) + { + // Disable fields while saving. + $form->setFieldAttribute('alias', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('alias', 'required', 'false'); + } + } + // Only load these values if no id is found + if (0 == $id) + { + // Set redirected field name + $redirectedField = $jinput->get('ref', null, 'STRING'); + // Set redirected field value + $redirectedValue = $jinput->get('refid', 0, 'INT'); + if (0 != $redirectedValue && $redirectedField) + { + // Now set the local-redirected field default value + $form->setValue($redirectedField, null, $redirectedValue); + } + } + + return $form; + } + + /** + * Method to get the script that have to be included on the form + * + * @return string script files + */ + public function getScript() + { + return 'administrator/components/com_supportgroups/models/forms/area.js'; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->published != -2) + { + return; + } + + $user = JFactory::getUser(); + // The record has been set. Check the record permissions. + return $user->authorise('area.delete', 'com_supportgroups.area.' . (int) $record->id); + } + return false; + } + + /** + * Method to test whether a record can have its state edited. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + $recordId = (!empty($record->id)) ? $record->id : 0; + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('area.edit.state', 'com_supportgroups.area.' . (int) $recordId); + if (!$permission && !is_null($permission)) + { + return false; + } + } + // In the absense of better information, revert to the component permissions. + return $user->authorise('area.edit.state', 'com_supportgroups'); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * @since 2.5 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // Check specific edit permission then general edit permission. + $user = JFactory::getUser(); + + return $user->authorise('area.edit', 'com_supportgroups.area.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('area.edit', 'com_supportgroups'); + } + + /** + * Prepare and sanitise the table data prior to saving. + * + * @param JTable $table A JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if (isset($table->name)) + { + $table->name = htmlspecialchars_decode($table->name, ENT_QUOTES); + } + + if (isset($table->alias) && empty($table->alias)) + { + $table->generateAlias(); + } + + if (empty($table->id)) + { + $table->created = $date->toSql(); + // set the user + if ($table->created_by == 0 || empty($table->created_by)) + { + $table->created_by = $user->id; + } + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select('MAX(ordering)') + ->from($db->quoteName('#__supportgroups_area')); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + else + { + $table->modified = $date->toSql(); + $table->modified_by = $user->id; + } + + if (!empty($table->id)) + { + // Increment the items version number. + $table->version++; + } + } + + /** + * Method to get the data that should be injected in the form. + * + * @return mixed The data for the form. + * + * @since 1.6 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $data = JFactory::getApplication()->getUserState('com_supportgroups.edit.area.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get the unique fields of this table. + * + * @return mixed An array of field names, boolean false if none is set. + * + * @since 3.0 + */ + protected function getUniqeFields() + { + return false; + } + + /** + * Method to delete one or more records. + * + * @param array &$pks An array of record primary keys. + * + * @return boolean True if successful, false if an error occurs. + * + * @since 12.2 + */ + public function delete(&$pks) + { + if (!parent::delete($pks)) + { + return false; + } + + return true; + } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } + + /** + * Method to perform batch operations on an item or a set of items. + * + * @param array $commands An array of commands to perform. + * @param array $pks An array of item ids. + * @param array $contexts An array of item contexts. + * + * @return boolean Returns true on success, false on failure. + * + * @since 12.2 + */ + public function batch($commands, $pks, $contexts) + { + // Sanitize ids. + $pks = array_unique($pks); + JArrayHelper::toInteger($pks); + + // Remove any values of zero. + if (array_search(0, $pks, true)) + { + unset($pks[array_search(0, $pks, true)]); + } + + if (empty($pks)) + { + $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); + return false; + } + + $done = false; + + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = SupportgroupsHelper::getActions('area'); + $this->batchSet = true; + + if (!$this->canDo->get('core.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + return false; + } + + if ($this->type == false) + { + $type = new JUcmType; + $this->type = $type->getTypeByAlias($this->typeAlias); + } + + $this->tagsObserver = $this->table->getObserverOfClass('JTableObserverTags'); + + if (!empty($commands['move_copy'])) + { + $cmd = JArrayHelper::getValue($commands, 'move_copy', 'c'); + + if ($cmd == 'c') + { + $result = $this->batchCopy($commands, $pks, $contexts); + + if (is_array($result)) + { + foreach ($result as $old => $new) + { + $contexts[$new] = $contexts[$old]; + } + $pks = array_values($result); + } + else + { + return false; + } + } + elseif ($cmd == 'm' && !$this->batchMove($commands, $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (!$done) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + + return false; + } + + // Clear the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch copy items to a new category or current. + * + * @param integer $values The new values. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return mixed An array of new IDs on success, boolean false on failure. + * + * @since 12.2 + */ + protected function batchCopy($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->canDo = SupportgroupsHelper::getActions('area'); + } + + if (!$this->canDo->get('area.create') && !$this->canDo->get('area.batch')) + { + return false; + } + + // get list of uniqe fields + $uniqeFields = $this->getUniqeFields(); + // remove move_copy from array + unset($values['move_copy']); + + // make sure published is set + if (!isset($values['published'])) + { + $values['published'] = 0; + } + elseif (isset($values['published']) && !$this->canDo->get('area.edit.state')) + { + $values['published'] = 0; + } + + $newIds = array(); + // Parent exists so let's proceed + while (!empty($pks)) + { + // Pop the first ID off the stack + $pk = array_shift($pks); + + $this->table->reset(); + + // only allow copy if user may edit this item. + if (!$this->user->authorise('area.edit', $contexts[$pk])) + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); + + // insert all set values + if (SupportgroupsHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + if (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + // update all uniqe fields + if (SupportgroupsHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $this->table->$uniqeField = $this->generateUniqe($uniqeField,$this->table->$uniqeField); + } + } + + // Reset the ID because we are making a copy + $this->table->id = 0; + + // TODO: Deal with ordering? + // $this->table->ordering = 1; + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + + // Get the new item ID + $newId = $this->table->get('id'); + + // Add the new ID to the array + $newIds[$pk] = $newId; + } + + // Clean the cache + $this->cleanCache(); + + return $newIds; + } + + /** + * Batch move items to a new category + * + * @param integer $value The new category ID. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 12.2 + */ + protected function batchMove($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->canDo = SupportgroupsHelper::getActions('area'); + } + + if (!$this->canDo->get('area.edit') && !$this->canDo->get('area.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // make sure published only updates if user has the permission. + if (isset($values['published']) && !$this->canDo->get('area.edit.state')) + { + unset($values['published']); + } + // remove move_copy from array + unset($values['move_copy']); + + // Parent exists so we proceed + foreach ($pks as $pk) + { + if (!$this->user->authorise('area.edit', $contexts[$pk])) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + // insert all set values. + if (SupportgroupsHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + // Do special action for access. + if ('access' === $key && strlen($value) > 0) + { + $this->table->$key = $value; + } + elseif (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + $input = JFactory::getApplication()->input; + $filter = JFilterInput::getInstance(); + + // set the metadata to the Item Data + if (isset($data['metadata']) && isset($data['metadata']['author'])) + { + $data['metadata']['author'] = $filter->clean($data['metadata']['author'], 'TRIM'); + + $metadata = new JRegistry; + $metadata->loadArray($data['metadata']); + $data['metadata'] = (string) $metadata; + } + + // Set the Params Items to data + if (isset($data['params']) && is_array($data['params'])) + { + $params = new JRegistry; + $params->loadArray($data['params']); + $data['params'] = (string) $params; + } + + // Alter the name for save as copy + if ($input->get('task') === 'save2copy') + { + $origTable = clone $this->getTable(); + $origTable->load($input->getInt('id')); + + if ($data['name'] == $origTable->name) + { + list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); + $data['name'] = $name; + $data['alias'] = $alias; + } + else + { + if ($data['alias'] == $origTable->alias) + { + $data['alias'] = ''; + } + } + + $data['published'] = 0; + } + + // Automatic handling of alias for empty fields + if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) + { + if ($data['alias'] == null || empty($data['alias'])) + { + if (JFactory::getConfig()->get('unicodeslugs') == 1) + { + $data['alias'] = JFilterOutput::stringURLUnicodeSlug($data['name']); + } + else + { + $data['alias'] = JFilterOutput::stringURLSafe($data['name']); + } + + $table = JTable::getInstance('area', 'supportgroupsTable'); + + if ($table->load(array('alias' => $data['alias'])) && ($table->id != $data['id'] || $data['id'] == 0)) + { + $msg = JText::_('COM_SUPPORTGROUPS_AREA_SAVE_WARNING'); + } + + $data['alias'] = $this->_generateNewTitle($data['alias']); + + if (isset($msg)) + { + JFactory::getApplication()->enqueueMessage($msg, 'warning'); + } + } + } + + // Alter the uniqe field for save as copy + if ($input->get('task') === 'save2copy') + { + // Automatic handling of other uniqe fields + $uniqeFields = $this->getUniqeFields(); + if (SupportgroupsHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $data[$uniqeField] = $this->generateUniqe($uniqeField,$data[$uniqeField]); + } + } + } + + if (parent::save($data)) + { + return true; + } + return false; + } + + /** + * Method to generate a uniqe value. + * + * @param string $field name. + * @param string $value data. + * + * @return string New value. + * + * @since 3.0 + */ + protected function generateUniqe($field,$value) + { + + // set field value uniqe + $table = $this->getTable(); + + while ($table->load(array($field => $value))) + { + $value = JString::increment($value); + } + + return $value; + } + + /** + * Method to change the title/s & alias. + * + * @param string $alias The alias. + * @param string/array $title The title. + * + * @return array/string Contains the modified title/s and/or alias. + * + */ + protected function _generateNewTitle($alias, $title = null) + { + + // Alter the title/s & alias + $table = $this->getTable(); + + while ($table->load(array('alias' => $alias))) + { + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } + $alias = JString::increment($alias, 'dash'); + } + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; + } +} diff --git a/admin/models/clinic.php b/admin/models/area_type.php similarity index 74% rename from admin/models/clinic.php rename to admin/models/area_type.php index 61659bf..c68c2eb 100644 --- a/admin/models/clinic.php +++ b/admin/models/area_type.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups - @subpackage clinic.php + @subpackage area_type.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -32,9 +32,9 @@ use Joomla\Registry\Registry; jimport('joomla.application.component.modeladmin'); /** - * Supportgroups Clinic Model + * Supportgroups Area_type Model */ -class SupportgroupsModelClinic extends JModelAdmin +class SupportgroupsModelArea_type extends JModelAdmin { /** * @var string The prefix to use with controller messages. @@ -48,7 +48,7 @@ class SupportgroupsModelClinic extends JModelAdmin * @var string * @since 3.2 */ - public $typeAlias = 'com_supportgroups.clinic'; + public $typeAlias = 'com_supportgroups.area_type'; /** * Returns a Table object, always creating it @@ -61,7 +61,7 @@ class SupportgroupsModelClinic extends JModelAdmin * * @since 1.6 */ - public function getTable($type = 'clinic', $prefix = 'SupportgroupsTable', $config = array()) + public function getTable($type = 'area_type', $prefix = 'SupportgroupsTable', $config = array()) { return JTable::getInstance($type, $prefix, $config); } @@ -79,7 +79,7 @@ class SupportgroupsModelClinic extends JModelAdmin { if ($item = parent::getItem($pk)) { - if (!empty($item->params)) + if (!empty($item->params) && !is_array($item->params)) { // Convert the params field to an array. $registry = new Registry; @@ -98,7 +98,7 @@ class SupportgroupsModelClinic extends JModelAdmin if (!empty($item->id)) { $item->tags = new JHelperTags; - $item->tags->getTagIds($item->id, 'com_supportgroups.clinic'); + $item->tags->getTagIds($item->id, 'com_supportgroups.area_type'); } } @@ -116,8 +116,9 @@ class SupportgroupsModelClinic extends JModelAdmin * @since 1.6 */ public function getForm($data = array(), $loadData = true) - { // Get the form. - $form = $this->loadForm('com_supportgroups.clinic', 'clinic', array('control' => 'jform', 'load_data' => $loadData)); + { + // Get the form. + $form = $this->loadForm('com_supportgroups.area_type', 'area_type', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { @@ -141,8 +142,8 @@ class SupportgroupsModelClinic extends JModelAdmin // Check for existing item. // Modify the form based on Edit State access controls. - if ($id != 0 && (!$user->authorise('clinic.edit.state', 'com_supportgroups.clinic.' . (int) $id)) - || ($id == 0 && !$user->authorise('clinic.edit.state', 'com_supportgroups'))) + if ($id != 0 && (!$user->authorise('area_type.edit.state', 'com_supportgroups.area_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('area_type.edit.state', 'com_supportgroups'))) { // Disable fields for display. $form->setFieldAttribute('ordering', 'disabled', 'true'); @@ -158,8 +159,8 @@ class SupportgroupsModelClinic extends JModelAdmin $form->setValue('created_by', null, $user->id); } // Modify the form based on Edit Creaded By access controls. - if ($id != 0 && (!$user->authorise('clinic.edit.created_by', 'com_supportgroups.clinic.' . (int) $id)) - || ($id == 0 && !$user->authorise('clinic.edit.created_by', 'com_supportgroups'))) + if ($id != 0 && (!$user->authorise('area_type.edit.created_by', 'com_supportgroups.area_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('area_type.edit.created_by', 'com_supportgroups'))) { // Disable fields for display. $form->setFieldAttribute('created_by', 'disabled', 'true'); @@ -169,8 +170,8 @@ class SupportgroupsModelClinic extends JModelAdmin $form->setFieldAttribute('created_by', 'filter', 'unset'); } // Modify the form based on Edit Creaded Date access controls. - if ($id != 0 && (!$user->authorise('clinic.edit.created', 'com_supportgroups.clinic.' . (int) $id)) - || ($id == 0 && !$user->authorise('clinic.edit.created', 'com_supportgroups'))) + if ($id != 0 && (!$user->authorise('area_type.edit.created', 'com_supportgroups.area_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('area_type.edit.created', 'com_supportgroups'))) { // Disable fields for display. $form->setFieldAttribute('created', 'disabled', 'true'); @@ -178,8 +179,8 @@ class SupportgroupsModelClinic extends JModelAdmin $form->setFieldAttribute('created', 'filter', 'unset'); } // Modify the form based on Edit Name access controls. - if ($id != 0 && (!$user->authorise('clinic.edit.name', 'com_supportgroups.clinic.' . (int) $id)) - || ($id == 0 && !$user->authorise('clinic.edit.name', 'com_supportgroups'))) + if ($id != 0 && (!$user->authorise('area_type.edit.name', 'com_supportgroups.area_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('area_type.edit.name', 'com_supportgroups'))) { // Disable fields for display. $form->setFieldAttribute('name', 'disabled', 'true'); @@ -193,36 +194,20 @@ class SupportgroupsModelClinic extends JModelAdmin $form->setFieldAttribute('name', 'required', 'false'); } } - // Modify the form based on Edit Phone access controls. - if ($id != 0 && (!$user->authorise('clinic.edit.phone', 'com_supportgroups.clinic.' . (int) $id)) - || ($id == 0 && !$user->authorise('clinic.edit.phone', 'com_supportgroups'))) + // Modify the form based on Edit Alias access controls. + if ($id != 0 && (!$user->authorise('area_type.edit.alias', 'com_supportgroups.area_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('area_type.edit.alias', 'com_supportgroups'))) { // Disable fields for display. - $form->setFieldAttribute('phone', 'disabled', 'true'); + $form->setFieldAttribute('alias', 'disabled', 'true'); // Disable fields for display. - $form->setFieldAttribute('phone', 'readonly', 'true'); - if (!$form->getValue('phone')) + $form->setFieldAttribute('alias', 'readonly', 'true'); + if (!$form->getValue('alias')) { // Disable fields while saving. - $form->setFieldAttribute('phone', 'filter', 'unset'); + $form->setFieldAttribute('alias', 'filter', 'unset'); // Disable fields while saving. - $form->setFieldAttribute('phone', 'required', 'false'); - } - } - // Modify the form based on Edit Note Set Area access controls. - if ($id != 0 && (!$user->authorise('clinic.edit.note_set_area', 'com_supportgroups.clinic.' . (int) $id)) - || ($id == 0 && !$user->authorise('clinic.edit.note_set_area', 'com_supportgroups'))) - { - // Disable fields for display. - $form->setFieldAttribute('note_set_area', 'disabled', 'true'); - // Disable fields for display. - $form->setFieldAttribute('note_set_area', 'readonly', 'true'); - if (!$form->getValue('note_set_area')) - { - // Disable fields while saving. - $form->setFieldAttribute('note_set_area', 'filter', 'unset'); - // Disable fields while saving. - $form->setFieldAttribute('note_set_area', 'required', 'false'); + $form->setFieldAttribute('alias', 'required', 'false'); } } // Only load these values if no id is found @@ -249,7 +234,7 @@ class SupportgroupsModelClinic extends JModelAdmin */ public function getScript() { - return 'administrator/components/com_supportgroups/models/forms/clinic.js'; + return 'administrator/components/com_supportgroups/models/forms/area_type.js'; } /** @@ -272,7 +257,7 @@ class SupportgroupsModelClinic extends JModelAdmin $user = JFactory::getUser(); // The record has been set. Check the record permissions. - return $user->authorise('clinic.delete', 'com_supportgroups.clinic.' . (int) $record->id); + return $user->authorise('area_type.delete', 'com_supportgroups.area_type.' . (int) $record->id); } return false; } @@ -294,14 +279,14 @@ class SupportgroupsModelClinic extends JModelAdmin if ($recordId) { // The record has been set. Check the record permissions. - $permission = $user->authorise('clinic.edit.state', 'com_supportgroups.clinic.' . (int) $recordId); + $permission = $user->authorise('area_type.edit.state', 'com_supportgroups.area_type.' . (int) $recordId); if (!$permission && !is_null($permission)) { return false; } } // In the absense of better information, revert to the component permissions. - return $user->authorise('clinic.edit.state', 'com_supportgroups'); + return $user->authorise('area_type.edit.state', 'com_supportgroups'); } /** @@ -318,7 +303,7 @@ class SupportgroupsModelClinic extends JModelAdmin // Check specific edit permission then general edit permission. $user = JFactory::getUser(); - return $user->authorise('clinic.edit', 'com_supportgroups.clinic.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('clinic.edit', 'com_supportgroups'); + return $user->authorise('area_type.edit', 'com_supportgroups.area_type.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('area_type.edit', 'com_supportgroups'); } /** @@ -359,7 +344,7 @@ class SupportgroupsModelClinic extends JModelAdmin $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('MAX(ordering)') - ->from($db->quoteName('#__supportgroups_clinic')); + ->from($db->quoteName('#__supportgroups_area_type')); $db->setQuery($query); $max = $db->loadResult(); @@ -389,7 +374,7 @@ class SupportgroupsModelClinic extends JModelAdmin protected function loadFormData() { // Check the session for previously entered form data. - $data = JFactory::getApplication()->getUserState('com_supportgroups.edit.clinic.data', array()); + $data = JFactory::getApplication()->getUserState('com_supportgroups.edit.area_type.data', array()); if (empty($data)) { @@ -429,6 +414,26 @@ class SupportgroupsModelClinic extends JModelAdmin return true; } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } /** * Method to perform batch operations on an item or a set of items. @@ -467,7 +472,7 @@ class SupportgroupsModelClinic extends JModelAdmin $this->tableClassName = get_class($this->table); $this->contentType = new JUcmType; $this->type = $this->contentType->getTypeByTable($this->tableClassName); - $this->canDo = SupportgroupsHelper::getActions('clinic'); + $this->canDo = SupportgroupsHelper::getActions('area_type'); $this->batchSet = true; if (!$this->canDo->get('core.batch')) @@ -545,12 +550,10 @@ class SupportgroupsModelClinic extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); - $this->canDo = SupportgroupsHelper::getActions('clinic'); + $this->canDo = SupportgroupsHelper::getActions('area_type'); } - if (!$this->canDo->get('clinic.create') && !$this->canDo->get('clinic.batch')) + if (!$this->canDo->get('area_type.create') && !$this->canDo->get('area_type.batch')) { return false; } @@ -565,13 +568,12 @@ class SupportgroupsModelClinic extends JModelAdmin { $values['published'] = 0; } - elseif (isset($values['published']) && !$this->canDo->get('clinic.edit.state')) + elseif (isset($values['published']) && !$this->canDo->get('area_type.edit.state')) { $values['published'] = 0; } $newIds = array(); - // Parent exists so let's proceed while (!empty($pks)) { @@ -581,17 +583,11 @@ class SupportgroupsModelClinic extends JModelAdmin $this->table->reset(); // only allow copy if user may edit this item. - - if (!$this->user->authorise('clinic.edit', $contexts[$pk])) - + if (!$this->user->authorise('area_type.edit', $contexts[$pk])) { - // Not fatal error - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); - continue; - } // Check that the row actually exists @@ -601,7 +597,6 @@ class SupportgroupsModelClinic extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -611,8 +606,7 @@ class SupportgroupsModelClinic extends JModelAdmin continue; } } - - $this->table->name = $this->generateUniqe('name',$this->table->name); + list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); // insert all set values if (SupportgroupsHelper::checkArray($values)) @@ -694,19 +688,17 @@ class SupportgroupsModelClinic extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); - $this->canDo = SupportgroupsHelper::getActions('clinic'); + $this->canDo = SupportgroupsHelper::getActions('area_type'); } - if (!$this->canDo->get('clinic.edit') && !$this->canDo->get('clinic.batch')) + if (!$this->canDo->get('area_type.edit') && !$this->canDo->get('area_type.batch')) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); return false; } // make sure published only updates if user has the permission. - if (isset($values['published']) && !$this->canDo->get('clinic.edit.state')) + if (isset($values['published']) && !$this->canDo->get('area_type.edit.state')) { unset($values['published']); } @@ -716,10 +708,9 @@ class SupportgroupsModelClinic extends JModelAdmin // Parent exists so we proceed foreach ($pks as $pk) { - if (!$this->user->authorise('clinic.edit', $contexts[$pk])) + if (!$this->user->authorise('area_type.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); - return false; } @@ -730,7 +721,6 @@ class SupportgroupsModelClinic extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -747,7 +737,7 @@ class SupportgroupsModelClinic extends JModelAdmin foreach ($values as $key => $value) { // Do special action for access. - if ('access' == $key && strlen($value) > 0) + if ('access' === $key && strlen($value) > 0) { $this->table->$key = $value; } @@ -819,8 +809,61 @@ class SupportgroupsModelClinic extends JModelAdmin $data['params'] = (string) $params; } + // Alter the name for save as copy + if ($input->get('task') === 'save2copy') + { + $origTable = clone $this->getTable(); + $origTable->load($input->getInt('id')); + + if ($data['name'] == $origTable->name) + { + list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); + $data['name'] = $name; + $data['alias'] = $alias; + } + else + { + if ($data['alias'] == $origTable->alias) + { + $data['alias'] = ''; + } + } + + $data['published'] = 0; + } + + // Automatic handling of alias for empty fields + if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) + { + if ($data['alias'] == null || empty($data['alias'])) + { + if (JFactory::getConfig()->get('unicodeslugs') == 1) + { + $data['alias'] = JFilterOutput::stringURLUnicodeSlug($data['name']); + } + else + { + $data['alias'] = JFilterOutput::stringURLSafe($data['name']); + } + + $table = JTable::getInstance('area_type', 'supportgroupsTable'); + + if ($table->load(array('alias' => $data['alias'])) && ($table->id != $data['id'] || $data['id'] == 0)) + { + $msg = JText::_('COM_SUPPORTGROUPS_AREA_TYPE_SAVE_WARNING'); + } + + $data['alias'] = $this->_generateNewTitle($data['alias']); + + if (isset($msg)) + { + JFactory::getApplication()->enqueueMessage($msg, 'warning'); + } + } + } + // Alter the uniqe field for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { // Automatic handling of other uniqe fields $uniqeFields = $this->getUniqeFields(); @@ -865,24 +908,49 @@ class SupportgroupsModelClinic extends JModelAdmin } /** - * Method to change the title & alias. + * Method to change the title/s & alias. * - * @param string $title The title. + * @param string $alias The alias. + * @param string/array $title The title. * - * @return array Contains the modified title and alias. + * @return array/string Contains the modified title/s and/or alias. * */ - protected function _generateNewTitle($title) + protected function _generateNewTitle($alias, $title = null) { - // Alter the title + // Alter the title/s & alias $table = $this->getTable(); - while ($table->load(array('title' => $title))) + while ($table->load(array('alias' => $alias))) { - $title = JString::increment($title); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } + $alias = JString::increment($alias, 'dash'); } - - return $title; + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; } } diff --git a/admin/models/clinics.php b/admin/models/area_types.php similarity index 87% rename from admin/models/clinics.php rename to admin/models/area_types.php index 05db89e..c1f13c7 100644 --- a/admin/models/clinics.php +++ b/admin/models/area_types.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups - @subpackage clinics.php + @subpackage area_types.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -30,9 +30,9 @@ defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.modellist'); /** - * Clinics Model + * Area_types Model */ -class SupportgroupsModelClinics extends JModelList +class SupportgroupsModelArea_types extends JModelList { public function __construct($config = array()) { @@ -44,8 +44,7 @@ class SupportgroupsModelClinics extends JModelList 'a.ordering','ordering', 'a.created_by','created_by', 'a.modified_by','modified_by', - 'a.name','name', - 'a.phone','phone' + 'a.name','name' ); } @@ -67,10 +66,7 @@ class SupportgroupsModelClinics extends JModelList $this->context .= '.' . $layout; } $name = $this->getUserStateFromRequest($this->context . '.filter.name', 'filter_name'); - $this->setState('filter.name', $name); - - $phone = $this->getUserStateFromRequest($this->context . '.filter.phone', 'filter_phone'); - $this->setState('filter.phone', $phone); + $this->setState('filter.name', $name); $sorting = $this->getUserStateFromRequest($this->context . '.filter.sorting', 'filter_sorting', 0, 'int'); $this->setState('filter.sorting', $sorting); @@ -114,7 +110,7 @@ class SupportgroupsModelClinics extends JModelList $user = JFactory::getUser(); foreach ($items as $nr => &$item) { - $access = ($user->authorise('clinic.access', 'com_supportgroups.clinic.' . (int) $item->id) && $user->authorise('clinic.access', 'com_supportgroups')); + $access = ($user->authorise('area_type.access', 'com_supportgroups.area_type.' . (int) $item->id) && $user->authorise('area_type.access', 'com_supportgroups')); if (!$access) { unset($items[$nr]); @@ -122,7 +118,7 @@ class SupportgroupsModelClinics extends JModelList } } - } + } // return items return $items; @@ -145,7 +141,7 @@ class SupportgroupsModelClinics extends JModelList $query->select('a.*'); // From the supportgroups_item table - $query->from($db->quoteName('#__supportgroups_clinic', 'a')); + $query->from($db->quoteName('#__supportgroups_area_type', 'a')); // Filter by published state $published = $this->getState('filter.published'); @@ -182,8 +178,8 @@ class SupportgroupsModelClinics extends JModelList } else { - $search = $db->quote('%' . $db->escape($search, true) . '%'); - $query->where('(a.name LIKE '.$search.' OR a.phone LIKE '.$search.')'); + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.name LIKE '.$search.')'); } } @@ -209,6 +205,8 @@ class SupportgroupsModelClinics extends JModelList // setup the query if (SupportgroupsHelper::checkArray($pks)) { + // Set a value to know this is exporting method. + $_export = true; // Get the user object. $user = JFactory::getUser(); // Create a new query object. @@ -218,8 +216,8 @@ class SupportgroupsModelClinics extends JModelList // Select some fields $query->select('a.*'); - // From the supportgroups_clinic table - $query->from($db->quoteName('#__supportgroups_clinic', 'a')); + // From the supportgroups_area_type table + $query->from($db->quoteName('#__supportgroups_area_type', 'a')); $query->where('a.id IN (' . implode(',',$pks) . ')'); // Implement View Level Access if (!$user->authorise('core.options', 'com_supportgroups')) @@ -245,7 +243,7 @@ class SupportgroupsModelClinics extends JModelList $user = JFactory::getUser(); foreach ($items as $nr => &$item) { - $access = ($user->authorise('clinic.access', 'com_supportgroups.clinic.' . (int) $item->id) && $user->authorise('clinic.access', 'com_supportgroups')); + $access = ($user->authorise('area_type.access', 'com_supportgroups.area_type.' . (int) $item->id) && $user->authorise('area_type.access', 'com_supportgroups')); if (!$access) { unset($items[$nr]); @@ -280,7 +278,7 @@ class SupportgroupsModelClinics extends JModelList // Get a db connection. $db = JFactory::getDbo(); // get the columns - $columns = $db->getTableColumns("#__supportgroups_clinic"); + $columns = $db->getTableColumns("#__supportgroups_area_type"); if (SupportgroupsHelper::checkArray($columns)) { // remove the headers you don't import/export. @@ -312,8 +310,7 @@ class SupportgroupsModelClinics extends JModelList $id .= ':' . $this->getState('filter.ordering'); $id .= ':' . $this->getState('filter.created_by'); $id .= ':' . $this->getState('filter.modified_by'); - $id .= ':' . $this->getState('filter.name'); - $id .= ':' . $this->getState('filter.phone'); + $id .= ':' . $this->getState('filter.name'); return parent::getStoreId($id); } @@ -337,7 +334,7 @@ class SupportgroupsModelClinics extends JModelList // reset query $query = $db->getQuery(true); $query->select('*'); - $query->from($db->quoteName('#__supportgroups_clinic')); + $query->from($db->quoteName('#__supportgroups_area_type')); $db->setQuery($query); $db->execute(); if ($db->getNumRows()) @@ -360,7 +357,7 @@ class SupportgroupsModelClinics extends JModelList ); // Check table - $query->update($db->quoteName('#__supportgroups_clinic'))->set($fields)->where($conditions); + $query->update($db->quoteName('#__supportgroups_area_type'))->set($fields)->where($conditions); $db->setQuery($query); diff --git a/admin/models/areas.php b/admin/models/areas.php new file mode 100644 index 0000000..16adeda --- /dev/null +++ b/admin/models/areas.php @@ -0,0 +1,416 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the Joomla modellist library +jimport('joomla.application.component.modellist'); + +/** + * Areas Model + */ +class SupportgroupsModelAreas extends JModelList +{ + public function __construct($config = array()) + { + if (empty($config['filter_fields'])) + { + $config['filter_fields'] = array( + 'a.id','id', + 'a.published','published', + 'a.ordering','ordering', + 'a.created_by','created_by', + 'a.modified_by','modified_by', + 'a.name','name', + 'a.area_type','area_type', + 'a.region','region' + ); + } + + parent::__construct($config); + } + + /** + * Method to auto-populate the model state. + * + * @return void + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + + // Adjust the context to support modal layouts. + if ($layout = $app->input->get('layout')) + { + $this->context .= '.' . $layout; + } + $name = $this->getUserStateFromRequest($this->context . '.filter.name', 'filter_name'); + $this->setState('filter.name', $name); + + $area_type = $this->getUserStateFromRequest($this->context . '.filter.area_type', 'filter_area_type'); + $this->setState('filter.area_type', $area_type); + + $region = $this->getUserStateFromRequest($this->context . '.filter.region', 'filter_region'); + $this->setState('filter.region', $region); + + $sorting = $this->getUserStateFromRequest($this->context . '.filter.sorting', 'filter_sorting', 0, 'int'); + $this->setState('filter.sorting', $sorting); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $created_by = $this->getUserStateFromRequest($this->context . '.filter.created_by', 'filter_created_by', ''); + $this->setState('filter.created_by', $created_by); + + $created = $this->getUserStateFromRequest($this->context . '.filter.created', 'filter_created'); + $this->setState('filter.created', $created); + + // List state information. + parent::populateState($ordering, $direction); + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems() + { + // check in items + $this->checkInNow(); + + // load parent items + $items = parent::getItems(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('area.access', 'com_supportgroups.area.' . (int) $item->id) && $user->authorise('area.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + } + } + + // set values to display color correctly + if (SupportgroupsHelper::checkArray($items)) + { + foreach ($items as $nr => &$item) + { + $item->color = ''; + } + } + + // return items + return $items; + } + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_item table + $query->from($db->quoteName('#__supportgroups_area', 'a')); + + // From the supportgroups_area_type table. + $query->select($db->quoteName('g.name','area_type_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_area_type', 'g') . ' ON (' . $db->quoteName('a.area_type') . ' = ' . $db->quoteName('g.id') . ')'); + + // From the supportgroups_region table. + $query->select($db->quoteName('h.name','region_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_region', 'h') . ' ON (' . $db->quoteName('a.region') . ' = ' . $db->quoteName('h.id') . ')'); + + // Filter by published state + $published = $this->getState('filter.published'); + if (is_numeric($published)) + { + $query->where('a.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(a.published = 0 OR a.published = 1)'); + } + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('a.access = ' . (int) $access); + } + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + // Filter by search. + $search = $this->getState('filter.search'); + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('a.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.name LIKE '.$search.' OR a.area_type LIKE '.$search.' OR g.name LIKE '.$search.' OR a.region LIKE '.$search.' OR h.name LIKE '.$search.' OR a.details LIKE '.$search.')'); + } + } + + // Filter by area_type. + if ($area_type = $this->getState('filter.area_type')) + { + $query->where('a.area_type = ' . $db->quote($db->escape($area_type))); + } + // Filter by region. + if ($region = $this->getState('filter.region')) + { + $query->where('a.region = ' . $db->quote($db->escape($region))); + } + + // Add the list ordering clause. + $orderCol = $this->state->get('list.ordering', 'a.id'); + $orderDirn = $this->state->get('list.direction', 'asc'); + if ($orderCol != '') + { + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + } + + return $query; + } + + /** + * Method to get list export data. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExportData($pks) + { + // setup the query + if (SupportgroupsHelper::checkArray($pks)) + { + // Set a value to know this is exporting method. + $_export = true; + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_area table + $query->from($db->quoteName('#__supportgroups_area', 'a')); + $query->where('a.id IN (' . implode(',',$pks) . ')'); + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + + // Order the results by ordering + $query->order('a.ordering ASC'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('area.access', 'com_supportgroups.area.' . (int) $item->id) && $user->authorise('area.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + // unset the values we don't want exported. + unset($item->asset_id); + unset($item->checked_out); + unset($item->checked_out_time); + } + } + // Add headers to items array. + $headers = $this->getExImPortHeaders(); + if (SupportgroupsHelper::checkObject($headers)) + { + array_unshift($items,$headers); + } + + // set values to display color correctly + if (SupportgroupsHelper::checkArray($items)) + { + foreach ($items as $nr => &$item) + { + $item->color = ''; + } + } + return $items; + } + } + return false; + } + + /** + * Method to get header. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExImPortHeaders() + { + // Get a db connection. + $db = JFactory::getDbo(); + // get the columns + $columns = $db->getTableColumns("#__supportgroups_area"); + if (SupportgroupsHelper::checkArray($columns)) + { + // remove the headers you don't import/export. + unset($columns['asset_id']); + unset($columns['checked_out']); + unset($columns['checked_out_time']); + $headers = new stdClass(); + foreach ($columns as $column => $type) + { + $headers->{$column} = $column; + } + return $headers; + } + return false; + } + + /** + * Method to get a store id based on model configuration state. + * + * @return string A store id. + * + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.id'); + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.ordering'); + $id .= ':' . $this->getState('filter.created_by'); + $id .= ':' . $this->getState('filter.modified_by'); + $id .= ':' . $this->getState('filter.name'); + $id .= ':' . $this->getState('filter.area_type'); + $id .= ':' . $this->getState('filter.region'); + + return parent::getStoreId($id); + } + + /** + * Build an SQL query to checkin all items left checked out longer then a set time. + * + * @return a bool + * + */ + protected function checkInNow() + { + // Get set check in time + $time = JComponentHelper::getParams('com_supportgroups')->get('check_in'); + + if ($time) + { + + // Get a db connection. + $db = JFactory::getDbo(); + // reset query + $query = $db->getQuery(true); + $query->select('*'); + $query->from($db->quoteName('#__supportgroups_area')); + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + // Get Yesterdays date + $date = JFactory::getDate()->modify($time)->toSql(); + // reset query + $query = $db->getQuery(true); + + // Fields to update. + $fields = array( + $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', + $db->quoteName('checked_out') . '=0' + ); + + // Conditions for which records should be updated. + $conditions = array( + $db->quoteName('checked_out') . '!=0', + $db->quoteName('checked_out_time') . '<\''.$date.'\'' + ); + + // Check table + $query->update($db->quoteName('#__supportgroups_area'))->set($fields)->where($conditions); + + $db->setQuery($query); + + $db->execute(); + } + } + + return false; + } +} diff --git a/admin/models/countries.php b/admin/models/countries.php index 8759ca9..e079946 100644 --- a/admin/models/countries.php +++ b/admin/models/countries.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage countries.php @author Llewellyn van der Merwe @@ -134,7 +134,7 @@ class SupportgroupsModelCountries extends JModelList } } - } + } // return items return $items; @@ -198,7 +198,7 @@ class SupportgroupsModelCountries extends JModelList } else { - $search = $db->quote('%' . $db->escape($search, true) . '%'); + $search = $db->quote('%' . $db->escape($search) . '%'); $query->where('(a.name LIKE '.$search.' OR a.currency LIKE '.$search.' OR g.name LIKE '.$search.' OR a.codethree LIKE '.$search.' OR a.codetwo LIKE '.$search.' OR a.alias LIKE '.$search.')'); } } @@ -206,12 +206,12 @@ class SupportgroupsModelCountries extends JModelList // Filter by currency. if ($currency = $this->getState('filter.currency')) { - $query->where('a.currency = ' . $db->quote($db->escape($currency, true))); + $query->where('a.currency = ' . $db->quote($db->escape($currency))); } // Filter by Worldzone. if ($worldzone = $this->getState('filter.worldzone')) { - $query->where('a.worldzone = ' . $db->quote($db->escape($worldzone, true))); + $query->where('a.worldzone = ' . $db->quote($db->escape($worldzone))); } // Add the list ordering clause. @@ -235,6 +235,8 @@ class SupportgroupsModelCountries extends JModelList // setup the query if (SupportgroupsHelper::checkArray($pks)) { + // Set a value to know this is exporting method. + $_export = true; // Get the user object. $user = JFactory::getUser(); // Create a new query object. diff --git a/admin/models/country.php b/admin/models/country.php index 51de7b7..d94a1dc 100644 --- a/admin/models/country.php +++ b/admin/models/country.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage country.php @author Llewellyn van der Merwe @@ -79,7 +79,7 @@ class SupportgroupsModelCountry extends JModelAdmin { if ($item = parent::getItem($pk)) { - if (!empty($item->params)) + if (!empty($item->params) && !is_array($item->params)) { // Convert the params field to an array. $registry = new Registry; @@ -160,6 +160,7 @@ class SupportgroupsModelCountry extends JModelAdmin } // Order the results by ordering + $query->order('a.published ASC'); $query->order('a.ordering ASC'); // Load the items @@ -201,7 +202,8 @@ class SupportgroupsModelCountry extends JModelAdmin * @since 1.6 */ public function getForm($data = array(), $loadData = true) - { // Get the form. + { + // Get the form. $form = $this->loadForm('com_supportgroups.country', 'country', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) @@ -464,6 +466,26 @@ class SupportgroupsModelCountry extends JModelAdmin return true; } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } /** * Method to perform batch operations on an item or a set of items. @@ -580,8 +602,6 @@ class SupportgroupsModelCountry extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('country'); } @@ -606,7 +626,6 @@ class SupportgroupsModelCountry extends JModelAdmin } $newIds = array(); - // Parent exists so let's proceed while (!empty($pks)) { @@ -616,17 +635,11 @@ class SupportgroupsModelCountry extends JModelAdmin $this->table->reset(); // only allow copy if user may edit this item. - if (!$this->user->authorise('country.edit', $contexts[$pk])) - { - // Not fatal error - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); - continue; - } // Check that the row actually exists @@ -636,7 +649,6 @@ class SupportgroupsModelCountry extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -646,7 +658,6 @@ class SupportgroupsModelCountry extends JModelAdmin continue; } } - list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); // insert all set values @@ -729,8 +740,6 @@ class SupportgroupsModelCountry extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('country'); } @@ -754,7 +763,6 @@ class SupportgroupsModelCountry extends JModelAdmin if (!$this->user->authorise('country.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); - return false; } @@ -765,7 +773,6 @@ class SupportgroupsModelCountry extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -782,7 +789,7 @@ class SupportgroupsModelCountry extends JModelAdmin foreach ($values as $key => $value) { // Do special action for access. - if ('access' == $key && strlen($value) > 0) + if ('access' === $key && strlen($value) > 0) { $this->table->$key = $value; } @@ -855,7 +862,7 @@ class SupportgroupsModelCountry extends JModelAdmin } // Alter the name for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { $origTable = clone $this->getTable(); $origTable->load($input->getInt('id')); @@ -880,7 +887,7 @@ class SupportgroupsModelCountry extends JModelAdmin // Automatic handling of alias for empty fields if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) { - if ($data['alias'] == null) + if ($data['alias'] == null || empty($data['alias'])) { if (JFactory::getConfig()->get('unicodeslugs') == 1) { @@ -898,8 +905,7 @@ class SupportgroupsModelCountry extends JModelAdmin $msg = JText::_('COM_SUPPORTGROUPS_COUNTRY_SAVE_WARNING'); } - list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); - $data['alias'] = $alias; + $data['alias'] = $this->_generateNewTitle($data['alias']); if (isset($msg)) { @@ -909,7 +915,7 @@ class SupportgroupsModelCountry extends JModelAdmin } // Alter the uniqe field for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { // Automatic handling of other uniqe fields $uniqeFields = $this->getUniqeFields(); @@ -954,26 +960,49 @@ class SupportgroupsModelCountry extends JModelAdmin } /** - * Method to change the title & alias. + * Method to change the title/s & alias. * - * @param string $alias The alias. - * @param string $title The title. + * @param string $alias The alias. + * @param string/array $title The title. * - * @return array Contains the modified title and alias. + * @return array/string Contains the modified title/s and/or alias. * */ - protected function _generateNewTitle($alias, $title) + protected function _generateNewTitle($alias, $title = null) { - // Alter the title & alias + // Alter the title/s & alias $table = $this->getTable(); while ($table->load(array('alias' => $alias))) { - $title = JString::increment($title); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } $alias = JString::increment($alias, 'dash'); } - - return array($title, $alias); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; } } diff --git a/admin/models/currencies.php b/admin/models/currencies.php index a6ce8e9..386b42f 100644 --- a/admin/models/currencies.php +++ b/admin/models/currencies.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage currencies.php @author Llewellyn van der Merwe @@ -130,7 +130,7 @@ class SupportgroupsModelCurrencies extends JModelList } } - } + } // return items return $items; @@ -190,7 +190,7 @@ class SupportgroupsModelCurrencies extends JModelList } else { - $search = $db->quote('%' . $db->escape($search, true) . '%'); + $search = $db->quote('%' . $db->escape($search) . '%'); $query->where('(a.name LIKE '.$search.' OR a.codethree LIKE '.$search.' OR a.numericcode LIKE '.$search.' OR a.alias LIKE '.$search.')'); } } @@ -217,6 +217,8 @@ class SupportgroupsModelCurrencies extends JModelList // setup the query if (SupportgroupsHelper::checkArray($pks)) { + // Set a value to know this is exporting method. + $_export = true; // Get the user object. $user = JFactory::getUser(); // Create a new query object. diff --git a/admin/models/currency.php b/admin/models/currency.php index 19c5b78..5049264 100644 --- a/admin/models/currency.php +++ b/admin/models/currency.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage currency.php @author Llewellyn van der Merwe @@ -79,7 +79,7 @@ class SupportgroupsModelCurrency extends JModelAdmin { if ($item = parent::getItem($pk)) { - if (!empty($item->params)) + if (!empty($item->params) && !is_array($item->params)) { // Convert the params field to an array. $registry = new Registry; @@ -116,7 +116,8 @@ class SupportgroupsModelCurrency extends JModelAdmin * @since 1.6 */ public function getForm($data = array(), $loadData = true) - { // Get the form. + { + // Get the form. $form = $this->loadForm('com_supportgroups.currency', 'currency', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) @@ -379,6 +380,26 @@ class SupportgroupsModelCurrency extends JModelAdmin return true; } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } /** * Method to perform batch operations on an item or a set of items. @@ -495,8 +516,6 @@ class SupportgroupsModelCurrency extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('currency'); } @@ -521,7 +540,6 @@ class SupportgroupsModelCurrency extends JModelAdmin } $newIds = array(); - // Parent exists so let's proceed while (!empty($pks)) { @@ -531,17 +549,11 @@ class SupportgroupsModelCurrency extends JModelAdmin $this->table->reset(); // only allow copy if user may edit this item. - if (!$this->user->authorise('currency.edit', $contexts[$pk])) - { - // Not fatal error - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); - continue; - } // Check that the row actually exists @@ -551,7 +563,6 @@ class SupportgroupsModelCurrency extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -561,7 +572,6 @@ class SupportgroupsModelCurrency extends JModelAdmin continue; } } - list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); // insert all set values @@ -644,8 +654,6 @@ class SupportgroupsModelCurrency extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('currency'); } @@ -669,7 +677,6 @@ class SupportgroupsModelCurrency extends JModelAdmin if (!$this->user->authorise('currency.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); - return false; } @@ -680,7 +687,6 @@ class SupportgroupsModelCurrency extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -697,7 +703,7 @@ class SupportgroupsModelCurrency extends JModelAdmin foreach ($values as $key => $value) { // Do special action for access. - if ('access' == $key && strlen($value) > 0) + if ('access' === $key && strlen($value) > 0) { $this->table->$key = $value; } @@ -770,7 +776,7 @@ class SupportgroupsModelCurrency extends JModelAdmin } // Alter the name for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { $origTable = clone $this->getTable(); $origTable->load($input->getInt('id')); @@ -795,7 +801,7 @@ class SupportgroupsModelCurrency extends JModelAdmin // Automatic handling of alias for empty fields if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) { - if ($data['alias'] == null) + if ($data['alias'] == null || empty($data['alias'])) { if (JFactory::getConfig()->get('unicodeslugs') == 1) { @@ -813,8 +819,7 @@ class SupportgroupsModelCurrency extends JModelAdmin $msg = JText::_('COM_SUPPORTGROUPS_CURRENCY_SAVE_WARNING'); } - list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); - $data['alias'] = $alias; + $data['alias'] = $this->_generateNewTitle($data['alias']); if (isset($msg)) { @@ -824,7 +829,7 @@ class SupportgroupsModelCurrency extends JModelAdmin } // Alter the uniqe field for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { // Automatic handling of other uniqe fields $uniqeFields = $this->getUniqeFields(); @@ -869,26 +874,49 @@ class SupportgroupsModelCurrency extends JModelAdmin } /** - * Method to change the title & alias. + * Method to change the title/s & alias. * - * @param string $alias The alias. - * @param string $title The title. + * @param string $alias The alias. + * @param string/array $title The title. * - * @return array Contains the modified title and alias. + * @return array/string Contains the modified title/s and/or alias. * */ - protected function _generateNewTitle($alias, $title) + protected function _generateNewTitle($alias, $title = null) { - // Alter the title & alias + // Alter the title/s & alias $table = $this->getTable(); while ($table->load(array('alias' => $alias))) { - $title = JString::increment($title); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } $alias = JString::increment($alias, 'dash'); } - - return array($title, $alias); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; } } diff --git a/admin/models/facilities.php b/admin/models/facilities.php new file mode 100644 index 0000000..927266d --- /dev/null +++ b/admin/models/facilities.php @@ -0,0 +1,394 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the Joomla modellist library +jimport('joomla.application.component.modellist'); + +/** + * Facilities Model + */ +class SupportgroupsModelFacilities extends JModelList +{ + public function __construct($config = array()) + { + if (empty($config['filter_fields'])) + { + $config['filter_fields'] = array( + 'a.id','id', + 'a.published','published', + 'a.ordering','ordering', + 'a.created_by','created_by', + 'a.modified_by','modified_by', + 'a.name','name', + 'a.facility_type','facility_type', + 'a.phone','phone', + 'a.details','details' + ); + } + + parent::__construct($config); + } + + /** + * Method to auto-populate the model state. + * + * @return void + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + + // Adjust the context to support modal layouts. + if ($layout = $app->input->get('layout')) + { + $this->context .= '.' . $layout; + } + $name = $this->getUserStateFromRequest($this->context . '.filter.name', 'filter_name'); + $this->setState('filter.name', $name); + + $facility_type = $this->getUserStateFromRequest($this->context . '.filter.facility_type', 'filter_facility_type'); + $this->setState('filter.facility_type', $facility_type); + + $phone = $this->getUserStateFromRequest($this->context . '.filter.phone', 'filter_phone'); + $this->setState('filter.phone', $phone); + + $details = $this->getUserStateFromRequest($this->context . '.filter.details', 'filter_details'); + $this->setState('filter.details', $details); + + $sorting = $this->getUserStateFromRequest($this->context . '.filter.sorting', 'filter_sorting', 0, 'int'); + $this->setState('filter.sorting', $sorting); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $created_by = $this->getUserStateFromRequest($this->context . '.filter.created_by', 'filter_created_by', ''); + $this->setState('filter.created_by', $created_by); + + $created = $this->getUserStateFromRequest($this->context . '.filter.created', 'filter_created'); + $this->setState('filter.created', $created); + + // List state information. + parent::populateState($ordering, $direction); + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems() + { + // check in items + $this->checkInNow(); + + // load parent items + $items = parent::getItems(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('facility.access', 'com_supportgroups.facility.' . (int) $item->id) && $user->authorise('facility.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + } + } + + // return items + return $items; + } + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_item table + $query->from($db->quoteName('#__supportgroups_facility', 'a')); + + // From the supportgroups_facility_type table. + $query->select($db->quoteName('g.name','facility_type_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_facility_type', 'g') . ' ON (' . $db->quoteName('a.facility_type') . ' = ' . $db->quoteName('g.id') . ')'); + + // Filter by published state + $published = $this->getState('filter.published'); + if (is_numeric($published)) + { + $query->where('a.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(a.published = 0 OR a.published = 1)'); + } + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('a.access = ' . (int) $access); + } + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + // Filter by search. + $search = $this->getState('filter.search'); + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('a.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.name LIKE '.$search.' OR a.facility_type LIKE '.$search.' OR g.name LIKE '.$search.' OR a.phone LIKE '.$search.' OR a.details LIKE '.$search.')'); + } + } + + // Filter by facility_type. + if ($facility_type = $this->getState('filter.facility_type')) + { + $query->where('a.facility_type = ' . $db->quote($db->escape($facility_type))); + } + + // Add the list ordering clause. + $orderCol = $this->state->get('list.ordering', 'a.id'); + $orderDirn = $this->state->get('list.direction', 'asc'); + if ($orderCol != '') + { + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + } + + return $query; + } + + /** + * Method to get list export data. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExportData($pks) + { + // setup the query + if (SupportgroupsHelper::checkArray($pks)) + { + // Set a value to know this is exporting method. + $_export = true; + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_facility table + $query->from($db->quoteName('#__supportgroups_facility', 'a')); + $query->where('a.id IN (' . implode(',',$pks) . ')'); + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + + // Order the results by ordering + $query->order('a.ordering ASC'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('facility.access', 'com_supportgroups.facility.' . (int) $item->id) && $user->authorise('facility.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + // unset the values we don't want exported. + unset($item->asset_id); + unset($item->checked_out); + unset($item->checked_out_time); + } + } + // Add headers to items array. + $headers = $this->getExImPortHeaders(); + if (SupportgroupsHelper::checkObject($headers)) + { + array_unshift($items,$headers); + } + return $items; + } + } + return false; + } + + /** + * Method to get header. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExImPortHeaders() + { + // Get a db connection. + $db = JFactory::getDbo(); + // get the columns + $columns = $db->getTableColumns("#__supportgroups_facility"); + if (SupportgroupsHelper::checkArray($columns)) + { + // remove the headers you don't import/export. + unset($columns['asset_id']); + unset($columns['checked_out']); + unset($columns['checked_out_time']); + $headers = new stdClass(); + foreach ($columns as $column => $type) + { + $headers->{$column} = $column; + } + return $headers; + } + return false; + } + + /** + * Method to get a store id based on model configuration state. + * + * @return string A store id. + * + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.id'); + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.ordering'); + $id .= ':' . $this->getState('filter.created_by'); + $id .= ':' . $this->getState('filter.modified_by'); + $id .= ':' . $this->getState('filter.name'); + $id .= ':' . $this->getState('filter.facility_type'); + $id .= ':' . $this->getState('filter.phone'); + $id .= ':' . $this->getState('filter.details'); + + return parent::getStoreId($id); + } + + /** + * Build an SQL query to checkin all items left checked out longer then a set time. + * + * @return a bool + * + */ + protected function checkInNow() + { + // Get set check in time + $time = JComponentHelper::getParams('com_supportgroups')->get('check_in'); + + if ($time) + { + + // Get a db connection. + $db = JFactory::getDbo(); + // reset query + $query = $db->getQuery(true); + $query->select('*'); + $query->from($db->quoteName('#__supportgroups_facility')); + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + // Get Yesterdays date + $date = JFactory::getDate()->modify($time)->toSql(); + // reset query + $query = $db->getQuery(true); + + // Fields to update. + $fields = array( + $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', + $db->quoteName('checked_out') . '=0' + ); + + // Conditions for which records should be updated. + $conditions = array( + $db->quoteName('checked_out') . '!=0', + $db->quoteName('checked_out_time') . '<\''.$date.'\'' + ); + + // Check table + $query->update($db->quoteName('#__supportgroups_facility'))->set($fields)->where($conditions); + + $db->setQuery($query); + + $db->execute(); + } + } + + return false; + } +} diff --git a/admin/models/facility.php b/admin/models/facility.php new file mode 100644 index 0000000..fef042d --- /dev/null +++ b/admin/models/facility.php @@ -0,0 +1,1020 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla modelform library +jimport('joomla.application.component.modeladmin'); + +/** + * Supportgroups Facility Model + */ +class SupportgroupsModelFacility extends JModelAdmin +{ + /** + * @var string The prefix to use with controller messages. + * @since 1.6 + */ + protected $text_prefix = 'COM_SUPPORTGROUPS'; + + /** + * The type alias for this content type. + * + * @var string + * @since 3.2 + */ + public $typeAlias = 'com_supportgroups.facility'; + + /** + * Returns a Table object, always creating it + * + * @param type $type The table type to instantiate + * @param string $prefix A prefix for the table class name. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return JTable A database object + * + * @since 1.6 + */ + public function getTable($type = 'facility', $prefix = 'SupportgroupsTable', $config = array()) + { + return JTable::getInstance($type, $prefix, $config); + } + + /** + * Method to get a single record. + * + * @param integer $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.6 + */ + public function getItem($pk = null) + { + if ($item = parent::getItem($pk)) + { + if (!empty($item->params) && !is_array($item->params)) + { + // Convert the params field to an array. + $registry = new Registry; + $registry->loadString($item->params); + $item->params = $registry->toArray(); + } + + if (!empty($item->metadata)) + { + // Convert the metadata field to an array. + $registry = new Registry; + $registry->loadString($item->metadata); + $item->metadata = $registry->toArray(); + } + + if (!empty($item->id)) + { + $item->tags = new JHelperTags; + $item->tags->getTagIds($item->id, 'com_supportgroups.facility'); + } + } + + return $item; + } + + /** + * Method to get the record form. + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 1.6 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_supportgroups.facility', 'facility', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0, 'INT'); + } + // The back end uses id so we use that the rest of the time and set it to 0 by default. + else + { + $id = $jinput->get('id', 0, 'INT'); + } + + $user = JFactory::getUser(); + + // Check for existing item. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('facility.edit.state', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.state', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + // If this is a new item insure the greated by is set. + if (0 == $id) + { + // Set the created_by to this user + $form->setValue('created_by', null, $user->id); + } + // Modify the form based on Edit Creaded By access controls. + if ($id != 0 && (!$user->authorise('facility.edit.created_by', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.created_by', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('created_by', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('created_by', 'readonly', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created_by', 'filter', 'unset'); + } + // Modify the form based on Edit Creaded Date access controls. + if ($id != 0 && (!$user->authorise('facility.edit.created', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.created', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('created', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created', 'filter', 'unset'); + } + // Modify the form based on Edit Name access controls. + if ($id != 0 && (!$user->authorise('facility.edit.name', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.name', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('name', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('name', 'readonly', 'true'); + if (!$form->getValue('name')) + { + // Disable fields while saving. + $form->setFieldAttribute('name', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('name', 'required', 'false'); + } + } + // Modify the form based on Edit Facility Type access controls. + if ($id != 0 && (!$user->authorise('facility.edit.facility_type', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.facility_type', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('facility_type', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('facility_type', 'readonly', 'true'); + if (!$form->getValue('facility_type')) + { + // Disable fields while saving. + $form->setFieldAttribute('facility_type', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('facility_type', 'required', 'false'); + } + } + // Modify the form based on Edit Phone access controls. + if ($id != 0 && (!$user->authorise('facility.edit.phone', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.phone', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('phone', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('phone', 'readonly', 'true'); + if (!$form->getValue('phone')) + { + // Disable fields while saving. + $form->setFieldAttribute('phone', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('phone', 'required', 'false'); + } + } + // Modify the form based on Edit Details access controls. + if ($id != 0 && (!$user->authorise('facility.edit.details', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.details', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('details', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('details', 'readonly', 'true'); + if (!$form->getValue('details')) + { + // Disable fields while saving. + $form->setFieldAttribute('details', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('details', 'required', 'false'); + } + } + // Modify the form based on Edit Note Set Marker access controls. + if ($id != 0 && (!$user->authorise('facility.edit.note_set_marker', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.note_set_marker', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('note_set_marker', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('note_set_marker', 'readonly', 'true'); + if (!$form->getValue('note_set_marker')) + { + // Disable fields while saving. + $form->setFieldAttribute('note_set_marker', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('note_set_marker', 'required', 'false'); + } + } + // Modify the form based on Edit Alias access controls. + if ($id != 0 && (!$user->authorise('facility.edit.alias', 'com_supportgroups.facility.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility.edit.alias', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('alias', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('alias', 'readonly', 'true'); + if (!$form->getValue('alias')) + { + // Disable fields while saving. + $form->setFieldAttribute('alias', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('alias', 'required', 'false'); + } + } + // Only load these values if no id is found + if (0 == $id) + { + // Set redirected field name + $redirectedField = $jinput->get('ref', null, 'STRING'); + // Set redirected field value + $redirectedValue = $jinput->get('refid', 0, 'INT'); + if (0 != $redirectedValue && $redirectedField) + { + // Now set the local-redirected field default value + $form->setValue($redirectedField, null, $redirectedValue); + } + } + + return $form; + } + + /** + * Method to get the script that have to be included on the form + * + * @return string script files + */ + public function getScript() + { + return 'administrator/components/com_supportgroups/models/forms/facility.js'; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->published != -2) + { + return; + } + + $user = JFactory::getUser(); + // The record has been set. Check the record permissions. + return $user->authorise('facility.delete', 'com_supportgroups.facility.' . (int) $record->id); + } + return false; + } + + /** + * Method to test whether a record can have its state edited. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + $recordId = (!empty($record->id)) ? $record->id : 0; + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('facility.edit.state', 'com_supportgroups.facility.' . (int) $recordId); + if (!$permission && !is_null($permission)) + { + return false; + } + } + // In the absense of better information, revert to the component permissions. + return $user->authorise('facility.edit.state', 'com_supportgroups'); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * @since 2.5 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // Check specific edit permission then general edit permission. + $user = JFactory::getUser(); + + return $user->authorise('facility.edit', 'com_supportgroups.facility.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('facility.edit', 'com_supportgroups'); + } + + /** + * Prepare and sanitise the table data prior to saving. + * + * @param JTable $table A JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if (isset($table->name)) + { + $table->name = htmlspecialchars_decode($table->name, ENT_QUOTES); + } + + if (isset($table->alias) && empty($table->alias)) + { + $table->generateAlias(); + } + + if (empty($table->id)) + { + $table->created = $date->toSql(); + // set the user + if ($table->created_by == 0 || empty($table->created_by)) + { + $table->created_by = $user->id; + } + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select('MAX(ordering)') + ->from($db->quoteName('#__supportgroups_facility')); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + else + { + $table->modified = $date->toSql(); + $table->modified_by = $user->id; + } + + if (!empty($table->id)) + { + // Increment the items version number. + $table->version++; + } + } + + /** + * Method to get the data that should be injected in the form. + * + * @return mixed The data for the form. + * + * @since 1.6 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $data = JFactory::getApplication()->getUserState('com_supportgroups.edit.facility.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get the unique fields of this table. + * + * @return mixed An array of field names, boolean false if none is set. + * + * @since 3.0 + */ + protected function getUniqeFields() + { + return false; + } + + /** + * Method to delete one or more records. + * + * @param array &$pks An array of record primary keys. + * + * @return boolean True if successful, false if an error occurs. + * + * @since 12.2 + */ + public function delete(&$pks) + { + if (!parent::delete($pks)) + { + return false; + } + + return true; + } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } + + /** + * Method to perform batch operations on an item or a set of items. + * + * @param array $commands An array of commands to perform. + * @param array $pks An array of item ids. + * @param array $contexts An array of item contexts. + * + * @return boolean Returns true on success, false on failure. + * + * @since 12.2 + */ + public function batch($commands, $pks, $contexts) + { + // Sanitize ids. + $pks = array_unique($pks); + JArrayHelper::toInteger($pks); + + // Remove any values of zero. + if (array_search(0, $pks, true)) + { + unset($pks[array_search(0, $pks, true)]); + } + + if (empty($pks)) + { + $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); + return false; + } + + $done = false; + + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = SupportgroupsHelper::getActions('facility'); + $this->batchSet = true; + + if (!$this->canDo->get('core.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + return false; + } + + if ($this->type == false) + { + $type = new JUcmType; + $this->type = $type->getTypeByAlias($this->typeAlias); + } + + $this->tagsObserver = $this->table->getObserverOfClass('JTableObserverTags'); + + if (!empty($commands['move_copy'])) + { + $cmd = JArrayHelper::getValue($commands, 'move_copy', 'c'); + + if ($cmd == 'c') + { + $result = $this->batchCopy($commands, $pks, $contexts); + + if (is_array($result)) + { + foreach ($result as $old => $new) + { + $contexts[$new] = $contexts[$old]; + } + $pks = array_values($result); + } + else + { + return false; + } + } + elseif ($cmd == 'm' && !$this->batchMove($commands, $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (!$done) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + + return false; + } + + // Clear the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch copy items to a new category or current. + * + * @param integer $values The new values. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return mixed An array of new IDs on success, boolean false on failure. + * + * @since 12.2 + */ + protected function batchCopy($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->canDo = SupportgroupsHelper::getActions('facility'); + } + + if (!$this->canDo->get('facility.create') && !$this->canDo->get('facility.batch')) + { + return false; + } + + // get list of uniqe fields + $uniqeFields = $this->getUniqeFields(); + // remove move_copy from array + unset($values['move_copy']); + + // make sure published is set + if (!isset($values['published'])) + { + $values['published'] = 0; + } + elseif (isset($values['published']) && !$this->canDo->get('facility.edit.state')) + { + $values['published'] = 0; + } + + $newIds = array(); + // Parent exists so let's proceed + while (!empty($pks)) + { + // Pop the first ID off the stack + $pk = array_shift($pks); + + $this->table->reset(); + + // only allow copy if user may edit this item. + if (!$this->user->authorise('facility.edit', $contexts[$pk])) + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); + + // insert all set values + if (SupportgroupsHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + if (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + // update all uniqe fields + if (SupportgroupsHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $this->table->$uniqeField = $this->generateUniqe($uniqeField,$this->table->$uniqeField); + } + } + + // Reset the ID because we are making a copy + $this->table->id = 0; + + // TODO: Deal with ordering? + // $this->table->ordering = 1; + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + + // Get the new item ID + $newId = $this->table->get('id'); + + // Add the new ID to the array + $newIds[$pk] = $newId; + } + + // Clean the cache + $this->cleanCache(); + + return $newIds; + } + + /** + * Batch move items to a new category + * + * @param integer $value The new category ID. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 12.2 + */ + protected function batchMove($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->canDo = SupportgroupsHelper::getActions('facility'); + } + + if (!$this->canDo->get('facility.edit') && !$this->canDo->get('facility.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // make sure published only updates if user has the permission. + if (isset($values['published']) && !$this->canDo->get('facility.edit.state')) + { + unset($values['published']); + } + // remove move_copy from array + unset($values['move_copy']); + + // Parent exists so we proceed + foreach ($pks as $pk) + { + if (!$this->user->authorise('facility.edit', $contexts[$pk])) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + // insert all set values. + if (SupportgroupsHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + // Do special action for access. + if ('access' === $key && strlen($value) > 0) + { + $this->table->$key = $value; + } + elseif (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + $input = JFactory::getApplication()->input; + $filter = JFilterInput::getInstance(); + + // set the metadata to the Item Data + if (isset($data['metadata']) && isset($data['metadata']['author'])) + { + $data['metadata']['author'] = $filter->clean($data['metadata']['author'], 'TRIM'); + + $metadata = new JRegistry; + $metadata->loadArray($data['metadata']); + $data['metadata'] = (string) $metadata; + } + + // Set the Params Items to data + if (isset($data['params']) && is_array($data['params'])) + { + $params = new JRegistry; + $params->loadArray($data['params']); + $data['params'] = (string) $params; + } + + // Alter the name for save as copy + if ($input->get('task') === 'save2copy') + { + $origTable = clone $this->getTable(); + $origTable->load($input->getInt('id')); + + if ($data['name'] == $origTable->name) + { + list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); + $data['name'] = $name; + $data['alias'] = $alias; + } + else + { + if ($data['alias'] == $origTable->alias) + { + $data['alias'] = ''; + } + } + + $data['published'] = 0; + } + + // Automatic handling of alias for empty fields + if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) + { + if ($data['alias'] == null || empty($data['alias'])) + { + if (JFactory::getConfig()->get('unicodeslugs') == 1) + { + $data['alias'] = JFilterOutput::stringURLUnicodeSlug($data['name']); + } + else + { + $data['alias'] = JFilterOutput::stringURLSafe($data['name']); + } + + $table = JTable::getInstance('facility', 'supportgroupsTable'); + + if ($table->load(array('alias' => $data['alias'])) && ($table->id != $data['id'] || $data['id'] == 0)) + { + $msg = JText::_('COM_SUPPORTGROUPS_FACILITY_SAVE_WARNING'); + } + + $data['alias'] = $this->_generateNewTitle($data['alias']); + + if (isset($msg)) + { + JFactory::getApplication()->enqueueMessage($msg, 'warning'); + } + } + } + + // Alter the uniqe field for save as copy + if ($input->get('task') === 'save2copy') + { + // Automatic handling of other uniqe fields + $uniqeFields = $this->getUniqeFields(); + if (SupportgroupsHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $data[$uniqeField] = $this->generateUniqe($uniqeField,$data[$uniqeField]); + } + } + } + + if (parent::save($data)) + { + return true; + } + return false; + } + + /** + * Method to generate a uniqe value. + * + * @param string $field name. + * @param string $value data. + * + * @return string New value. + * + * @since 3.0 + */ + protected function generateUniqe($field,$value) + { + + // set field value uniqe + $table = $this->getTable(); + + while ($table->load(array($field => $value))) + { + $value = JString::increment($value); + } + + return $value; + } + + /** + * Method to change the title/s & alias. + * + * @param string $alias The alias. + * @param string/array $title The title. + * + * @return array/string Contains the modified title/s and/or alias. + * + */ + protected function _generateNewTitle($alias, $title = null) + { + + // Alter the title/s & alias + $table = $this->getTable(); + + while ($table->load(array('alias' => $alias))) + { + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } + $alias = JString::increment($alias, 'dash'); + } + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; + } +} diff --git a/admin/models/facility_type.php b/admin/models/facility_type.php new file mode 100644 index 0000000..08e85ce --- /dev/null +++ b/admin/models/facility_type.php @@ -0,0 +1,956 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla modelform library +jimport('joomla.application.component.modeladmin'); + +/** + * Supportgroups Facility_type Model + */ +class SupportgroupsModelFacility_type extends JModelAdmin +{ + /** + * @var string The prefix to use with controller messages. + * @since 1.6 + */ + protected $text_prefix = 'COM_SUPPORTGROUPS'; + + /** + * The type alias for this content type. + * + * @var string + * @since 3.2 + */ + public $typeAlias = 'com_supportgroups.facility_type'; + + /** + * Returns a Table object, always creating it + * + * @param type $type The table type to instantiate + * @param string $prefix A prefix for the table class name. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return JTable A database object + * + * @since 1.6 + */ + public function getTable($type = 'facility_type', $prefix = 'SupportgroupsTable', $config = array()) + { + return JTable::getInstance($type, $prefix, $config); + } + + /** + * Method to get a single record. + * + * @param integer $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.6 + */ + public function getItem($pk = null) + { + if ($item = parent::getItem($pk)) + { + if (!empty($item->params) && !is_array($item->params)) + { + // Convert the params field to an array. + $registry = new Registry; + $registry->loadString($item->params); + $item->params = $registry->toArray(); + } + + if (!empty($item->metadata)) + { + // Convert the metadata field to an array. + $registry = new Registry; + $registry->loadString($item->metadata); + $item->metadata = $registry->toArray(); + } + + if (!empty($item->id)) + { + $item->tags = new JHelperTags; + $item->tags->getTagIds($item->id, 'com_supportgroups.facility_type'); + } + } + + return $item; + } + + /** + * Method to get the record form. + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 1.6 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_supportgroups.facility_type', 'facility_type', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0, 'INT'); + } + // The back end uses id so we use that the rest of the time and set it to 0 by default. + else + { + $id = $jinput->get('id', 0, 'INT'); + } + + $user = JFactory::getUser(); + + // Check for existing item. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('facility_type.edit.state', 'com_supportgroups.facility_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility_type.edit.state', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + // If this is a new item insure the greated by is set. + if (0 == $id) + { + // Set the created_by to this user + $form->setValue('created_by', null, $user->id); + } + // Modify the form based on Edit Creaded By access controls. + if ($id != 0 && (!$user->authorise('facility_type.edit.created_by', 'com_supportgroups.facility_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility_type.edit.created_by', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('created_by', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('created_by', 'readonly', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created_by', 'filter', 'unset'); + } + // Modify the form based on Edit Creaded Date access controls. + if ($id != 0 && (!$user->authorise('facility_type.edit.created', 'com_supportgroups.facility_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility_type.edit.created', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('created', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created', 'filter', 'unset'); + } + // Modify the form based on Edit Name access controls. + if ($id != 0 && (!$user->authorise('facility_type.edit.name', 'com_supportgroups.facility_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility_type.edit.name', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('name', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('name', 'readonly', 'true'); + if (!$form->getValue('name')) + { + // Disable fields while saving. + $form->setFieldAttribute('name', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('name', 'required', 'false'); + } + } + // Modify the form based on Edit Alias access controls. + if ($id != 0 && (!$user->authorise('facility_type.edit.alias', 'com_supportgroups.facility_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('facility_type.edit.alias', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('alias', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('alias', 'readonly', 'true'); + if (!$form->getValue('alias')) + { + // Disable fields while saving. + $form->setFieldAttribute('alias', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('alias', 'required', 'false'); + } + } + // Only load these values if no id is found + if (0 == $id) + { + // Set redirected field name + $redirectedField = $jinput->get('ref', null, 'STRING'); + // Set redirected field value + $redirectedValue = $jinput->get('refid', 0, 'INT'); + if (0 != $redirectedValue && $redirectedField) + { + // Now set the local-redirected field default value + $form->setValue($redirectedField, null, $redirectedValue); + } + } + + return $form; + } + + /** + * Method to get the script that have to be included on the form + * + * @return string script files + */ + public function getScript() + { + return 'administrator/components/com_supportgroups/models/forms/facility_type.js'; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->published != -2) + { + return; + } + + $user = JFactory::getUser(); + // The record has been set. Check the record permissions. + return $user->authorise('facility_type.delete', 'com_supportgroups.facility_type.' . (int) $record->id); + } + return false; + } + + /** + * Method to test whether a record can have its state edited. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + $recordId = (!empty($record->id)) ? $record->id : 0; + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('facility_type.edit.state', 'com_supportgroups.facility_type.' . (int) $recordId); + if (!$permission && !is_null($permission)) + { + return false; + } + } + // In the absense of better information, revert to the component permissions. + return $user->authorise('facility_type.edit.state', 'com_supportgroups'); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * @since 2.5 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // Check specific edit permission then general edit permission. + $user = JFactory::getUser(); + + return $user->authorise('facility_type.edit', 'com_supportgroups.facility_type.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('facility_type.edit', 'com_supportgroups'); + } + + /** + * Prepare and sanitise the table data prior to saving. + * + * @param JTable $table A JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if (isset($table->name)) + { + $table->name = htmlspecialchars_decode($table->name, ENT_QUOTES); + } + + if (isset($table->alias) && empty($table->alias)) + { + $table->generateAlias(); + } + + if (empty($table->id)) + { + $table->created = $date->toSql(); + // set the user + if ($table->created_by == 0 || empty($table->created_by)) + { + $table->created_by = $user->id; + } + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select('MAX(ordering)') + ->from($db->quoteName('#__supportgroups_facility_type')); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + else + { + $table->modified = $date->toSql(); + $table->modified_by = $user->id; + } + + if (!empty($table->id)) + { + // Increment the items version number. + $table->version++; + } + } + + /** + * Method to get the data that should be injected in the form. + * + * @return mixed The data for the form. + * + * @since 1.6 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $data = JFactory::getApplication()->getUserState('com_supportgroups.edit.facility_type.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get the unique fields of this table. + * + * @return mixed An array of field names, boolean false if none is set. + * + * @since 3.0 + */ + protected function getUniqeFields() + { + return false; + } + + /** + * Method to delete one or more records. + * + * @param array &$pks An array of record primary keys. + * + * @return boolean True if successful, false if an error occurs. + * + * @since 12.2 + */ + public function delete(&$pks) + { + if (!parent::delete($pks)) + { + return false; + } + + return true; + } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } + + /** + * Method to perform batch operations on an item or a set of items. + * + * @param array $commands An array of commands to perform. + * @param array $pks An array of item ids. + * @param array $contexts An array of item contexts. + * + * @return boolean Returns true on success, false on failure. + * + * @since 12.2 + */ + public function batch($commands, $pks, $contexts) + { + // Sanitize ids. + $pks = array_unique($pks); + JArrayHelper::toInteger($pks); + + // Remove any values of zero. + if (array_search(0, $pks, true)) + { + unset($pks[array_search(0, $pks, true)]); + } + + if (empty($pks)) + { + $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); + return false; + } + + $done = false; + + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = SupportgroupsHelper::getActions('facility_type'); + $this->batchSet = true; + + if (!$this->canDo->get('core.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + return false; + } + + if ($this->type == false) + { + $type = new JUcmType; + $this->type = $type->getTypeByAlias($this->typeAlias); + } + + $this->tagsObserver = $this->table->getObserverOfClass('JTableObserverTags'); + + if (!empty($commands['move_copy'])) + { + $cmd = JArrayHelper::getValue($commands, 'move_copy', 'c'); + + if ($cmd == 'c') + { + $result = $this->batchCopy($commands, $pks, $contexts); + + if (is_array($result)) + { + foreach ($result as $old => $new) + { + $contexts[$new] = $contexts[$old]; + } + $pks = array_values($result); + } + else + { + return false; + } + } + elseif ($cmd == 'm' && !$this->batchMove($commands, $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (!$done) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + + return false; + } + + // Clear the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch copy items to a new category or current. + * + * @param integer $values The new values. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return mixed An array of new IDs on success, boolean false on failure. + * + * @since 12.2 + */ + protected function batchCopy($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->canDo = SupportgroupsHelper::getActions('facility_type'); + } + + if (!$this->canDo->get('facility_type.create') && !$this->canDo->get('facility_type.batch')) + { + return false; + } + + // get list of uniqe fields + $uniqeFields = $this->getUniqeFields(); + // remove move_copy from array + unset($values['move_copy']); + + // make sure published is set + if (!isset($values['published'])) + { + $values['published'] = 0; + } + elseif (isset($values['published']) && !$this->canDo->get('facility_type.edit.state')) + { + $values['published'] = 0; + } + + $newIds = array(); + // Parent exists so let's proceed + while (!empty($pks)) + { + // Pop the first ID off the stack + $pk = array_shift($pks); + + $this->table->reset(); + + // only allow copy if user may edit this item. + if (!$this->user->authorise('facility_type.edit', $contexts[$pk])) + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); + + // insert all set values + if (SupportgroupsHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + if (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + // update all uniqe fields + if (SupportgroupsHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $this->table->$uniqeField = $this->generateUniqe($uniqeField,$this->table->$uniqeField); + } + } + + // Reset the ID because we are making a copy + $this->table->id = 0; + + // TODO: Deal with ordering? + // $this->table->ordering = 1; + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + + // Get the new item ID + $newId = $this->table->get('id'); + + // Add the new ID to the array + $newIds[$pk] = $newId; + } + + // Clean the cache + $this->cleanCache(); + + return $newIds; + } + + /** + * Batch move items to a new category + * + * @param integer $value The new category ID. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 12.2 + */ + protected function batchMove($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->canDo = SupportgroupsHelper::getActions('facility_type'); + } + + if (!$this->canDo->get('facility_type.edit') && !$this->canDo->get('facility_type.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // make sure published only updates if user has the permission. + if (isset($values['published']) && !$this->canDo->get('facility_type.edit.state')) + { + unset($values['published']); + } + // remove move_copy from array + unset($values['move_copy']); + + // Parent exists so we proceed + foreach ($pks as $pk) + { + if (!$this->user->authorise('facility_type.edit', $contexts[$pk])) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + // insert all set values. + if (SupportgroupsHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + // Do special action for access. + if ('access' === $key && strlen($value) > 0) + { + $this->table->$key = $value; + } + elseif (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + $input = JFactory::getApplication()->input; + $filter = JFilterInput::getInstance(); + + // set the metadata to the Item Data + if (isset($data['metadata']) && isset($data['metadata']['author'])) + { + $data['metadata']['author'] = $filter->clean($data['metadata']['author'], 'TRIM'); + + $metadata = new JRegistry; + $metadata->loadArray($data['metadata']); + $data['metadata'] = (string) $metadata; + } + + // Set the Params Items to data + if (isset($data['params']) && is_array($data['params'])) + { + $params = new JRegistry; + $params->loadArray($data['params']); + $data['params'] = (string) $params; + } + + // Alter the name for save as copy + if ($input->get('task') === 'save2copy') + { + $origTable = clone $this->getTable(); + $origTable->load($input->getInt('id')); + + if ($data['name'] == $origTable->name) + { + list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); + $data['name'] = $name; + $data['alias'] = $alias; + } + else + { + if ($data['alias'] == $origTable->alias) + { + $data['alias'] = ''; + } + } + + $data['published'] = 0; + } + + // Automatic handling of alias for empty fields + if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) + { + if ($data['alias'] == null || empty($data['alias'])) + { + if (JFactory::getConfig()->get('unicodeslugs') == 1) + { + $data['alias'] = JFilterOutput::stringURLUnicodeSlug($data['name']); + } + else + { + $data['alias'] = JFilterOutput::stringURLSafe($data['name']); + } + + $table = JTable::getInstance('facility_type', 'supportgroupsTable'); + + if ($table->load(array('alias' => $data['alias'])) && ($table->id != $data['id'] || $data['id'] == 0)) + { + $msg = JText::_('COM_SUPPORTGROUPS_FACILITY_TYPE_SAVE_WARNING'); + } + + $data['alias'] = $this->_generateNewTitle($data['alias']); + + if (isset($msg)) + { + JFactory::getApplication()->enqueueMessage($msg, 'warning'); + } + } + } + + // Alter the uniqe field for save as copy + if ($input->get('task') === 'save2copy') + { + // Automatic handling of other uniqe fields + $uniqeFields = $this->getUniqeFields(); + if (SupportgroupsHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $data[$uniqeField] = $this->generateUniqe($uniqeField,$data[$uniqeField]); + } + } + } + + if (parent::save($data)) + { + return true; + } + return false; + } + + /** + * Method to generate a uniqe value. + * + * @param string $field name. + * @param string $value data. + * + * @return string New value. + * + * @since 3.0 + */ + protected function generateUniqe($field,$value) + { + + // set field value uniqe + $table = $this->getTable(); + + while ($table->load(array($field => $value))) + { + $value = JString::increment($value); + } + + return $value; + } + + /** + * Method to change the title/s & alias. + * + * @param string $alias The alias. + * @param string/array $title The title. + * + * @return array/string Contains the modified title/s and/or alias. + * + */ + protected function _generateNewTitle($alias, $title = null) + { + + // Alter the title/s & alias + $table = $this->getTable(); + + while ($table->load(array('alias' => $alias))) + { + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } + $alias = JString::increment($alias, 'dash'); + } + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; + } +} diff --git a/admin/models/facility_types.php b/admin/models/facility_types.php new file mode 100644 index 0000000..e61a44f --- /dev/null +++ b/admin/models/facility_types.php @@ -0,0 +1,370 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the Joomla modellist library +jimport('joomla.application.component.modellist'); + +/** + * Facility_types Model + */ +class SupportgroupsModelFacility_types extends JModelList +{ + public function __construct($config = array()) + { + if (empty($config['filter_fields'])) + { + $config['filter_fields'] = array( + 'a.id','id', + 'a.published','published', + 'a.ordering','ordering', + 'a.created_by','created_by', + 'a.modified_by','modified_by', + 'a.name','name' + ); + } + + parent::__construct($config); + } + + /** + * Method to auto-populate the model state. + * + * @return void + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + + // Adjust the context to support modal layouts. + if ($layout = $app->input->get('layout')) + { + $this->context .= '.' . $layout; + } + $name = $this->getUserStateFromRequest($this->context . '.filter.name', 'filter_name'); + $this->setState('filter.name', $name); + + $sorting = $this->getUserStateFromRequest($this->context . '.filter.sorting', 'filter_sorting', 0, 'int'); + $this->setState('filter.sorting', $sorting); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $created_by = $this->getUserStateFromRequest($this->context . '.filter.created_by', 'filter_created_by', ''); + $this->setState('filter.created_by', $created_by); + + $created = $this->getUserStateFromRequest($this->context . '.filter.created', 'filter_created'); + $this->setState('filter.created', $created); + + // List state information. + parent::populateState($ordering, $direction); + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems() + { + // check in items + $this->checkInNow(); + + // load parent items + $items = parent::getItems(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('facility_type.access', 'com_supportgroups.facility_type.' . (int) $item->id) && $user->authorise('facility_type.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + } + } + + // return items + return $items; + } + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_item table + $query->from($db->quoteName('#__supportgroups_facility_type', 'a')); + + // Filter by published state + $published = $this->getState('filter.published'); + if (is_numeric($published)) + { + $query->where('a.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(a.published = 0 OR a.published = 1)'); + } + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('a.access = ' . (int) $access); + } + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + // Filter by search. + $search = $this->getState('filter.search'); + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('a.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.name LIKE '.$search.')'); + } + } + + + // Add the list ordering clause. + $orderCol = $this->state->get('list.ordering', 'a.id'); + $orderDirn = $this->state->get('list.direction', 'asc'); + if ($orderCol != '') + { + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + } + + return $query; + } + + /** + * Method to get list export data. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExportData($pks) + { + // setup the query + if (SupportgroupsHelper::checkArray($pks)) + { + // Set a value to know this is exporting method. + $_export = true; + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the supportgroups_facility_type table + $query->from($db->quoteName('#__supportgroups_facility_type', 'a')); + $query->where('a.id IN (' . implode(',',$pks) . ')'); + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + + // Order the results by ordering + $query->order('a.ordering ASC'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('facility_type.access', 'com_supportgroups.facility_type.' . (int) $item->id) && $user->authorise('facility_type.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + // unset the values we don't want exported. + unset($item->asset_id); + unset($item->checked_out); + unset($item->checked_out_time); + } + } + // Add headers to items array. + $headers = $this->getExImPortHeaders(); + if (SupportgroupsHelper::checkObject($headers)) + { + array_unshift($items,$headers); + } + return $items; + } + } + return false; + } + + /** + * Method to get header. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExImPortHeaders() + { + // Get a db connection. + $db = JFactory::getDbo(); + // get the columns + $columns = $db->getTableColumns("#__supportgroups_facility_type"); + if (SupportgroupsHelper::checkArray($columns)) + { + // remove the headers you don't import/export. + unset($columns['asset_id']); + unset($columns['checked_out']); + unset($columns['checked_out_time']); + $headers = new stdClass(); + foreach ($columns as $column => $type) + { + $headers->{$column} = $column; + } + return $headers; + } + return false; + } + + /** + * Method to get a store id based on model configuration state. + * + * @return string A store id. + * + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.id'); + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.ordering'); + $id .= ':' . $this->getState('filter.created_by'); + $id .= ':' . $this->getState('filter.modified_by'); + $id .= ':' . $this->getState('filter.name'); + + return parent::getStoreId($id); + } + + /** + * Build an SQL query to checkin all items left checked out longer then a set time. + * + * @return a bool + * + */ + protected function checkInNow() + { + // Get set check in time + $time = JComponentHelper::getParams('com_supportgroups')->get('check_in'); + + if ($time) + { + + // Get a db connection. + $db = JFactory::getDbo(); + // reset query + $query = $db->getQuery(true); + $query->select('*'); + $query->from($db->quoteName('#__supportgroups_facility_type')); + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + // Get Yesterdays date + $date = JFactory::getDate()->modify($time)->toSql(); + // reset query + $query = $db->getQuery(true); + + // Fields to update. + $fields = array( + $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', + $db->quoteName('checked_out') . '=0' + ); + + // Conditions for which records should be updated. + $conditions = array( + $db->quoteName('checked_out') . '!=0', + $db->quoteName('checked_out_time') . '<\''.$date.'\'' + ); + + // Check table + $query->update($db->quoteName('#__supportgroups_facility_type'))->set($fields)->where($conditions); + + $db->setQuery($query); + + $db->execute(); + } + } + + return false; + } +} diff --git a/admin/models/fields/clinics.php b/admin/models/fields/additionalinfo.php similarity index 55% rename from admin/models/fields/clinics.php rename to admin/models/fields/additionalinfo.php index 2b6c368..6f9709f 100644 --- a/admin/models/fields/clinics.php +++ b/admin/models/fields/additionalinfo.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups - @subpackage clinics.php + @subpackage additionalinfo.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -28,63 +28,19 @@ defined('_JEXEC') or die('Restricted access'); // import the list field type jimport('joomla.form.helper'); -JFormHelper::loadFieldClass('list'); +JFormHelper::loadFieldClass('checkboxes'); /** - * Clinics Form Field class for the Supportgroups component + * Additionalinfo Form Field class for the Supportgroups component */ -class JFormFieldClinics extends JFormFieldList +class JFormFieldAdditionalinfo extends JFormFieldCheckboxes { /** - * The clinics field type. + * The additionalinfo field type. * * @var string */ - public $type = 'clinics'; - /** - * Override to add new button - * - * @return string The field input markup. - * - * @since 3.2 - */ - protected function getInput() - { - // see if we should add buttons - $setButton = $this->getAttribute('button'); - // get html - $html = parent::getInput(); - // if true set button - if ($setButton === 'true') - { - $user = JFactory::getUser(); - // only add if user allowed to create clinic - if ($user->authorise('clinic.create', 'com_supportgroups')) - { - // get the input from url - $jinput = JFactory::getApplication()->input; - // get the view name & id - $values = $jinput->getArray(array( - 'id' => 'int', - 'view' => 'word' - )); - // check if new item - $ref = ''; - if (!is_null($values['id']) && strlen($values['view'])) - { - // only load referal if not new item. - $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; - } - // build the button - $button = ' - ' . JText::_('COM_SUPPORTGROUPS_NEW') . ''; - // return the button attached to input field - return $html . $button; - } - } - return $html; - } + public $type = 'additionalinfo'; /** * Method to get a list of options for a list input. @@ -95,19 +51,25 @@ class JFormFieldClinics extends JFormFieldList { $db = JFactory::getDBO(); $query = $db->getQuery(true); - $query->select($db->quoteName(array('a.id','a.name'),array('id','clinic_name'))); - $query->from($db->quoteName('#__supportgroups_clinic', 'a')); + $query->select($db->quoteName(array('a.id','a.name','b.name'),array('id','info_name','type'))); + $query->from($db->quoteName('#__supportgroups_additional_info', 'a')); + $query->join('INNER', $db->quoteName('#__supportgroups_info_type', 'b') . ' ON (' . $db->quoteName('a.info_type') . ' = ' . $db->quoteName('b.id') . ')'); $query->where($db->quoteName('a.published') . ' = 1'); + $query->order('b.name ASC'); $query->order('a.name ASC'); $db->setQuery((string)$query); $items = $db->loadObjectList(); $options = array(); if ($items) { - $options[] = JHtml::_('select.option', '', 'Select a clinic'); foreach($items as $item) - { - $options[] = JHtml::_('select.option', $item->id, $item->clinic_name); + { + $tmp = array( + 'value' => $item->id, + 'text' => '  '.$item->info_name.' ('.$item->type.')', + 'checked' => false + ); + $options[] = (object) $tmp; } } return $options; diff --git a/admin/models/fields/adminviewfolderlist.php b/admin/models/fields/adminviewfolderlist.php new file mode 100644 index 0000000..61b9bf9 --- /dev/null +++ b/admin/models/fields/adminviewfolderlist.php @@ -0,0 +1,68 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Adminviewfolderlist Form Field class for the Supportgroups component + */ +class JFormFieldAdminviewfolderlist extends JFormFieldList +{ + /** + * The adminviewfolderlist field type. + * + * @var string + */ + public $type = 'adminviewfolderlist'; + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + public function getOptions() + { + // get custom folder files + $localfolder = JPATH_COMPONENT_ADMINISTRATOR.'/views'; + // set the default + $options = array(); + // import all needed classes + jimport('joomla.filesystem.folder'); + // now check if there are files in the folder + if (JFolder::exists($localfolder) && $folders = JFolder::folders($localfolder)) + { + foreach ($folders as $folder) + { + $options[] = JHtml::_('select.option', $folder, SupportgroupsHelper::safeString($folder, 'W')); + } + } + return $options; + } +} diff --git a/admin/models/fields/areas.php b/admin/models/fields/areas.php new file mode 100644 index 0000000..29ed4cf --- /dev/null +++ b/admin/models/fields/areas.php @@ -0,0 +1,176 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Areas Form Field class for the Supportgroups component + */ +class JFormFieldAreas extends JFormFieldList +{ + /** + * The areas field type. + * + * @var string + */ + public $type = 'areas'; + + /** + * Override to add new button + * + * @return string The field input markup. + * + * @since 3.2 + */ + protected function getInput() + { + // see if we should add buttons + $setButton = $this->getAttribute('button'); + // get html + $html = parent::getInput(); + // if true set button + if ($setButton === 'true') + { + $button = array(); + $script = array(); + $buttonName = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referal if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + } + $user = JFactory::getUser(); + // only add if user allowed to create area + if ($user->authorise('area.create', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build Create button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ' + '; + } + // only add if user allowed to edit area + if (($buttonName === 'area' || $buttonName === 'areas') && $user->authorise('area.edit', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$buttonName."',function (e) { + e.preventDefault(); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + function ".$buttonName."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$buttonName."Create').hide(); + // show edit button + jQuery('#".$buttonName."Edit').show(); + var url = 'index.php?option=com_supportgroups&view=areas&task=area.edit&id='+value+'".$refJ."'; + jQuery('#".$buttonName."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$buttonName."Create').show(); + // hide edit button + jQuery('#".$buttonName."Edit').hide(); + } + }"; + } + // check if button was created for area field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; + } + } + return $html; + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + public function getOptions() + { + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + $query->select($db->quoteName(array('a.id','a.name','b.name','c.codetwo'),array('id','area_name','region','country'))); + $query->from($db->quoteName('#__supportgroups_area', 'a')); + $query->join('LEFT', '#__supportgroups_region AS b ON b.id = a.region'); + $query->join('LEFT', '#__supportgroups_country AS c ON c.id = b.country'); + $query->where($db->quoteName('a.published') . ' = 1'); + $query->order('c.codetwo ASC'); + $query->order('b.name ASC'); + $query->order('a.name ASC'); + $db->setQuery((string)$query); + $items = $db->loadObjectList(); + $options = array(); + if ($items) + { + $options[] = JHtml::_('select.option', '', 'Select an option'); + foreach($items as $item) + { + $options[] = JHtml::_('select.option', $item->id, $item->area_name.' ('.$item->region.' - '.$item->country.')'); + } + } + return $options; + } +} diff --git a/admin/models/fields/areastype.php b/admin/models/fields/areastype.php new file mode 100644 index 0000000..d76fd7c --- /dev/null +++ b/admin/models/fields/areastype.php @@ -0,0 +1,172 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Areastype Form Field class for the Supportgroups component + */ +class JFormFieldAreastype extends JFormFieldList +{ + /** + * The areastype field type. + * + * @var string + */ + public $type = 'areastype'; + + /** + * Override to add new button + * + * @return string The field input markup. + * + * @since 3.2 + */ + protected function getInput() + { + // see if we should add buttons + $setButton = $this->getAttribute('button'); + // get html + $html = parent::getInput(); + // if true set button + if ($setButton === 'true') + { + $button = array(); + $script = array(); + $buttonName = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referal if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + } + $user = JFactory::getUser(); + // only add if user allowed to create area_type + if ($user->authorise('area_type.create', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build Create button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ' + '; + } + // only add if user allowed to edit area_type + if (($buttonName === 'area_type' || $buttonName === 'area_types') && $user->authorise('area_type.edit', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$buttonName."',function (e) { + e.preventDefault(); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + function ".$buttonName."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$buttonName."Create').hide(); + // show edit button + jQuery('#".$buttonName."Edit').show(); + var url = 'index.php?option=com_supportgroups&view=area_types&task=area_type.edit&id='+value+'".$refJ."'; + jQuery('#".$buttonName."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$buttonName."Create').show(); + // hide edit button + jQuery('#".$buttonName."Edit').hide(); + } + }"; + } + // check if button was created for area_type field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; + } + } + return $html; + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + public function getOptions() + { + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + $query->select($db->quoteName(array('a.id','a.name'),array('id','area_type_name'))); + $query->from($db->quoteName('#__supportgroups_area_type', 'a')); + $query->where($db->quoteName('a.published') . ' = 1'); + $query->order('a.name ASC'); + $db->setQuery((string)$query); + $items = $db->loadObjectList(); + $options = array(); + if ($items) + { + $options[] = JHtml::_('select.option', '', 'Select a type'); + foreach($items as $item) + { + $options[] = JHtml::_('select.option', $item->id, $item->area_type_name); + } + } + return $options; + } +} diff --git a/admin/models/fields/articles.php b/admin/models/fields/articles.php index c87a4b6..a85a091 100644 --- a/admin/models/fields/articles.php +++ b/admin/models/fields/articles.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage articles.php @@ -40,51 +40,7 @@ class JFormFieldArticles extends JFormFieldList * * @var string */ - public $type = 'articles'; - /** - * Override to add new button - * - * @return string The field input markup. - * - * @since 3.2 - */ - protected function getInput() - { - // see if we should add buttons - $setButton = $this->getAttribute('button'); - // get html - $html = parent::getInput(); - // if true set button - if ($setButton === 'true') - { - $user = JFactory::getUser(); - // only add if user allowed to create article - if ($user->authorise('core.create', 'com_supportgroups')) - { - // get the input from url - $jinput = JFactory::getApplication()->input; - // get the view name & id - $values = $jinput->getArray(array( - 'id' => 'int', - 'view' => 'word' - )); - // check if new item - $ref = ''; - if (!is_null($values['id']) && strlen($values['view'])) - { - // only load referal if not new item. - $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; - } - // build the button - $button = ' - ' . JText::_('COM_SUPPORTGROUPS_NEW') . ''; - // return the button attached to input field - return $html . $button; - } - } - return $html; - } + public $type = 'articles'; /** * Method to get a list of options for a list input. diff --git a/admin/models/fields/countries.php b/admin/models/fields/countries.php index 3390841..8fe1d43 100644 --- a/admin/models/fields/countries.php +++ b/admin/models/fields/countries.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage countries.php @@ -40,51 +40,7 @@ class JFormFieldCountries extends JFormFieldList * * @var string */ - public $type = 'countries'; - /** - * Override to add new button - * - * @return string The field input markup. - * - * @since 3.2 - */ - protected function getInput() - { - // see if we should add buttons - $setButton = $this->getAttribute('button'); - // get html - $html = parent::getInput(); - // if true set button - if ($setButton === 'true') - { - $user = JFactory::getUser(); - // only add if user allowed to create country - if ($user->authorise('country.create', 'com_supportgroups')) - { - // get the input from url - $jinput = JFactory::getApplication()->input; - // get the view name & id - $values = $jinput->getArray(array( - 'id' => 'int', - 'view' => 'word' - )); - // check if new item - $ref = ''; - if (!is_null($values['id']) && strlen($values['view'])) - { - // only load referal if not new item. - $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; - } - // build the button - $button = ' - ' . JText::_('COM_SUPPORTGROUPS_NEW') . ''; - // return the button attached to input field - return $html . $button; - } - } - return $html; - } + public $type = 'countries'; /** * Method to get a list of options for a list input. @@ -104,7 +60,7 @@ class JFormFieldCountries extends JFormFieldList $options = array(); if ($items) { - $options[] = JHtml::_('select.option', '', 'Select an option'); + $options[] = JHtml::_('select.option', '', 'Select a country'); foreach($items as $item) { $options[] = JHtml::_('select.option', $item->id, $item->country_name); diff --git a/admin/models/fields/currency.php b/admin/models/fields/currency.php index 861327d..e8a2bf0 100644 --- a/admin/models/fields/currency.php +++ b/admin/models/fields/currency.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage currency.php @@ -40,51 +40,7 @@ class JFormFieldCurrency extends JFormFieldList * * @var string */ - public $type = 'currency'; - /** - * Override to add new button - * - * @return string The field input markup. - * - * @since 3.2 - */ - protected function getInput() - { - // see if we should add buttons - $setButton = $this->getAttribute('button'); - // get html - $html = parent::getInput(); - // if true set button - if ($setButton === 'true') - { - $user = JFactory::getUser(); - // only add if user allowed to create currency - if ($user->authorise('currency.create', 'com_supportgroups')) - { - // get the input from url - $jinput = JFactory::getApplication()->input; - // get the view name & id - $values = $jinput->getArray(array( - 'id' => 'int', - 'view' => 'word' - )); - // check if new item - $ref = ''; - if (!is_null($values['id']) && strlen($values['view'])) - { - // only load referal if not new item. - $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; - } - // build the button - $button = ' - ' . JText::_('COM_SUPPORTGROUPS_NEW') . ''; - // return the button attached to input field - return $html . $button; - } - } - return $html; - } + public $type = 'currency'; /** * Method to get a list of options for a list input. diff --git a/admin/models/fields/facilities.php b/admin/models/fields/facilities.php new file mode 100644 index 0000000..9217bc8 --- /dev/null +++ b/admin/models/fields/facilities.php @@ -0,0 +1,174 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Facilities Form Field class for the Supportgroups component + */ +class JFormFieldFacilities extends JFormFieldList +{ + /** + * The facilities field type. + * + * @var string + */ + public $type = 'facilities'; + + /** + * Override to add new button + * + * @return string The field input markup. + * + * @since 3.2 + */ + protected function getInput() + { + // see if we should add buttons + $setButton = $this->getAttribute('button'); + // get html + $html = parent::getInput(); + // if true set button + if ($setButton === 'true') + { + $button = array(); + $script = array(); + $buttonName = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referal if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + } + $user = JFactory::getUser(); + // only add if user allowed to create facility + if ($user->authorise('facility.create', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build Create button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ' + '; + } + // only add if user allowed to edit facility + if (($buttonName === 'facility' || $buttonName === 'facilities') && $user->authorise('facility.edit', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$buttonName."',function (e) { + e.preventDefault(); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + function ".$buttonName."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$buttonName."Create').hide(); + // show edit button + jQuery('#".$buttonName."Edit').show(); + var url = 'index.php?option=com_supportgroups&view=facilities&task=facility.edit&id='+value+'".$refJ."'; + jQuery('#".$buttonName."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$buttonName."Create').show(); + // hide edit button + jQuery('#".$buttonName."Edit').hide(); + } + }"; + } + // check if button was created for facility field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; + } + } + return $html; + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + public function getOptions() + { + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + $query->select($db->quoteName(array('a.id','a.name','b.name'),array('id','facility_name','type'))); + $query->from($db->quoteName('#__supportgroups_facility', 'a')); + $query->join('INNER', $db->quoteName('#__supportgroups_facility_type', 'b') . ' ON (' . $db->quoteName('a.facility_type') . ' = ' . $db->quoteName('b.id') . ')'); + $query->where($db->quoteName('a.published') . ' = 1'); + $query->order('b.name ASC'); + $query->order('a.name ASC'); + $db->setQuery((string)$query); + $items = $db->loadObjectList(); + $options = array(); + if ($items) + { + $options[] = JHtml::_('select.option', '', 'Select a facility'); + foreach($items as $item) + { + $options[] = JHtml::_('select.option', $item->id,$item->facility_name.' - '.$item->type); + } + } + return $options; + } +} diff --git a/admin/models/fields/facilitiestype.php b/admin/models/fields/facilitiestype.php new file mode 100644 index 0000000..45e6135 --- /dev/null +++ b/admin/models/fields/facilitiestype.php @@ -0,0 +1,172 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Facilitiestype Form Field class for the Supportgroups component + */ +class JFormFieldFacilitiestype extends JFormFieldList +{ + /** + * The facilitiestype field type. + * + * @var string + */ + public $type = 'facilitiestype'; + + /** + * Override to add new button + * + * @return string The field input markup. + * + * @since 3.2 + */ + protected function getInput() + { + // see if we should add buttons + $setButton = $this->getAttribute('button'); + // get html + $html = parent::getInput(); + // if true set button + if ($setButton === 'true') + { + $button = array(); + $script = array(); + $buttonName = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referal if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + } + $user = JFactory::getUser(); + // only add if user allowed to create facility_type + if ($user->authorise('facility_type.create', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build Create button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ' + '; + } + // only add if user allowed to edit facility_type + if (($buttonName === 'facility_type' || $buttonName === 'facility_types') && $user->authorise('facility_type.edit', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$buttonName."',function (e) { + e.preventDefault(); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + function ".$buttonName."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$buttonName."Create').hide(); + // show edit button + jQuery('#".$buttonName."Edit').show(); + var url = 'index.php?option=com_supportgroups&view=facility_types&task=facility_type.edit&id='+value+'".$refJ."'; + jQuery('#".$buttonName."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$buttonName."Create').show(); + // hide edit button + jQuery('#".$buttonName."Edit').hide(); + } + }"; + } + // check if button was created for facility_type field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; + } + } + return $html; + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + public function getOptions() + { + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + $query->select($db->quoteName(array('a.id','a.name'),array('id','facility_type_name'))); + $query->from($db->quoteName('#__supportgroups_facility_type', 'a')); + $query->where($db->quoteName('a.published') . ' = 1'); + $query->order('a.name ASC'); + $db->setQuery((string)$query); + $items = $db->loadObjectList(); + $options = array(); + if ($items) + { + $options[] = JHtml::_('select.option', '', 'Select a type'); + foreach($items as $item) + { + $options[] = JHtml::_('select.option', $item->id, $item->facility_type_name); + } + } + return $options; + } +} diff --git a/admin/models/fields/infotype.php b/admin/models/fields/infotype.php new file mode 100644 index 0000000..982778c --- /dev/null +++ b/admin/models/fields/infotype.php @@ -0,0 +1,172 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Infotype Form Field class for the Supportgroups component + */ +class JFormFieldInfotype extends JFormFieldList +{ + /** + * The infotype field type. + * + * @var string + */ + public $type = 'infotype'; + + /** + * Override to add new button + * + * @return string The field input markup. + * + * @since 3.2 + */ + protected function getInput() + { + // see if we should add buttons + $setButton = $this->getAttribute('button'); + // get html + $html = parent::getInput(); + // if true set button + if ($setButton === 'true') + { + $button = array(); + $script = array(); + $buttonName = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referal if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + } + $user = JFactory::getUser(); + // only add if user allowed to create info_type + if ($user->authorise('info_type.create', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build Create button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ' + '; + } + // only add if user allowed to edit info_type + if (($buttonName === 'info_type' || $buttonName === 'info_types') && $user->authorise('info_type.edit', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$buttonName."',function (e) { + e.preventDefault(); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + function ".$buttonName."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$buttonName."Create').hide(); + // show edit button + jQuery('#".$buttonName."Edit').show(); + var url = 'index.php?option=com_supportgroups&view=info_types&task=info_type.edit&id='+value+'".$refJ."'; + jQuery('#".$buttonName."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$buttonName."Create').show(); + // hide edit button + jQuery('#".$buttonName."Edit').hide(); + } + }"; + } + // check if button was created for info_type field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; + } + } + return $html; + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + public function getOptions() + { + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + $query->select($db->quoteName(array('a.id','a.name'),array('id','info_type_name'))); + $query->from($db->quoteName('#__supportgroups_info_type', 'a')); + $query->where($db->quoteName('a.published') . ' = 1'); + $query->order('a.name ASC'); + $db->setQuery((string)$query); + $items = $db->loadObjectList(); + $options = array(); + if ($items) + { + $options[] = JHtml::_('select.option', '', 'Select a type'); + foreach($items as $item) + { + $options[] = JHtml::_('select.option', $item->id, $item->info_type_name); + } + } + return $options; + } +} diff --git a/admin/models/fields/locations.php b/admin/models/fields/locations.php deleted file mode 100644 index ebf8c45..0000000 --- a/admin/models/fields/locations.php +++ /dev/null @@ -1,119 +0,0 @@ - - @copyright Copyright (C) 2015. All Rights Reserved - @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html - - Support Groups - -/-----------------------------------------------------------------------------------------------------------------------------*/ - -// No direct access to this file -defined('_JEXEC') or die('Restricted access'); - -// import the list field type -jimport('joomla.form.helper'); -JFormHelper::loadFieldClass('list'); - -/** - * Locations Form Field class for the Supportgroups component - */ -class JFormFieldLocations extends JFormFieldList -{ - /** - * The locations field type. - * - * @var string - */ - public $type = 'locations'; - /** - * Override to add new button - * - * @return string The field input markup. - * - * @since 3.2 - */ - protected function getInput() - { - // see if we should add buttons - $setButton = $this->getAttribute('button'); - // get html - $html = parent::getInput(); - // if true set button - if ($setButton === 'true') - { - $user = JFactory::getUser(); - // only add if user allowed to create location - if ($user->authorise('location.create', 'com_supportgroups')) - { - // get the input from url - $jinput = JFactory::getApplication()->input; - // get the view name & id - $values = $jinput->getArray(array( - 'id' => 'int', - 'view' => 'word' - )); - // check if new item - $ref = ''; - if (!is_null($values['id']) && strlen($values['view'])) - { - // only load referal if not new item. - $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; - } - // build the button - $button = ' - ' . JText::_('COM_SUPPORTGROUPS_NEW') . ''; - // return the button attached to input field - return $html . $button; - } - } - return $html; - } - - /** - * Method to get a list of options for a list input. - * - * @return array An array of JHtml options. - */ - public function getOptions() - { - $db = JFactory::getDBO(); - $query = $db->getQuery(true); - $query->select($db->quoteName(array('a.id','a.name','b.name','c.codetwo'),array('id','location_name','region','country'))); - $query->from($db->quoteName('#__supportgroups_location', 'a')); - $query->join('LEFT', '#__supportgroups_region AS b ON b.id = a.region'); - $query->join('LEFT', '#__supportgroups_country AS c ON c.id = b.country'); - $query->where($db->quoteName('a.published') . ' = 1'); - $query->order('c.codetwo ASC'); - $query->order('b.name ASC'); - $query->order('a.name ASC'); - $db->setQuery((string)$query); - $items = $db->loadObjectList(); - $options = array(); - if ($items) - { - $options[] = JHtml::_('select.option', '', 'Select a location'); - foreach($items as $item) - { - $options[] = JHtml::_('select.option', $item->id, $item->location_name.' ('.$item->region.' - '.$item->country.')'); - } - } - return $options; - } -} diff --git a/admin/models/fields/regions.php b/admin/models/fields/regions.php index 615be0f..6af7992 100644 --- a/admin/models/fields/regions.php +++ b/admin/models/fields/regions.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage regions.php @@ -40,7 +40,8 @@ class JFormFieldRegions extends JFormFieldList * * @var string */ - public $type = 'regions'; + public $type = 'regions'; + /** * Override to add new button * @@ -57,30 +58,86 @@ class JFormFieldRegions extends JFormFieldList // if true set button if ($setButton === 'true') { + $button = array(); + $script = array(); + $buttonName = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referal if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + } $user = JFactory::getUser(); // only add if user allowed to create region - if ($user->authorise('region.create', 'com_supportgroups')) + if ($user->authorise('region.create', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. { - // get the input from url - $jinput = JFactory::getApplication()->input; - // get the view name & id - $values = $jinput->getArray(array( - 'id' => 'int', - 'view' => 'word' - )); - // check if new item - $ref = ''; - if (!is_null($values['id']) && strlen($values['view'])) - { - // only load referal if not new item. - $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; - } - // build the button - $button = ' - ' . JText::_('COM_SUPPORTGROUPS_NEW') . ''; - // return the button attached to input field - return $html . $button; + '; + } + // only add if user allowed to edit region + if (($buttonName === 'region' || $buttonName === 'regions') && $user->authorise('region.edit', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$buttonName."',function (e) { + e.preventDefault(); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + function ".$buttonName."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$buttonName."Create').hide(); + // show edit button + jQuery('#".$buttonName."Edit').show(); + var url = 'index.php?option=com_supportgroups&view=regions&task=region.edit&id='+value+'".$refJ."'; + jQuery('#".$buttonName."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$buttonName."Create').show(); + // hide edit button + jQuery('#".$buttonName."Edit').hide(); + } + }"; + } + // check if button was created for region field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; } } return $html; diff --git a/admin/models/fields/siteviewfolderlist.php b/admin/models/fields/siteviewfolderlist.php new file mode 100644 index 0000000..6b91747 --- /dev/null +++ b/admin/models/fields/siteviewfolderlist.php @@ -0,0 +1,68 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Siteviewfolderlist Form Field class for the Supportgroups component + */ +class JFormFieldSiteviewfolderlist extends JFormFieldList +{ + /** + * The siteviewfolderlist field type. + * + * @var string + */ + public $type = 'siteviewfolderlist'; + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + public function getOptions() + { + // get custom folder files + $localfolder = JPATH_COMPONENT_SITE.'/views'; + // set the default + $options = array(); + // import all needed classes + jimport('joomla.filesystem.folder'); + // now check if there are files in the folder + if (JFolder::exists($localfolder) && $folders = JFolder::folders($localfolder)) + { + foreach ($folders as $folder) + { + $options[] = JHtml::_('select.option', $folder, SupportgroupsHelper::safeString($folder, 'W')); + } + } + return $options; + } +} diff --git a/admin/models/fields/supportgroups.php b/admin/models/fields/supportgroups.php index ba25a20..b0b2552 100644 --- a/admin/models/fields/supportgroups.php +++ b/admin/models/fields/supportgroups.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage supportgroups.php @@ -40,7 +40,8 @@ class JFormFieldSupportgroups extends JFormFieldList * * @var string */ - public $type = 'supportgroups'; + public $type = 'supportgroups'; + /** * Override to add new button * @@ -57,30 +58,86 @@ class JFormFieldSupportgroups extends JFormFieldList // if true set button if ($setButton === 'true') { + $button = array(); + $script = array(); + $buttonName = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referal if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + } $user = JFactory::getUser(); // only add if user allowed to create support_group - if ($user->authorise('support_group.create', 'com_supportgroups')) + if ($user->authorise('support_group.create', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. { - // get the input from url - $jinput = JFactory::getApplication()->input; - // get the view name & id - $values = $jinput->getArray(array( - 'id' => 'int', - 'view' => 'word' - )); - // check if new item - $ref = ''; - if (!is_null($values['id']) && strlen($values['view'])) - { - // only load referal if not new item. - $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; - } - // build the button - $button = ' - ' . JText::_('COM_SUPPORTGROUPS_NEW') . ''; - // return the button attached to input field - return $html . $button; + '; + } + // only add if user allowed to edit support_group + if (($buttonName === 'support_group' || $buttonName === 'support_groups') && $user->authorise('support_group.edit', 'com_supportgroups') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$buttonName."',function (e) { + e.preventDefault(); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + function ".$buttonName."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$buttonName."Create').hide(); + // show edit button + jQuery('#".$buttonName."Edit').show(); + var url = 'index.php?option=com_supportgroups&view=support_groups&task=support_group.edit&id='+value+'".$refJ."'; + jQuery('#".$buttonName."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$buttonName."Create').show(); + // hide edit button + jQuery('#".$buttonName."Edit').hide(); + } + }"; + } + // check if button was created for support_group field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; } } return $html; diff --git a/admin/models/forms/additional_info.js b/admin/models/forms/additional_info.js new file mode 100644 index 0000000..fcaae5f --- /dev/null +++ b/admin/models/forms/additional_info.js @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 16 of this MVC + @build 25th October, 2017 + @created 9th March, 2016 + @package Support Groups + @subpackage additional_info.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + + diff --git a/admin/models/forms/location.xml b/admin/models/forms/additional_info.xml similarity index 71% rename from admin/models/forms/location.xml rename to admin/models/forms/additional_info.xml index 16853c5..715581a 100644 --- a/admin/models/forms/location.xml +++ b/admin/models/forms/additional_info.xml @@ -16,8 +16,8 @@ - + - - - + + +
@@ -180,13 +192,13 @@ \ No newline at end of file diff --git a/admin/models/forms/location.js b/admin/models/forms/area.js similarity index 91% rename from admin/models/forms/location.js rename to admin/models/forms/area.js index f0166ce..fb84444 100644 --- a/admin/models/forms/location.js +++ b/admin/models/forms/area.js @@ -9,11 +9,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups - @subpackage location.js + @subpackage area.js @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -48,11 +48,9 @@ function vvvvvvv(region_vvvvvvv) // set this function logic if (region) { - jQuery('.note_set_area').closest('.control-group').show(); } else { - jQuery('.note_set_area').closest('.control-group').hide(); } } diff --git a/admin/models/forms/clinic.xml b/admin/models/forms/area.xml similarity index 67% rename from admin/models/forms/clinic.xml rename to admin/models/forms/area.xml index 59e3e1d..aed61d3 100644 --- a/admin/models/forms/clinic.xml +++ b/admin/models/forms/area.xml @@ -16,8 +16,8 @@ - + + + - - - + + + + + @@ -184,13 +213,13 @@ \ No newline at end of file diff --git a/admin/models/forms/clinic.js b/admin/models/forms/area_type.js similarity index 91% rename from admin/models/forms/clinic.js rename to admin/models/forms/area_type.js index 27fa76f..9428b34 100644 --- a/admin/models/forms/clinic.js +++ b/admin/models/forms/area_type.js @@ -9,11 +9,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups - @subpackage clinic.js + @subpackage area_type.js @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html diff --git a/admin/models/forms/area_type.xml b/admin/models/forms/area_type.xml new file mode 100644 index 0000000..ab23c88 --- /dev/null +++ b/admin/models/forms/area_type.xml @@ -0,0 +1,136 @@ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + +
+
\ No newline at end of file diff --git a/admin/models/forms/country.js b/admin/models/forms/country.js index 62c18fd..d155d4c 100644 --- a/admin/models/forms/country.js +++ b/admin/models/forms/country.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage country.js @author Llewellyn van der Merwe diff --git a/admin/models/forms/country.xml b/admin/models/forms/country.xml index ec5c3ac..18b74d4 100644 --- a/admin/models/forms/country.xml +++ b/admin/models/forms/country.xml @@ -44,11 +44,12 @@
@@ -139,7 +140,7 @@ class="text_area" required="false" filter="INT" - message="Error! Please add zone code here." + message="COM_SUPPORTGROUPS_COUNTRY_WORLDZONE_MESSAGE" hint="COM_SUPPORTGROUPS_COUNTRY_WORLDZONE_HINT" /> @@ -153,7 +154,7 @@ class="text_area" required="true" filter="WORD" - message="Error! Please add three-letter country code here." + message="COM_SUPPORTGROUPS_COUNTRY_CODETHREE_MESSAGE" hint="COM_SUPPORTGROUPS_COUNTRY_CODETHREE_HINT" /> @@ -167,14 +168,14 @@ class="text_area" required="true" filter="WORD" - message="Error! Please add two-letter country code here." + message="COM_SUPPORTGROUPS_COUNTRY_CODETWO_MESSAGE" hint="COM_SUPPORTGROUPS_COUNTRY_CODETWO_HINT" /> diff --git a/admin/models/forms/currency.xml b/admin/models/forms/currency.xml index 019afdc..8d5e5d6 100644 --- a/admin/models/forms/currency.xml +++ b/admin/models/forms/currency.xml @@ -44,11 +44,12 @@ @@ -129,7 +130,7 @@ class="text_area" required="true" filter="WORD" - message="Error! Please add three-letter currency code here." + message="COM_SUPPORTGROUPS_CURRENCY_CODETHREE_MESSAGE" hint="COM_SUPPORTGROUPS_CURRENCY_CODETHREE_HINT" /> @@ -143,7 +144,7 @@ class="text_area" required="true" filter="INT" - message="Error! Please add numeric code here." + message="COM_SUPPORTGROUPS_CURRENCY_NUMERICCODE_MESSAGE" hint="COM_SUPPORTGROUPS_CURRENCY_NUMERICCODE_HINT" /> @@ -157,18 +158,31 @@ class="text_area" required="true" filter="STRING" - message="Error! Please add currency symbol here." + message="COM_SUPPORTGROUPS_CURRENCY_SYMBOL_MESSAGE" hint="COM_SUPPORTGROUPS_CURRENCY_SYMBOL_HINT" /> + + - - @@ -221,21 +223,20 @@ class="text_area" required="true" filter="INT" - message="Error! Please add currency decimal place here." + message="COM_SUPPORTGROUPS_CURRENCY_DECIMALPLACE_MESSAGE" hint="COM_SUPPORTGROUPS_CURRENCY_DECIMALPLACE_HINT" /> - + diff --git a/admin/models/forms/facility.js b/admin/models/forms/facility.js new file mode 100644 index 0000000..b47878d --- /dev/null +++ b/admin/models/forms/facility.js @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 + @package Support Groups + @subpackage facility.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + + diff --git a/admin/models/forms/facility.xml b/admin/models/forms/facility.xml new file mode 100644 index 0000000..7ebd4f1 --- /dev/null +++ b/admin/models/forms/facility.xml @@ -0,0 +1,228 @@ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + +
+
+ + +
+ + + + +
+
\ No newline at end of file diff --git a/admin/models/forms/facility_type.js b/admin/models/forms/facility_type.js new file mode 100644 index 0000000..76b01a6 --- /dev/null +++ b/admin/models/forms/facility_type.js @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 2 of this MVC + @build 25th October, 2017 + @created 1st April, 2016 + @package Support Groups + @subpackage facility_type.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + + diff --git a/admin/models/forms/facility_type.xml b/admin/models/forms/facility_type.xml new file mode 100644 index 0000000..e4be323 --- /dev/null +++ b/admin/models/forms/facility_type.xml @@ -0,0 +1,136 @@ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + +
+
\ No newline at end of file diff --git a/admin/models/forms/help_document.js b/admin/models/forms/help_document.js index 3ca519c..727aacd 100644 --- a/admin/models/forms/help_document.js +++ b/admin/models/forms/help_document.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage help_document.js @author Llewellyn van der Merwe @@ -23,10 +23,12 @@ /-----------------------------------------------------------------------------------------------------------------------------*/ // Some Global Values -jform_vvvvvvyvvz_required = false; -jform_vvvvvvzvwa_required = false; -jform_vvvvvwavwb_required = false; -jform_vvvvvwbvwc_required = false; +jform_vvvvvvwvvz_required = false; +jform_vvvvvvxvwa_required = false; +jform_vvvvvvyvwb_required = false; +jform_vvvvvvzvwc_required = false; +jform_vvvvvwavwd_required = false; +jform_vvvvvwbvwe_required = false; // Initial Script jQuery(document).ready(function() @@ -57,10 +59,27 @@ function vvvvvvw(location_vvvvvvw) if (location_vvvvvvw == 1) { jQuery('#jform_admin_view').closest('.control-group').show(); + if (jform_vvvvvvwvvz_required) + { + updateFieldRequired('admin_view',0); + jQuery('#jform_admin_view').prop('required','required'); + jQuery('#jform_admin_view').attr('aria-required',true); + jQuery('#jform_admin_view').addClass('required'); + jform_vvvvvvwvvz_required = false; + } + } else { jQuery('#jform_admin_view').closest('.control-group').hide(); + if (!jform_vvvvvvwvvz_required) + { + updateFieldRequired('admin_view',1); + jQuery('#jform_admin_view').removeAttr('required'); + jQuery('#jform_admin_view').removeAttr('aria-required'); + jQuery('#jform_admin_view').removeClass('required'); + jform_vvvvvvwvvz_required = true; + } } } @@ -71,10 +90,27 @@ function vvvvvvx(location_vvvvvvx) if (location_vvvvvvx == 2) { jQuery('#jform_site_view').closest('.control-group').show(); + if (jform_vvvvvvxvwa_required) + { + updateFieldRequired('site_view',0); + jQuery('#jform_site_view').prop('required','required'); + jQuery('#jform_site_view').attr('aria-required',true); + jQuery('#jform_site_view').addClass('required'); + jform_vvvvvvxvwa_required = false; + } + } else { jQuery('#jform_site_view').closest('.control-group').hide(); + if (!jform_vvvvvvxvwa_required) + { + updateFieldRequired('site_view',1); + jQuery('#jform_site_view').removeAttr('required'); + jQuery('#jform_site_view').removeAttr('aria-required'); + jQuery('#jform_site_view').removeClass('required'); + jform_vvvvvvxvwa_required = true; + } } } @@ -98,26 +134,26 @@ function vvvvvvy(type_vvvvvvy) if (type) { jQuery('#jform_url').closest('.control-group').show(); - if (jform_vvvvvvyvvz_required) + if (jform_vvvvvvyvwb_required) { updateFieldRequired('url',0); jQuery('#jform_url').prop('required','required'); jQuery('#jform_url').attr('aria-required',true); jQuery('#jform_url').addClass('required'); - jform_vvvvvvyvvz_required = false; + jform_vvvvvvyvwb_required = false; } } else { jQuery('#jform_url').closest('.control-group').hide(); - if (!jform_vvvvvvyvvz_required) + if (!jform_vvvvvvyvwb_required) { updateFieldRequired('url',1); jQuery('#jform_url').removeAttr('required'); jQuery('#jform_url').removeAttr('aria-required'); jQuery('#jform_url').removeClass('required'); - jform_vvvvvvyvvz_required = true; + jform_vvvvvvyvwb_required = true; } } } @@ -153,26 +189,26 @@ function vvvvvvz(type_vvvvvvz) if (type) { jQuery('#jform_article').closest('.control-group').show(); - if (jform_vvvvvvzvwa_required) + if (jform_vvvvvvzvwc_required) { updateFieldRequired('article',0); jQuery('#jform_article').prop('required','required'); jQuery('#jform_article').attr('aria-required',true); jQuery('#jform_article').addClass('required'); - jform_vvvvvvzvwa_required = false; + jform_vvvvvvzvwc_required = false; } } else { jQuery('#jform_article').closest('.control-group').hide(); - if (!jform_vvvvvvzvwa_required) + if (!jform_vvvvvvzvwc_required) { updateFieldRequired('article',1); jQuery('#jform_article').removeAttr('required'); jQuery('#jform_article').removeAttr('aria-required'); jQuery('#jform_article').removeClass('required'); - jform_vvvvvvzvwa_required = true; + jform_vvvvvvzvwc_required = true; } } } @@ -208,26 +244,26 @@ function vvvvvwa(type_vvvvvwa) if (type) { jQuery('#jform_content-lbl').closest('.control-group').show(); - if (jform_vvvvvwavwb_required) + if (jform_vvvvvwavwd_required) { updateFieldRequired('content',0); jQuery('#jform_content').prop('required','required'); jQuery('#jform_content').attr('aria-required',true); jQuery('#jform_content').addClass('required'); - jform_vvvvvwavwb_required = false; + jform_vvvvvwavwd_required = false; } } else { jQuery('#jform_content-lbl').closest('.control-group').hide(); - if (!jform_vvvvvwavwb_required) + if (!jform_vvvvvwavwd_required) { updateFieldRequired('content',1); jQuery('#jform_content').removeAttr('required'); jQuery('#jform_content').removeAttr('aria-required'); jQuery('#jform_content').removeClass('required'); - jform_vvvvvwavwb_required = true; + jform_vvvvvwavwd_required = true; } } } @@ -250,26 +286,26 @@ function vvvvvwb(target_vvvvvwb) if (target_vvvvvwb == 1) { jQuery('#jform_groups').closest('.control-group').show(); - if (jform_vvvvvwbvwc_required) + if (jform_vvvvvwbvwe_required) { updateFieldRequired('groups',0); jQuery('#jform_groups').prop('required','required'); jQuery('#jform_groups').attr('aria-required',true); jQuery('#jform_groups').addClass('required'); - jform_vvvvvwbvwc_required = false; + jform_vvvvvwbvwe_required = false; } } else { jQuery('#jform_groups').closest('.control-group').hide(); - if (!jform_vvvvvwbvwc_required) + if (!jform_vvvvvwbvwe_required) { updateFieldRequired('groups',1); jQuery('#jform_groups').removeAttr('required'); jQuery('#jform_groups').removeAttr('aria-required'); jQuery('#jform_groups').removeClass('required'); - jform_vvvvvwbvwc_required = true; + jform_vvvvvwbvwe_required = true; } } } diff --git a/admin/models/forms/help_document.xml b/admin/models/forms/help_document.xml index ef2c63b..f4fcb13 100644 --- a/admin/models/forms/help_document.xml +++ b/admin/models/forms/help_document.xml @@ -44,11 +44,12 @@
@@ -142,40 +143,34 @@ - + - + - + - - - - + type="hidden" + name="not_required" + default="[]" + /> - - - + + + + + + + diff --git a/admin/models/forms/info_type.js b/admin/models/forms/info_type.js new file mode 100644 index 0000000..6ae4025 --- /dev/null +++ b/admin/models/forms/info_type.js @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 3 of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 + @package Support Groups + @subpackage info_type.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + + diff --git a/admin/models/forms/info_type.xml b/admin/models/forms/info_type.xml new file mode 100644 index 0000000..a0d298e --- /dev/null +++ b/admin/models/forms/info_type.xml @@ -0,0 +1,136 @@ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + +
+
\ No newline at end of file diff --git a/admin/models/forms/payment.js b/admin/models/forms/payment.js index 5bcef89..3581748 100644 --- a/admin/models/forms/payment.js +++ b/admin/models/forms/payment.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage payment.js @author Llewellyn van der Merwe diff --git a/admin/models/forms/payment.xml b/admin/models/forms/payment.xml index 80e889b..acdc697 100644 --- a/admin/models/forms/payment.xml +++ b/admin/models/forms/payment.xml @@ -44,11 +44,12 @@
diff --git a/admin/models/forms/region.js b/admin/models/forms/region.js index 50a0d43..5da61b1 100644 --- a/admin/models/forms/region.js +++ b/admin/models/forms/region.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage region.js @author Llewellyn van der Merwe diff --git a/admin/models/forms/region.xml b/admin/models/forms/region.xml index 5a0fe22..87816da 100644 --- a/admin/models/forms/region.xml +++ b/admin/models/forms/region.xml @@ -44,11 +44,12 @@ @@ -129,6 +130,15 @@ required="true" button="false" /> + + diff --git a/admin/models/forms/support_group.js b/admin/models/forms/support_group.js index ae96a7b..3667379 100644 --- a/admin/models/forms/support_group.js +++ b/admin/models/forms/support_group.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage support_group.js @author Llewellyn van der Merwe diff --git a/admin/models/forms/support_group.xml b/admin/models/forms/support_group.xml index fdfdf7d..6e16d53 100644 --- a/admin/models/forms/support_group.xml +++ b/admin/models/forms/support_group.xml @@ -44,11 +44,12 @@ @@ -127,29 +128,28 @@ maxlength="150" description="COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE_DESCRIPTION" class="text_area" - required="true" filter="STRING" validated="tel" - message="Error! Please add phone number here." + message="COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE_MESSAGE" hint="COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE_HINT" /> - + - + @@ -179,10 +179,39 @@ description="COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_DESCRIPTION" class="text_area" filter="INT" - message="Error! Please add number of females text here." + message="COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_MESSAGE" hint="COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_HINT" onchange="if(!jQuery(this).val().match(/^\d+$/)){jQuery(this).val('')};" /> + + + + + + + + - - + + - + diff --git a/admin/models/help_document.php b/admin/models/help_document.php index e5d4055..2ff44e3 100644 --- a/admin/models/help_document.php +++ b/admin/models/help_document.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage help_document.php @author Llewellyn van der Merwe @@ -79,7 +79,7 @@ class SupportgroupsModelHelp_document extends JModelAdmin { if ($item = parent::getItem($pk)) { - if (!empty($item->params)) + if (!empty($item->params) && !is_array($item->params)) { // Convert the params field to an array. $registry = new Registry; @@ -122,7 +122,8 @@ class SupportgroupsModelHelp_document extends JModelAdmin * @since 1.6 */ public function getForm($data = array(), $loadData = true) - { // Get the form. + { + // Get the form. $form = $this->loadForm('com_supportgroups.help_document', 'help_document', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) @@ -421,6 +422,26 @@ class SupportgroupsModelHelp_document extends JModelAdmin return true; } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } /** * Method to perform batch operations on an item or a set of items. @@ -537,8 +558,6 @@ class SupportgroupsModelHelp_document extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('help_document'); } @@ -563,7 +582,6 @@ class SupportgroupsModelHelp_document extends JModelAdmin } $newIds = array(); - // Parent exists so let's proceed while (!empty($pks)) { @@ -573,17 +591,11 @@ class SupportgroupsModelHelp_document extends JModelAdmin $this->table->reset(); // only allow copy if user may edit this item. - if (!$this->user->authorise('help_document.edit', $contexts[$pk])) - { - // Not fatal error - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); - continue; - } // Check that the row actually exists @@ -593,7 +605,6 @@ class SupportgroupsModelHelp_document extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -603,7 +614,6 @@ class SupportgroupsModelHelp_document extends JModelAdmin continue; } } - list($this->table->title, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->title); // insert all set values @@ -686,8 +696,6 @@ class SupportgroupsModelHelp_document extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('help_document'); } @@ -711,7 +719,6 @@ class SupportgroupsModelHelp_document extends JModelAdmin if (!$this->user->authorise('help_document.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); - return false; } @@ -722,7 +729,6 @@ class SupportgroupsModelHelp_document extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -739,7 +745,7 @@ class SupportgroupsModelHelp_document extends JModelAdmin foreach ($values as $key => $value) { // Do special action for access. - if ('access' == $key && strlen($value) > 0) + if ('access' === $key && strlen($value) > 0) { $this->table->$key = $value; } @@ -818,7 +824,7 @@ class SupportgroupsModelHelp_document extends JModelAdmin } // Alter the title for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { $origTable = clone $this->getTable(); $origTable->load($input->getInt('id')); @@ -843,7 +849,7 @@ class SupportgroupsModelHelp_document extends JModelAdmin // Automatic handling of alias for empty fields if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) { - if ($data['alias'] == null) + if ($data['alias'] == null || empty($data['alias'])) { if (JFactory::getConfig()->get('unicodeslugs') == 1) { @@ -861,8 +867,7 @@ class SupportgroupsModelHelp_document extends JModelAdmin $msg = JText::_('COM_SUPPORTGROUPS_HELP_DOCUMENT_SAVE_WARNING'); } - list($title, $alias) = $this->_generateNewTitle($data['alias'], $data['title']); - $data['alias'] = $alias; + $data['alias'] = $this->_generateNewTitle($data['alias']); if (isset($msg)) { @@ -872,7 +877,7 @@ class SupportgroupsModelHelp_document extends JModelAdmin } // Alter the uniqe field for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { // Automatic handling of other uniqe fields $uniqeFields = $this->getUniqeFields(); @@ -917,26 +922,49 @@ class SupportgroupsModelHelp_document extends JModelAdmin } /** - * Method to change the title & alias. + * Method to change the title/s & alias. * - * @param string $alias The alias. - * @param string $title The title. + * @param string $alias The alias. + * @param string/array $title The title. * - * @return array Contains the modified title and alias. + * @return array/string Contains the modified title/s and/or alias. * */ - protected function _generateNewTitle($alias, $title) + protected function _generateNewTitle($alias, $title = null) { - // Alter the title & alias + // Alter the title/s & alias $table = $this->getTable(); while ($table->load(array('alias' => $alias))) { - $title = JString::increment($title); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } $alias = JString::increment($alias, 'dash'); } - - return array($title, $alias); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; } } diff --git a/admin/models/help_documents.php b/admin/models/help_documents.php index a9ab8ac..7e4459a 100644 --- a/admin/models/help_documents.php +++ b/admin/models/help_documents.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage help_documents.php @author Llewellyn van der Merwe @@ -167,7 +167,7 @@ class SupportgroupsModelHelp_documents extends JModelList $item->location = $this->selectionTranslation($item->location, 'location'); } } - + // return items return $items; @@ -181,7 +181,7 @@ class SupportgroupsModelHelp_documents extends JModelList public function selectionTranslation($value,$name) { // Array of type language strings - if ($name == 'type') + if ($name === 'type') { $typeArray = array( 0 => 'COM_SUPPORTGROUPS_HELP_DOCUMENT_SELECT_AN_OPTION', @@ -196,7 +196,7 @@ class SupportgroupsModelHelp_documents extends JModelList } } // Array of location language strings - if ($name == 'location') + if ($name === 'location') { $locationArray = array( 1 => 'COM_SUPPORTGROUPS_HELP_DOCUMENT_ADMIN', @@ -265,30 +265,30 @@ class SupportgroupsModelHelp_documents extends JModelList } else { - $search = $db->quote('%' . $db->escape($search, true) . '%'); - $query->where('(a.title LIKE '.$search.' OR a.type LIKE '.$search.' OR a.location LIKE '.$search.' OR a.admin_view LIKE '.$search.' OR a.site_view LIKE '.$search.')'); + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.title LIKE '.$search.' OR a.type LIKE '.$search.' OR a.location LIKE '.$search.' OR a.admin_view LIKE '.$search.' OR g. LIKE '.$search.' OR a.site_view LIKE '.$search.' OR h. LIKE '.$search.')'); } } // Filter by Type. if ($type = $this->getState('filter.type')) { - $query->where('a.type = ' . $db->quote($db->escape($type, true))); + $query->where('a.type = ' . $db->quote($db->escape($type))); } // Filter by Location. if ($location = $this->getState('filter.location')) { - $query->where('a.location = ' . $db->quote($db->escape($location, true))); + $query->where('a.location = ' . $db->quote($db->escape($location))); } - // Filter by Admin_view. + // Filter by admin_view. if ($admin_view = $this->getState('filter.admin_view')) { - $query->where('a.admin_view = ' . $db->quote($db->escape($admin_view, true))); + $query->where('a.admin_view = ' . $db->quote($db->escape($admin_view))); } - // Filter by Site_view. + // Filter by site_view. if ($site_view = $this->getState('filter.site_view')) { - $query->where('a.site_view = ' . $db->quote($db->escape($site_view, true))); + $query->where('a.site_view = ' . $db->quote($db->escape($site_view))); } // Add the list ordering clause. @@ -312,6 +312,8 @@ class SupportgroupsModelHelp_documents extends JModelList // setup the query if (SupportgroupsHelper::checkArray($pks)) { + // Set a value to know this is exporting method. + $_export = true; // Get the user object. $user = JFactory::getUser(); // Create a new query object. diff --git a/admin/models/import.php b/admin/models/import.php index 1a4c124..b23621c 100644 --- a/admin/models/import.php +++ b/admin/models/import.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage import.php @@ -31,6 +31,11 @@ defined('_JEXEC') or die('Restricted access'); */ class SupportgroupsModelImport extends JModelLegacy { + // set uploading values + protected $use_streams = false; + protected $allow_unsafe = false; + protected $safeFileOptions = array(); + /** * @var object JTable object */ @@ -52,7 +57,7 @@ class SupportgroupsModelImport extends JModelLegacy * Import Settings */ protected $getType = NULL; - protected $dataType = NULL; + protected $dataType = NULL; /** * Method to auto-populate the model state. @@ -72,10 +77,6 @@ class SupportgroupsModelImport extends JModelLegacy // Recall the 'Import from Directory' path. $path = $app->getUserStateFromRequest($this->_context . '.import_directory', 'import_directory', $app->get('tmp_path')); $this->setState('import.directory', $path); - // set uploading values - $this->use_streams = false; - $this->allow_unsafe = false; - $this->safeFileOptions = array(); parent::populateState(); } @@ -88,10 +89,10 @@ class SupportgroupsModelImport extends JModelLegacy public function import() { $this->setState('action', 'import'); - $app = JFactory::getApplication(); - $session = JFactory::getSession(); - $package = null; - $continue = false; + $app = JFactory::getApplication(); + $session = JFactory::getSession(); + $package = null; + $continue = false; // get import type $this->getType = $app->input->getString('gettype', NULL); // get import type @@ -146,7 +147,7 @@ class SupportgroupsModelImport extends JModelLegacy // first link data to table headers if(!$continue){ - $package = json_encode($package); + $package = json_encode($package); $session->set('package', $package); $session->set('dataType', $this->dataType); $session->set('hasPackage', true); @@ -198,7 +199,8 @@ class SupportgroupsModelImport extends JModelLegacy protected function _getPackageFromUpload() { // Get the uploaded file information - $input = JFactory::getApplication()->input; + $app = JFactory::getApplication(); + $input = $app->input; // Do not change the filter type 'raw'. We need this to let files containing PHP code to upload. See JInputFiles::get. $userfile = $input->files->get('import_package', null, 'raw'); @@ -206,28 +208,28 @@ class SupportgroupsModelImport extends JModelLegacy // Make sure that file uploads are enabled in php if (!(bool) ini_get('file_uploads')) { - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_WARNIMPORTFILE')); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_WARNIMPORTFILE'), 'warning'); return false; } // If there is no uploaded file, we have a problem... if (!is_array($userfile)) { - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_NO_FILE_SELECTED')); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_NO_FILE_SELECTED'), 'warning'); return false; } // Check if there was a problem uploading the file. if ($userfile['error'] || $userfile['size'] < 1) { - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_WARNIMPORTUPLOADERROR')); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_WARNIMPORTUPLOADERROR'), 'warning'); return false; } // Build the appropriate paths - $config = JFactory::getConfig(); - $tmp_dest = $config->get('tmp_path') . '/' . $userfile['name']; - $tmp_src = $userfile['tmp_name']; + $config = JFactory::getConfig(); + $tmp_dest = $config->get('tmp_path') . '/' . $userfile['name']; + $tmp_src = $userfile['tmp_name']; // Move uploaded file jimport('joomla.filesystem.file'); @@ -258,7 +260,8 @@ class SupportgroupsModelImport extends JModelLegacy */ protected function _getPackageFromFolder() { - $input = JFactory::getApplication()->input; + $app = JFactory::getApplication(); + $input = $app->input; // Get the path to the package to import $p_dir = $input->getString('import_directory'); @@ -266,7 +269,7 @@ class SupportgroupsModelImport extends JModelLegacy // Did you give us a valid path? if (!file_exists($p_dir)) { - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_PLEASE_ENTER_A_PACKAGE_DIRECTORY')); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_PLEASE_ENTER_A_PACKAGE_DIRECTORY'), 'warning'); return false; } @@ -276,25 +279,20 @@ class SupportgroupsModelImport extends JModelLegacy // Did you give us a valid package? if (!$type) { - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE')); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_PATH_DOES_NOT_HAVE_A_VALID_PACKAGE'), 'warning'); } // check the extention - switch(strtolower(pathinfo($p_dir, PATHINFO_EXTENSION))){ - case 'xls': - case 'ods': - case 'csv': - break; - - default: - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE')); + if(!$this->checkExtension($p_dir)) + { + // set error message + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning'); return false; - break; } $package['packagename'] = null; - $package['dir'] = $p_dir; - $package['type'] = $type; + $package['dir'] = $p_dir; + $package['type'] = $type; return $package; } @@ -307,15 +305,16 @@ class SupportgroupsModelImport extends JModelLegacy */ protected function _getPackageFromUrl() { - $input = JFactory::getApplication()->input; - + $app = JFactory::getApplication(); + $input = $app->input; + // Get the URL of the package to import $url = $input->getString('import_url'); // Did you give us a URL? if (!$url) { - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_ENTER_A_URL')); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_ENTER_A_URL'), 'warning'); return false; } @@ -325,7 +324,7 @@ class SupportgroupsModelImport extends JModelLegacy // Was the package downloaded? if (!$p_file) { - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_INVALID_URL')); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_INVALID_URL'), 'warning'); return false; } @@ -346,35 +345,52 @@ class SupportgroupsModelImport extends JModelLegacy */ protected function check($archivename) { + $app = JFactory::getApplication(); // Clean the name $archivename = JPath::clean($archivename); // check the extention - switch(strtolower(pathinfo($archivename, PATHINFO_EXTENSION))){ + if(!$this->checkExtension($archivename)) + { + // Cleanup the import files + $this->remove($archivename); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE'), 'warning'); + return false; + } + + $config = JFactory::getConfig(); + // set Package Name + $check['packagename'] = $archivename; + + // set directory + $check['dir'] = $config->get('tmp_path'). '/' .$archivename; + + // set type + $check['type'] = $this->getType; + + return $check; + } + + /** + * Check the extension + * + * @param string $file Name of the uploaded file + * + * @return boolean True on success + * + */ + protected function checkExtension($file) + { + // check the extention + switch(strtolower(pathinfo($file, PATHINFO_EXTENSION))) + { case 'xls': case 'ods': case 'csv': + return true; break; - - default: - // Cleanup the import files - $this->remove($archivename); - JError::raiseWarning('', JText::_('COM_SUPPORTGROUPS_IMPORT_MSG_DOES_NOT_HAVE_A_VALID_FILE_TYPE')); - return false; - break; - } - - $config = JFactory::getConfig(); - // set Package Name - $check['packagename'] = $archivename; - - // set directory - $check['dir'] = $config->get('tmp_path'). '/' .$archivename; - - // set type - $check['type'] = $this->getType; - - return $check; + } + return false; } /** @@ -389,8 +405,8 @@ class SupportgroupsModelImport extends JModelLegacy { jimport('joomla.filesystem.file'); - $config = JFactory::getConfig(); - $package = $config->get('tmp_path'). '/' .$package; + $config = JFactory::getConfig(); + $package = $config->get('tmp_path'). '/' .$package; // Is the package file a valid file? if (is_file($package)) @@ -453,11 +469,11 @@ class SupportgroupsModelImport extends JModelLegacy if(SupportgroupsHelper::checkArray($data['array'])) { // get user object - $user = JFactory::getUser(); + $user = JFactory::getUser(); // remove header if it has headers - $id_key = $data['target_headers']['id']; - $published_key = $data['target_headers']['published']; - $ordering_key = $data['target_headers']['ordering']; + $id_key = $data['target_headers']['id']; + $published_key = $data['target_headers']['published']; + $ordering_key = $data['target_headers']['ordering']; // get the first array set $firstSet = reset($data['array']); @@ -475,13 +491,13 @@ class SupportgroupsModelImport extends JModelLegacy // Get a db connection. $db = JFactory::getDbo(); // set some defaults - $todayDate = JFactory::getDate()->toSql(); + $todayDate = JFactory::getDate()->toSql(); // get global action permissions - $canDo = SupportgroupsHelper::getActions($table); - $canEdit = $canDo->get('core.edit'); - $canState = $canDo->get('core.edit.state'); - $canCreate = $canDo->get('core.create'); - $hasAlias = $this->getAliasesUsed($table); + $canDo = SupportgroupsHelper::getActions($table); + $canEdit = $canDo->get('core.edit'); + $canState = $canDo->get('core.edit.state'); + $canCreate = $canDo->get('core.create'); + $hasAlias = $this->getAliasesUsed($table); // prosses the data foreach($data['array'] as $row) { @@ -503,12 +519,11 @@ class SupportgroupsModelImport extends JModelLegacy if($found && $canEdit) { // update item - $id = $row[$id_key]; - $version = $db->loadResult(); + $id = $row[$id_key]; + $version = $db->loadResult(); // reset all buckets - $query = $db->getQuery(true); - $fields = array(); - $version = false; + $query = $db->getQuery(true); + $fields = array(); // Fields to update. foreach($row as $key => $cell) { @@ -531,7 +546,6 @@ class SupportgroupsModelImport extends JModelLegacy if ('version' == $target[$key]) { $cell = (int) $version + 1; - $version = true; } // verify publish authority if ('published' == $target[$key] && !$canState) @@ -554,12 +568,8 @@ class SupportgroupsModelImport extends JModelLegacy } } // load the defaults - $fields[] = $db->quoteName('modified_by') . ' = ' . $db->quote($user->id); - $fields[] = $db->quoteName('modified') . ' = ' . $db->quote($todayDate); - if (!$version) - { - $fields[] = $db->quoteName('version') . " = " . (int) $version + 1; - } + $fields[] = $db->quoteName('modified_by') . ' = ' . $db->quote($user->id); + $fields[] = $db->quoteName('modified') . ' = ' . $db->quote($todayDate); // Conditions for which records should be updated. $conditions = array( $db->quoteName('id') . ' = ' . $id @@ -574,9 +584,9 @@ class SupportgroupsModelImport extends JModelLegacy // insert item $query = $db->getQuery(true); // reset all buckets - $columns = array(); - $values = array(); - $version = false; + $columns = array(); + $values = array(); + $version = false; // Insert columns. Insert values. foreach($row as $key => $cell) { @@ -614,30 +624,30 @@ class SupportgroupsModelImport extends JModelLegacy // set to insert array if(in_array($key, $data['target_headers']) && is_numeric($cell)) { - $columns[] = $target[$key]; - $values[] = $cell; + $columns[] = $target[$key]; + $values[] = $cell; } elseif(in_array($key, $data['target_headers']) && is_string($cell)) { - $columns[] = $target[$key]; - $values[] = $db->quote($cell); + $columns[] = $target[$key]; + $values[] = $db->quote($cell); } elseif(in_array($key, $data['target_headers']) && is_null($cell)) { // if import data is null then set empty - $columns[] = $target[$key]; - $values[] = "''"; + $columns[] = $target[$key]; + $values[] = "''"; } } // load the defaults - $columns[] = 'created_by'; - $values[] = $db->quote($user->id); - $columns[] = 'created'; - $values[] = $db->quote($todayDate); + $columns[] = 'created_by'; + $values[] = $db->quote($user->id); + $columns[] = 'created'; + $values[] = $db->quote($todayDate); if (!$version) { - $columns[] = 'version'; - $values[] = 1; + $columns[] = 'version'; + $values[] = 1; } // Prepare the insert query. $query diff --git a/admin/models/info_type.php b/admin/models/info_type.php new file mode 100644 index 0000000..6ca02f0 --- /dev/null +++ b/admin/models/info_type.php @@ -0,0 +1,956 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla modelform library +jimport('joomla.application.component.modeladmin'); + +/** + * Supportgroups Info_type Model + */ +class SupportgroupsModelInfo_type extends JModelAdmin +{ + /** + * @var string The prefix to use with controller messages. + * @since 1.6 + */ + protected $text_prefix = 'COM_SUPPORTGROUPS'; + + /** + * The type alias for this content type. + * + * @var string + * @since 3.2 + */ + public $typeAlias = 'com_supportgroups.info_type'; + + /** + * Returns a Table object, always creating it + * + * @param type $type The table type to instantiate + * @param string $prefix A prefix for the table class name. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return JTable A database object + * + * @since 1.6 + */ + public function getTable($type = 'info_type', $prefix = 'SupportgroupsTable', $config = array()) + { + return JTable::getInstance($type, $prefix, $config); + } + + /** + * Method to get a single record. + * + * @param integer $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.6 + */ + public function getItem($pk = null) + { + if ($item = parent::getItem($pk)) + { + if (!empty($item->params) && !is_array($item->params)) + { + // Convert the params field to an array. + $registry = new Registry; + $registry->loadString($item->params); + $item->params = $registry->toArray(); + } + + if (!empty($item->metadata)) + { + // Convert the metadata field to an array. + $registry = new Registry; + $registry->loadString($item->metadata); + $item->metadata = $registry->toArray(); + } + + if (!empty($item->id)) + { + $item->tags = new JHelperTags; + $item->tags->getTagIds($item->id, 'com_supportgroups.info_type'); + } + } + + return $item; + } + + /** + * Method to get the record form. + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 1.6 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_supportgroups.info_type', 'info_type', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0, 'INT'); + } + // The back end uses id so we use that the rest of the time and set it to 0 by default. + else + { + $id = $jinput->get('id', 0, 'INT'); + } + + $user = JFactory::getUser(); + + // Check for existing item. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('info_type.edit.state', 'com_supportgroups.info_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('info_type.edit.state', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + // If this is a new item insure the greated by is set. + if (0 == $id) + { + // Set the created_by to this user + $form->setValue('created_by', null, $user->id); + } + // Modify the form based on Edit Creaded By access controls. + if ($id != 0 && (!$user->authorise('info_type.edit.created_by', 'com_supportgroups.info_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('info_type.edit.created_by', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('created_by', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('created_by', 'readonly', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created_by', 'filter', 'unset'); + } + // Modify the form based on Edit Creaded Date access controls. + if ($id != 0 && (!$user->authorise('info_type.edit.created', 'com_supportgroups.info_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('info_type.edit.created', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('created', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created', 'filter', 'unset'); + } + // Modify the form based on Edit Name access controls. + if ($id != 0 && (!$user->authorise('info_type.edit.name', 'com_supportgroups.info_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('info_type.edit.name', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('name', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('name', 'readonly', 'true'); + if (!$form->getValue('name')) + { + // Disable fields while saving. + $form->setFieldAttribute('name', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('name', 'required', 'false'); + } + } + // Modify the form based on Edit Alias access controls. + if ($id != 0 && (!$user->authorise('info_type.edit.alias', 'com_supportgroups.info_type.' . (int) $id)) + || ($id == 0 && !$user->authorise('info_type.edit.alias', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('alias', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('alias', 'readonly', 'true'); + if (!$form->getValue('alias')) + { + // Disable fields while saving. + $form->setFieldAttribute('alias', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('alias', 'required', 'false'); + } + } + // Only load these values if no id is found + if (0 == $id) + { + // Set redirected field name + $redirectedField = $jinput->get('ref', null, 'STRING'); + // Set redirected field value + $redirectedValue = $jinput->get('refid', 0, 'INT'); + if (0 != $redirectedValue && $redirectedField) + { + // Now set the local-redirected field default value + $form->setValue($redirectedField, null, $redirectedValue); + } + } + + return $form; + } + + /** + * Method to get the script that have to be included on the form + * + * @return string script files + */ + public function getScript() + { + return 'administrator/components/com_supportgroups/models/forms/info_type.js'; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->published != -2) + { + return; + } + + $user = JFactory::getUser(); + // The record has been set. Check the record permissions. + return $user->authorise('info_type.delete', 'com_supportgroups.info_type.' . (int) $record->id); + } + return false; + } + + /** + * Method to test whether a record can have its state edited. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + $recordId = (!empty($record->id)) ? $record->id : 0; + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('info_type.edit.state', 'com_supportgroups.info_type.' . (int) $recordId); + if (!$permission && !is_null($permission)) + { + return false; + } + } + // In the absense of better information, revert to the component permissions. + return $user->authorise('info_type.edit.state', 'com_supportgroups'); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * @since 2.5 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // Check specific edit permission then general edit permission. + $user = JFactory::getUser(); + + return $user->authorise('info_type.edit', 'com_supportgroups.info_type.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('info_type.edit', 'com_supportgroups'); + } + + /** + * Prepare and sanitise the table data prior to saving. + * + * @param JTable $table A JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if (isset($table->name)) + { + $table->name = htmlspecialchars_decode($table->name, ENT_QUOTES); + } + + if (isset($table->alias) && empty($table->alias)) + { + $table->generateAlias(); + } + + if (empty($table->id)) + { + $table->created = $date->toSql(); + // set the user + if ($table->created_by == 0 || empty($table->created_by)) + { + $table->created_by = $user->id; + } + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select('MAX(ordering)') + ->from($db->quoteName('#__supportgroups_info_type')); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + else + { + $table->modified = $date->toSql(); + $table->modified_by = $user->id; + } + + if (!empty($table->id)) + { + // Increment the items version number. + $table->version++; + } + } + + /** + * Method to get the data that should be injected in the form. + * + * @return mixed The data for the form. + * + * @since 1.6 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $data = JFactory::getApplication()->getUserState('com_supportgroups.edit.info_type.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get the unique fields of this table. + * + * @return mixed An array of field names, boolean false if none is set. + * + * @since 3.0 + */ + protected function getUniqeFields() + { + return false; + } + + /** + * Method to delete one or more records. + * + * @param array &$pks An array of record primary keys. + * + * @return boolean True if successful, false if an error occurs. + * + * @since 12.2 + */ + public function delete(&$pks) + { + if (!parent::delete($pks)) + { + return false; + } + + return true; + } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } + + /** + * Method to perform batch operations on an item or a set of items. + * + * @param array $commands An array of commands to perform. + * @param array $pks An array of item ids. + * @param array $contexts An array of item contexts. + * + * @return boolean Returns true on success, false on failure. + * + * @since 12.2 + */ + public function batch($commands, $pks, $contexts) + { + // Sanitize ids. + $pks = array_unique($pks); + JArrayHelper::toInteger($pks); + + // Remove any values of zero. + if (array_search(0, $pks, true)) + { + unset($pks[array_search(0, $pks, true)]); + } + + if (empty($pks)) + { + $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); + return false; + } + + $done = false; + + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = SupportgroupsHelper::getActions('info_type'); + $this->batchSet = true; + + if (!$this->canDo->get('core.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + return false; + } + + if ($this->type == false) + { + $type = new JUcmType; + $this->type = $type->getTypeByAlias($this->typeAlias); + } + + $this->tagsObserver = $this->table->getObserverOfClass('JTableObserverTags'); + + if (!empty($commands['move_copy'])) + { + $cmd = JArrayHelper::getValue($commands, 'move_copy', 'c'); + + if ($cmd == 'c') + { + $result = $this->batchCopy($commands, $pks, $contexts); + + if (is_array($result)) + { + foreach ($result as $old => $new) + { + $contexts[$new] = $contexts[$old]; + } + $pks = array_values($result); + } + else + { + return false; + } + } + elseif ($cmd == 'm' && !$this->batchMove($commands, $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (!$done) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + + return false; + } + + // Clear the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch copy items to a new category or current. + * + * @param integer $values The new values. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return mixed An array of new IDs on success, boolean false on failure. + * + * @since 12.2 + */ + protected function batchCopy($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->canDo = SupportgroupsHelper::getActions('info_type'); + } + + if (!$this->canDo->get('info_type.create') && !$this->canDo->get('info_type.batch')) + { + return false; + } + + // get list of uniqe fields + $uniqeFields = $this->getUniqeFields(); + // remove move_copy from array + unset($values['move_copy']); + + // make sure published is set + if (!isset($values['published'])) + { + $values['published'] = 0; + } + elseif (isset($values['published']) && !$this->canDo->get('info_type.edit.state')) + { + $values['published'] = 0; + } + + $newIds = array(); + // Parent exists so let's proceed + while (!empty($pks)) + { + // Pop the first ID off the stack + $pk = array_shift($pks); + + $this->table->reset(); + + // only allow copy if user may edit this item. + if (!$this->user->authorise('info_type.edit', $contexts[$pk])) + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); + + // insert all set values + if (SupportgroupsHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + if (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + // update all uniqe fields + if (SupportgroupsHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $this->table->$uniqeField = $this->generateUniqe($uniqeField,$this->table->$uniqeField); + } + } + + // Reset the ID because we are making a copy + $this->table->id = 0; + + // TODO: Deal with ordering? + // $this->table->ordering = 1; + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + + // Get the new item ID + $newId = $this->table->get('id'); + + // Add the new ID to the array + $newIds[$pk] = $newId; + } + + // Clean the cache + $this->cleanCache(); + + return $newIds; + } + + /** + * Batch move items to a new category + * + * @param integer $value The new category ID. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 12.2 + */ + protected function batchMove($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->canDo = SupportgroupsHelper::getActions('info_type'); + } + + if (!$this->canDo->get('info_type.edit') && !$this->canDo->get('info_type.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // make sure published only updates if user has the permission. + if (isset($values['published']) && !$this->canDo->get('info_type.edit.state')) + { + unset($values['published']); + } + // remove move_copy from array + unset($values['move_copy']); + + // Parent exists so we proceed + foreach ($pks as $pk) + { + if (!$this->user->authorise('info_type.edit', $contexts[$pk])) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + // insert all set values. + if (SupportgroupsHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + // Do special action for access. + if ('access' === $key && strlen($value) > 0) + { + $this->table->$key = $value; + } + elseif (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + $input = JFactory::getApplication()->input; + $filter = JFilterInput::getInstance(); + + // set the metadata to the Item Data + if (isset($data['metadata']) && isset($data['metadata']['author'])) + { + $data['metadata']['author'] = $filter->clean($data['metadata']['author'], 'TRIM'); + + $metadata = new JRegistry; + $metadata->loadArray($data['metadata']); + $data['metadata'] = (string) $metadata; + } + + // Set the Params Items to data + if (isset($data['params']) && is_array($data['params'])) + { + $params = new JRegistry; + $params->loadArray($data['params']); + $data['params'] = (string) $params; + } + + // Alter the name for save as copy + if ($input->get('task') === 'save2copy') + { + $origTable = clone $this->getTable(); + $origTable->load($input->getInt('id')); + + if ($data['name'] == $origTable->name) + { + list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); + $data['name'] = $name; + $data['alias'] = $alias; + } + else + { + if ($data['alias'] == $origTable->alias) + { + $data['alias'] = ''; + } + } + + $data['published'] = 0; + } + + // Automatic handling of alias for empty fields + if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) + { + if ($data['alias'] == null || empty($data['alias'])) + { + if (JFactory::getConfig()->get('unicodeslugs') == 1) + { + $data['alias'] = JFilterOutput::stringURLUnicodeSlug($data['name']); + } + else + { + $data['alias'] = JFilterOutput::stringURLSafe($data['name']); + } + + $table = JTable::getInstance('info_type', 'supportgroupsTable'); + + if ($table->load(array('alias' => $data['alias'])) && ($table->id != $data['id'] || $data['id'] == 0)) + { + $msg = JText::_('COM_SUPPORTGROUPS_INFO_TYPE_SAVE_WARNING'); + } + + $data['alias'] = $this->_generateNewTitle($data['alias']); + + if (isset($msg)) + { + JFactory::getApplication()->enqueueMessage($msg, 'warning'); + } + } + } + + // Alter the uniqe field for save as copy + if ($input->get('task') === 'save2copy') + { + // Automatic handling of other uniqe fields + $uniqeFields = $this->getUniqeFields(); + if (SupportgroupsHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $data[$uniqeField] = $this->generateUniqe($uniqeField,$data[$uniqeField]); + } + } + } + + if (parent::save($data)) + { + return true; + } + return false; + } + + /** + * Method to generate a uniqe value. + * + * @param string $field name. + * @param string $value data. + * + * @return string New value. + * + * @since 3.0 + */ + protected function generateUniqe($field,$value) + { + + // set field value uniqe + $table = $this->getTable(); + + while ($table->load(array($field => $value))) + { + $value = JString::increment($value); + } + + return $value; + } + + /** + * Method to change the title/s & alias. + * + * @param string $alias The alias. + * @param string/array $title The title. + * + * @return array/string Contains the modified title/s and/or alias. + * + */ + protected function _generateNewTitle($alias, $title = null) + { + + // Alter the title/s & alias + $table = $this->getTable(); + + while ($table->load(array('alias' => $alias))) + { + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } + $alias = JString::increment($alias, 'dash'); + } + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; + } +} diff --git a/admin/models/locations.php b/admin/models/info_types.php similarity index 84% rename from admin/models/locations.php rename to admin/models/info_types.php index 36aa57a..0eaf919 100644 --- a/admin/models/locations.php +++ b/admin/models/info_types.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 3 of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups - @subpackage locations.php + @subpackage info_types.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -30,9 +30,9 @@ defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.modellist'); /** - * Locations Model + * Info_types Model */ -class SupportgroupsModelLocations extends JModelList +class SupportgroupsModelInfo_types extends JModelList { public function __construct($config = array()) { @@ -44,8 +44,7 @@ class SupportgroupsModelLocations extends JModelList 'a.ordering','ordering', 'a.created_by','created_by', 'a.modified_by','modified_by', - 'a.name','name', - 'a.region','region' + 'a.name','name' ); } @@ -67,10 +66,7 @@ class SupportgroupsModelLocations extends JModelList $this->context .= '.' . $layout; } $name = $this->getUserStateFromRequest($this->context . '.filter.name', 'filter_name'); - $this->setState('filter.name', $name); - - $region = $this->getUserStateFromRequest($this->context . '.filter.region', 'filter_region'); - $this->setState('filter.region', $region); + $this->setState('filter.name', $name); $sorting = $this->getUserStateFromRequest($this->context . '.filter.sorting', 'filter_sorting', 0, 'int'); $this->setState('filter.sorting', $sorting); @@ -114,7 +110,7 @@ class SupportgroupsModelLocations extends JModelList $user = JFactory::getUser(); foreach ($items as $nr => &$item) { - $access = ($user->authorise('location.access', 'com_supportgroups.location.' . (int) $item->id) && $user->authorise('location.access', 'com_supportgroups')); + $access = ($user->authorise('info_type.access', 'com_supportgroups.info_type.' . (int) $item->id) && $user->authorise('info_type.access', 'com_supportgroups')); if (!$access) { unset($items[$nr]); @@ -122,7 +118,7 @@ class SupportgroupsModelLocations extends JModelList } } - } + } // return items return $items; @@ -145,11 +141,7 @@ class SupportgroupsModelLocations extends JModelList $query->select('a.*'); // From the supportgroups_item table - $query->from($db->quoteName('#__supportgroups_location', 'a')); - - // From the supportgroups_region table. - $query->select($db->quoteName('g.name','region_name')); - $query->join('LEFT', $db->quoteName('#__supportgroups_region', 'g') . ' ON (' . $db->quoteName('a.region') . ' = ' . $db->quoteName('g.id') . ')'); + $query->from($db->quoteName('#__supportgroups_info_type', 'a')); // Filter by published state $published = $this->getState('filter.published'); @@ -186,16 +178,11 @@ class SupportgroupsModelLocations extends JModelList } else { - $search = $db->quote('%' . $db->escape($search, true) . '%'); - $query->where('(a.name LIKE '.$search.' OR a.region LIKE '.$search.' OR g.name LIKE '.$search.')'); + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.name LIKE '.$search.')'); } } - // Filter by region. - if ($region = $this->getState('filter.region')) - { - $query->where('a.region = ' . $db->quote($db->escape($region, true))); - } // Add the list ordering clause. $orderCol = $this->state->get('list.ordering', 'a.id'); @@ -218,6 +205,8 @@ class SupportgroupsModelLocations extends JModelList // setup the query if (SupportgroupsHelper::checkArray($pks)) { + // Set a value to know this is exporting method. + $_export = true; // Get the user object. $user = JFactory::getUser(); // Create a new query object. @@ -227,8 +216,8 @@ class SupportgroupsModelLocations extends JModelList // Select some fields $query->select('a.*'); - // From the supportgroups_location table - $query->from($db->quoteName('#__supportgroups_location', 'a')); + // From the supportgroups_info_type table + $query->from($db->quoteName('#__supportgroups_info_type', 'a')); $query->where('a.id IN (' . implode(',',$pks) . ')'); // Implement View Level Access if (!$user->authorise('core.options', 'com_supportgroups')) @@ -254,7 +243,7 @@ class SupportgroupsModelLocations extends JModelList $user = JFactory::getUser(); foreach ($items as $nr => &$item) { - $access = ($user->authorise('location.access', 'com_supportgroups.location.' . (int) $item->id) && $user->authorise('location.access', 'com_supportgroups')); + $access = ($user->authorise('info_type.access', 'com_supportgroups.info_type.' . (int) $item->id) && $user->authorise('info_type.access', 'com_supportgroups')); if (!$access) { unset($items[$nr]); @@ -289,7 +278,7 @@ class SupportgroupsModelLocations extends JModelList // Get a db connection. $db = JFactory::getDbo(); // get the columns - $columns = $db->getTableColumns("#__supportgroups_location"); + $columns = $db->getTableColumns("#__supportgroups_info_type"); if (SupportgroupsHelper::checkArray($columns)) { // remove the headers you don't import/export. @@ -321,8 +310,7 @@ class SupportgroupsModelLocations extends JModelList $id .= ':' . $this->getState('filter.ordering'); $id .= ':' . $this->getState('filter.created_by'); $id .= ':' . $this->getState('filter.modified_by'); - $id .= ':' . $this->getState('filter.name'); - $id .= ':' . $this->getState('filter.region'); + $id .= ':' . $this->getState('filter.name'); return parent::getStoreId($id); } @@ -346,7 +334,7 @@ class SupportgroupsModelLocations extends JModelList // reset query $query = $db->getQuery(true); $query->select('*'); - $query->from($db->quoteName('#__supportgroups_location')); + $query->from($db->quoteName('#__supportgroups_info_type')); $db->setQuery($query); $db->execute(); if ($db->getNumRows()) @@ -369,7 +357,7 @@ class SupportgroupsModelLocations extends JModelList ); // Check table - $query->update($db->quoteName('#__supportgroups_location'))->set($fields)->where($conditions); + $query->update($db->quoteName('#__supportgroups_info_type'))->set($fields)->where($conditions); $db->setQuery($query); diff --git a/admin/models/payment.php b/admin/models/payment.php index bc123e2..db83379 100644 --- a/admin/models/payment.php +++ b/admin/models/payment.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage payment.php @author Llewellyn van der Merwe @@ -79,7 +79,7 @@ class SupportgroupsModelPayment extends JModelAdmin { if ($item = parent::getItem($pk)) { - if (!empty($item->params)) + if (!empty($item->params) && !is_array($item->params)) { // Convert the params field to an array. $registry = new Registry; @@ -116,7 +116,8 @@ class SupportgroupsModelPayment extends JModelAdmin * @since 1.6 */ public function getForm($data = array(), $loadData = true) - { // Get the form. + { + // Get the form. $form = $this->loadForm('com_supportgroups.payment', 'payment', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) @@ -429,6 +430,26 @@ class SupportgroupsModelPayment extends JModelAdmin return true; } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } /** * Method to perform batch operations on an item or a set of items. @@ -545,8 +566,6 @@ class SupportgroupsModelPayment extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('payment'); } @@ -571,7 +590,6 @@ class SupportgroupsModelPayment extends JModelAdmin } $newIds = array(); - // Parent exists so let's proceed while (!empty($pks)) { @@ -581,17 +599,11 @@ class SupportgroupsModelPayment extends JModelAdmin $this->table->reset(); // only allow copy if user may edit this item. - if (!$this->user->authorise('payment.edit', $contexts[$pk])) - { - // Not fatal error - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); - continue; - } // Check that the row actually exists @@ -601,7 +613,6 @@ class SupportgroupsModelPayment extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -612,7 +623,11 @@ class SupportgroupsModelPayment extends JModelAdmin } } - $this->table->support_group = $this->generateUniqe('support_group',$this->table->support_group); + // Only for strings + if (SupportgroupsHelper::checkString($this->table->support_group) && !is_numeric($this->table->support_group)) + { + $this->table->support_group = $this->generateUniqe('support_group',$this->table->support_group); + } // insert all set values if (SupportgroupsHelper::checkArray($values)) @@ -694,8 +709,6 @@ class SupportgroupsModelPayment extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('payment'); } @@ -719,7 +732,6 @@ class SupportgroupsModelPayment extends JModelAdmin if (!$this->user->authorise('payment.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); - return false; } @@ -730,7 +742,6 @@ class SupportgroupsModelPayment extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -747,7 +758,7 @@ class SupportgroupsModelPayment extends JModelAdmin foreach ($values as $key => $value) { // Do special action for access. - if ('access' == $key && strlen($value) > 0) + if ('access' === $key && strlen($value) > 0) { $this->table->$key = $value; } @@ -820,7 +831,7 @@ class SupportgroupsModelPayment extends JModelAdmin } // Alter the uniqe field for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { // Automatic handling of other uniqe fields $uniqeFields = $this->getUniqeFields(); @@ -865,9 +876,9 @@ class SupportgroupsModelPayment extends JModelAdmin } /** - * Method to change the title & alias. + * Method to change the title * - * @param string $title The title. + * @param string $title The title. * * @return array Contains the modified title and alias. * diff --git a/admin/models/payments.php b/admin/models/payments.php index 3f322aa..25b5b8e 100644 --- a/admin/models/payments.php +++ b/admin/models/payments.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage payments.php @author Llewellyn van der Merwe @@ -147,7 +147,7 @@ class SupportgroupsModelPayments extends JModelList $item->year = $this->selectionTranslation($item->year, 'year'); } } - + // return items return $items; @@ -161,7 +161,7 @@ class SupportgroupsModelPayments extends JModelList public function selectionTranslation($value,$name) { // Array of year language strings - if ($name == 'year') + if ($name === 'year') { $yearArray = array( 0 => 'COM_SUPPORTGROUPS_PAYMENT_SELECT_A_YEAR', @@ -254,7 +254,7 @@ class SupportgroupsModelPayments extends JModelList } else { - $search = $db->quote('%' . $db->escape($search, true) . '%'); + $search = $db->quote('%' . $db->escape($search) . '%'); $query->where('(a.support_group LIKE '.$search.' OR g.name LIKE '.$search.' OR a.year LIKE '.$search.' OR a.amount LIKE '.$search.')'); } } @@ -262,12 +262,12 @@ class SupportgroupsModelPayments extends JModelList // Filter by support_group. if ($support_group = $this->getState('filter.support_group')) { - $query->where('a.support_group = ' . $db->quote($db->escape($support_group, true))); + $query->where('a.support_group = ' . $db->quote($db->escape($support_group))); } // Filter by Year. if ($year = $this->getState('filter.year')) { - $query->where('a.year = ' . $db->quote($db->escape($year, true))); + $query->where('a.year = ' . $db->quote($db->escape($year))); } // Add the list ordering clause. @@ -291,6 +291,8 @@ class SupportgroupsModelPayments extends JModelList // setup the query if (SupportgroupsHelper::checkArray($pks)) { + // Set a value to know this is exporting method. + $_export = true; // Get the user object. $user = JFactory::getUser(); // Create a new query object. diff --git a/admin/models/region.php b/admin/models/region.php index e80060c..5834c33 100644 --- a/admin/models/region.php +++ b/admin/models/region.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage region.php @author Llewellyn van der Merwe @@ -79,7 +79,7 @@ class SupportgroupsModelRegion extends JModelAdmin { if ($item = parent::getItem($pk)) { - if (!empty($item->params)) + if (!empty($item->params) && !is_array($item->params)) { // Convert the params field to an array. $registry = new Registry; @@ -100,94 +100,9 @@ class SupportgroupsModelRegion extends JModelAdmin $item->tags = new JHelperTags; $item->tags->getTagIds($item->id, 'com_supportgroups.region'); } - } - $this->regionvvvx = $item->id; + } return $item; - } - - /** - * Method to get list data. - * - * @return mixed An array of data items on success, false on failure. - */ - public function getVvxlocations() - { - // Get the user object. - $user = JFactory::getUser(); - // Create a new query object. - $db = JFactory::getDBO(); - $query = $db->getQuery(true); - - // Select some fields - $query->select('a.*'); - - // From the supportgroups_location table - $query->from($db->quoteName('#__supportgroups_location', 'a')); - - // From the supportgroups_region table. - $query->select($db->quoteName('g.name','region_name')); - $query->join('LEFT', $db->quoteName('#__supportgroups_region', 'g') . ' ON (' . $db->quoteName('a.region') . ' = ' . $db->quoteName('g.id') . ')'); - - // Filter by regionvvvx global. - $regionvvvx = $this->regionvvvx; - if (is_numeric($regionvvvx )) - { - $query->where('a.region = ' . (int) $regionvvvx ); - } - elseif (is_string($regionvvvx)) - { - $query->where('a.region = ' . $db->quote($regionvvvx)); - } - else - { - $query->where('a.region = -5'); - } - - // Join over the asset groups. - $query->select('ag.title AS access_level'); - $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); - // Filter by access level. - if ($access = $this->getState('filter.access')) - { - $query->where('a.access = ' . (int) $access); - } - // Implement View Level Access - if (!$user->authorise('core.options', 'com_supportgroups')) - { - $groups = implode(',', $user->getAuthorisedViewLevels()); - $query->where('a.access IN (' . $groups . ')'); - } - - // Order the results by ordering - $query->order('a.ordering ASC'); - - // Load the items - $db->setQuery($query); - $db->execute(); - if ($db->getNumRows()) - { - $items = $db->loadObjectList(); - - // set values to display correctly. - if (SupportgroupsHelper::checkArray($items)) - { - // get user object. - $user = JFactory::getUser(); - foreach ($items as $nr => &$item) - { - $access = ($user->authorise('location.access', 'com_supportgroups.location.' . (int) $item->id) && $user->authorise('location.access', 'com_supportgroups')); - if (!$access) - { - unset($items[$nr]); - continue; - } - - } - } - return $items; - } - return false; } /** @@ -201,7 +116,8 @@ class SupportgroupsModelRegion extends JModelAdmin * @since 1.6 */ public function getForm($data = array(), $loadData = true) - { // Get the form. + { + // Get the form. $form = $this->loadForm('com_supportgroups.region', 'region', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) @@ -294,6 +210,22 @@ class SupportgroupsModelRegion extends JModelAdmin $form->setFieldAttribute('country', 'required', 'false'); } } + // Modify the form based on Edit Alias access controls. + if ($id != 0 && (!$user->authorise('region.edit.alias', 'com_supportgroups.region.' . (int) $id)) + || ($id == 0 && !$user->authorise('region.edit.alias', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('alias', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('alias', 'readonly', 'true'); + if (!$form->getValue('alias')) + { + // Disable fields while saving. + $form->setFieldAttribute('alias', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('alias', 'required', 'false'); + } + } // Only load these values if no id is found if (0 == $id) { @@ -498,6 +430,26 @@ class SupportgroupsModelRegion extends JModelAdmin return true; } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } /** * Method to perform batch operations on an item or a set of items. @@ -614,8 +566,6 @@ class SupportgroupsModelRegion extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('region'); } @@ -640,7 +590,6 @@ class SupportgroupsModelRegion extends JModelAdmin } $newIds = array(); - // Parent exists so let's proceed while (!empty($pks)) { @@ -650,17 +599,11 @@ class SupportgroupsModelRegion extends JModelAdmin $this->table->reset(); // only allow copy if user may edit this item. - if (!$this->user->authorise('region.edit', $contexts[$pk])) - { - // Not fatal error - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); - continue; - } // Check that the row actually exists @@ -670,7 +613,6 @@ class SupportgroupsModelRegion extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -680,8 +622,7 @@ class SupportgroupsModelRegion extends JModelAdmin continue; } } - - $this->table->name = $this->generateUniqe('name',$this->table->name); + list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); // insert all set values if (SupportgroupsHelper::checkArray($values)) @@ -763,8 +704,6 @@ class SupportgroupsModelRegion extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('region'); } @@ -788,7 +727,6 @@ class SupportgroupsModelRegion extends JModelAdmin if (!$this->user->authorise('region.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); - return false; } @@ -799,7 +737,6 @@ class SupportgroupsModelRegion extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -816,7 +753,7 @@ class SupportgroupsModelRegion extends JModelAdmin foreach ($values as $key => $value) { // Do special action for access. - if ('access' == $key && strlen($value) > 0) + if ('access' === $key && strlen($value) > 0) { $this->table->$key = $value; } @@ -888,8 +825,61 @@ class SupportgroupsModelRegion extends JModelAdmin $data['params'] = (string) $params; } + // Alter the name for save as copy + if ($input->get('task') === 'save2copy') + { + $origTable = clone $this->getTable(); + $origTable->load($input->getInt('id')); + + if ($data['name'] == $origTable->name) + { + list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); + $data['name'] = $name; + $data['alias'] = $alias; + } + else + { + if ($data['alias'] == $origTable->alias) + { + $data['alias'] = ''; + } + } + + $data['published'] = 0; + } + + // Automatic handling of alias for empty fields + if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) + { + if ($data['alias'] == null || empty($data['alias'])) + { + if (JFactory::getConfig()->get('unicodeslugs') == 1) + { + $data['alias'] = JFilterOutput::stringURLUnicodeSlug($data['name']); + } + else + { + $data['alias'] = JFilterOutput::stringURLSafe($data['name']); + } + + $table = JTable::getInstance('region', 'supportgroupsTable'); + + if ($table->load(array('alias' => $data['alias'])) && ($table->id != $data['id'] || $data['id'] == 0)) + { + $msg = JText::_('COM_SUPPORTGROUPS_REGION_SAVE_WARNING'); + } + + $data['alias'] = $this->_generateNewTitle($data['alias']); + + if (isset($msg)) + { + JFactory::getApplication()->enqueueMessage($msg, 'warning'); + } + } + } + // Alter the uniqe field for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { // Automatic handling of other uniqe fields $uniqeFields = $this->getUniqeFields(); @@ -934,24 +924,49 @@ class SupportgroupsModelRegion extends JModelAdmin } /** - * Method to change the title & alias. + * Method to change the title/s & alias. * - * @param string $title The title. + * @param string $alias The alias. + * @param string/array $title The title. * - * @return array Contains the modified title and alias. + * @return array/string Contains the modified title/s and/or alias. * */ - protected function _generateNewTitle($title) + protected function _generateNewTitle($alias, $title = null) { - // Alter the title + // Alter the title/s & alias $table = $this->getTable(); - while ($table->load(array('title' => $title))) + while ($table->load(array('alias' => $alias))) { - $title = JString::increment($title); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } + $alias = JString::increment($alias, 'dash'); } - - return $title; + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; } } diff --git a/admin/models/regions.php b/admin/models/regions.php index e1e19f0..3e44cf9 100644 --- a/admin/models/regions.php +++ b/admin/models/regions.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage regions.php @author Llewellyn van der Merwe @@ -122,7 +122,7 @@ class SupportgroupsModelRegions extends JModelList } } - } + } // return items return $items; @@ -186,7 +186,7 @@ class SupportgroupsModelRegions extends JModelList } else { - $search = $db->quote('%' . $db->escape($search, true) . '%'); + $search = $db->quote('%' . $db->escape($search) . '%'); $query->where('(a.name LIKE '.$search.' OR a.country LIKE '.$search.' OR g.name LIKE '.$search.')'); } } @@ -194,7 +194,7 @@ class SupportgroupsModelRegions extends JModelList // Filter by country. if ($country = $this->getState('filter.country')) { - $query->where('a.country = ' . $db->quote($db->escape($country, true))); + $query->where('a.country = ' . $db->quote($db->escape($country))); } // Add the list ordering clause. @@ -218,6 +218,8 @@ class SupportgroupsModelRegions extends JModelList // setup the query if (SupportgroupsHelper::checkArray($pks)) { + // Set a value to know this is exporting method. + $_export = true; // Get the user object. $user = JFactory::getUser(); // Create a new query object. diff --git a/admin/models/support_group.php b/admin/models/support_group.php index 6c237ef..00ca1dc 100644 --- a/admin/models/support_group.php +++ b/admin/models/support_group.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage support_group.php @author Llewellyn van der Merwe @@ -79,7 +79,7 @@ class SupportgroupsModelSupport_group extends JModelAdmin { if ($item = parent::getItem($pk)) { - if (!empty($item->params)) + if (!empty($item->params) && !is_array($item->params)) { // Convert the params field to an array. $registry = new Registry; @@ -93,6 +93,12 @@ class SupportgroupsModelSupport_group extends JModelAdmin $registry = new Registry; $registry->loadString($item->metadata); $item->metadata = $registry->toArray(); + } + + if (!empty($item->info)) + { + // JSON Decode info. + $item->info = json_decode($item->info); } if (!empty($item->id)) @@ -160,6 +166,7 @@ class SupportgroupsModelSupport_group extends JModelAdmin } // Order the results by ordering + $query->order('a.published ASC'); $query->order('a.ordering ASC'); // Load the items @@ -219,7 +226,7 @@ class SupportgroupsModelSupport_group extends JModelAdmin public function selectionTranslationVvvpayments($value,$name) { // Array of year language strings - if ($name == 'year') + if ($name === 'year') { $yearArray = array( 0 => 'COM_SUPPORTGROUPS_PAYMENT_SELECT_A_YEAR', @@ -265,7 +272,8 @@ class SupportgroupsModelSupport_group extends JModelAdmin * @since 1.6 */ public function getForm($data = array(), $loadData = true) - { // Get the form. + { + // Get the form. $form = $this->loadForm('com_supportgroups.support_group', 'support_group', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) @@ -358,36 +366,36 @@ class SupportgroupsModelSupport_group extends JModelAdmin $form->setFieldAttribute('phone', 'required', 'false'); } } - // Modify the form based on Edit Location access controls. - if ($id != 0 && (!$user->authorise('support_group.edit.location', 'com_supportgroups.support_group.' . (int) $id)) - || ($id == 0 && !$user->authorise('support_group.edit.location', 'com_supportgroups'))) + // Modify the form based on Edit Area access controls. + if ($id != 0 && (!$user->authorise('support_group.edit.area', 'com_supportgroups.support_group.' . (int) $id)) + || ($id == 0 && !$user->authorise('support_group.edit.area', 'com_supportgroups'))) { // Disable fields for display. - $form->setFieldAttribute('location', 'disabled', 'true'); + $form->setFieldAttribute('area', 'disabled', 'true'); // Disable fields for display. - $form->setFieldAttribute('location', 'readonly', 'true'); - if (!$form->getValue('location')) + $form->setFieldAttribute('area', 'readonly', 'true'); + if (!$form->getValue('area')) { // Disable fields while saving. - $form->setFieldAttribute('location', 'filter', 'unset'); + $form->setFieldAttribute('area', 'filter', 'unset'); // Disable fields while saving. - $form->setFieldAttribute('location', 'required', 'false'); + $form->setFieldAttribute('area', 'required', 'false'); } } - // Modify the form based on Edit Clinic access controls. - if ($id != 0 && (!$user->authorise('support_group.edit.clinic', 'com_supportgroups.support_group.' . (int) $id)) - || ($id == 0 && !$user->authorise('support_group.edit.clinic', 'com_supportgroups'))) + // Modify the form based on Edit Facility access controls. + if ($id != 0 && (!$user->authorise('support_group.edit.facility', 'com_supportgroups.support_group.' . (int) $id)) + || ($id == 0 && !$user->authorise('support_group.edit.facility', 'com_supportgroups'))) { // Disable fields for display. - $form->setFieldAttribute('clinic', 'disabled', 'true'); + $form->setFieldAttribute('facility', 'disabled', 'true'); // Disable fields for display. - $form->setFieldAttribute('clinic', 'readonly', 'true'); - if (!$form->getValue('clinic')) + $form->setFieldAttribute('facility', 'readonly', 'true'); + if (!$form->getValue('facility')) { // Disable fields while saving. - $form->setFieldAttribute('clinic', 'filter', 'unset'); + $form->setFieldAttribute('facility', 'filter', 'unset'); // Disable fields while saving. - $form->setFieldAttribute('clinic', 'required', 'false'); + $form->setFieldAttribute('facility', 'required', 'false'); } } // Modify the form based on Edit Male access controls. @@ -422,6 +430,38 @@ class SupportgroupsModelSupport_group extends JModelAdmin $form->setFieldAttribute('female', 'required', 'false'); } } + // Modify the form based on Edit Alias access controls. + if ($id != 0 && (!$user->authorise('support_group.edit.alias', 'com_supportgroups.support_group.' . (int) $id)) + || ($id == 0 && !$user->authorise('support_group.edit.alias', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('alias', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('alias', 'readonly', 'true'); + if (!$form->getValue('alias')) + { + // Disable fields while saving. + $form->setFieldAttribute('alias', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('alias', 'required', 'false'); + } + } + // Modify the form based on Edit Details access controls. + if ($id != 0 && (!$user->authorise('support_group.edit.details', 'com_supportgroups.support_group.' . (int) $id)) + || ($id == 0 && !$user->authorise('support_group.edit.details', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('details', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('details', 'readonly', 'true'); + if (!$form->getValue('details')) + { + // Disable fields while saving. + $form->setFieldAttribute('details', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('details', 'required', 'false'); + } + } // Modify the form based on Edit Female Art access controls. if ($id != 0 && (!$user->authorise('support_group.edit.female_art', 'com_supportgroups.support_group.' . (int) $id)) || ($id == 0 && !$user->authorise('support_group.edit.female_art', 'com_supportgroups'))) @@ -470,6 +510,22 @@ class SupportgroupsModelSupport_group extends JModelAdmin $form->setFieldAttribute('male_children', 'required', 'false'); } } + // Modify the form based on Edit Info access controls. + if ($id != 0 && (!$user->authorise('support_group.edit.info', 'com_supportgroups.support_group.' . (int) $id)) + || ($id == 0 && !$user->authorise('support_group.edit.info', 'com_supportgroups'))) + { + // Disable fields for display. + $form->setFieldAttribute('info', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('info', 'readonly', 'true'); + if (!$form->getValue('info')) + { + // Disable fields while saving. + $form->setFieldAttribute('info', 'filter', 'unset'); + // Disable fields while saving. + $form->setFieldAttribute('info', 'required', 'false'); + } + } // Only load these values if no id is found if (0 == $id) { @@ -674,6 +730,26 @@ class SupportgroupsModelSupport_group extends JModelAdmin return true; } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } /** * Method to perform batch operations on an item or a set of items. @@ -790,8 +866,6 @@ class SupportgroupsModelSupport_group extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('support_group'); } @@ -816,7 +890,6 @@ class SupportgroupsModelSupport_group extends JModelAdmin } $newIds = array(); - // Parent exists so let's proceed while (!empty($pks)) { @@ -826,17 +899,11 @@ class SupportgroupsModelSupport_group extends JModelAdmin $this->table->reset(); // only allow copy if user may edit this item. - if (!$this->user->authorise('support_group.edit', $contexts[$pk])) - { - // Not fatal error - $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); - continue; - } // Check that the row actually exists @@ -846,7 +913,6 @@ class SupportgroupsModelSupport_group extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -856,8 +922,7 @@ class SupportgroupsModelSupport_group extends JModelAdmin continue; } } - - $this->table->name = $this->generateUniqe('name',$this->table->name); + list($this->table->name, $this->table->alias) = $this->_generateNewTitle($this->table->alias, $this->table->name); // insert all set values if (SupportgroupsHelper::checkArray($values)) @@ -939,8 +1004,6 @@ class SupportgroupsModelSupport_group extends JModelAdmin $this->user = JFactory::getUser(); $this->table = $this->getTable(); $this->tableClassName = get_class($this->table); - $this->contentType = new JUcmType; - $this->type = $this->contentType->getTypeByTable($this->tableClassName); $this->canDo = SupportgroupsHelper::getActions('support_group'); } @@ -964,7 +1027,6 @@ class SupportgroupsModelSupport_group extends JModelAdmin if (!$this->user->authorise('support_group.edit', $contexts[$pk])) { $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); - return false; } @@ -975,7 +1037,6 @@ class SupportgroupsModelSupport_group extends JModelAdmin { // Fatal error $this->setError($error); - return false; } else @@ -992,7 +1053,7 @@ class SupportgroupsModelSupport_group extends JModelAdmin foreach ($values as $key => $value) { // Do special action for access. - if ('access' == $key && strlen($value) > 0) + if ('access' === $key && strlen($value) > 0) { $this->table->$key = $value; } @@ -1054,7 +1115,19 @@ class SupportgroupsModelSupport_group extends JModelAdmin $metadata = new JRegistry; $metadata->loadArray($data['metadata']); $data['metadata'] = (string) $metadata; - } + } + + // Set the empty info item to data + if (!isset($data['info'])) + { + $data['info'] = ''; + } + + // Set the info string to JSON string. + if (isset($data['info'])) + { + $data['info'] = (string) json_encode($data['info']); + } // Set the Params Items to data if (isset($data['params']) && is_array($data['params'])) @@ -1064,8 +1137,61 @@ class SupportgroupsModelSupport_group extends JModelAdmin $data['params'] = (string) $params; } + // Alter the name for save as copy + if ($input->get('task') === 'save2copy') + { + $origTable = clone $this->getTable(); + $origTable->load($input->getInt('id')); + + if ($data['name'] == $origTable->name) + { + list($name, $alias) = $this->_generateNewTitle($data['alias'], $data['name']); + $data['name'] = $name; + $data['alias'] = $alias; + } + else + { + if ($data['alias'] == $origTable->alias) + { + $data['alias'] = ''; + } + } + + $data['published'] = 0; + } + + // Automatic handling of alias for empty fields + if (in_array($input->get('task'), array('apply', 'save', 'save2new')) && (int) $input->get('id') == 0) + { + if ($data['alias'] == null || empty($data['alias'])) + { + if (JFactory::getConfig()->get('unicodeslugs') == 1) + { + $data['alias'] = JFilterOutput::stringURLUnicodeSlug($data['name']); + } + else + { + $data['alias'] = JFilterOutput::stringURLSafe($data['name']); + } + + $table = JTable::getInstance('support_group', 'supportgroupsTable'); + + if ($table->load(array('alias' => $data['alias'])) && ($table->id != $data['id'] || $data['id'] == 0)) + { + $msg = JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_SAVE_WARNING'); + } + + $data['alias'] = $this->_generateNewTitle($data['alias']); + + if (isset($msg)) + { + JFactory::getApplication()->enqueueMessage($msg, 'warning'); + } + } + } + // Alter the uniqe field for save as copy - if ($input->get('task') == 'save2copy') + if ($input->get('task') === 'save2copy') { // Automatic handling of other uniqe fields $uniqeFields = $this->getUniqeFields(); @@ -1110,24 +1236,49 @@ class SupportgroupsModelSupport_group extends JModelAdmin } /** - * Method to change the title & alias. + * Method to change the title/s & alias. * - * @param string $title The title. + * @param string $alias The alias. + * @param string/array $title The title. * - * @return array Contains the modified title and alias. + * @return array/string Contains the modified title/s and/or alias. * */ - protected function _generateNewTitle($title) + protected function _generateNewTitle($alias, $title = null) { - // Alter the title + // Alter the title/s & alias $table = $this->getTable(); - while ($table->load(array('title' => $title))) + while ($table->load(array('alias' => $alias))) { - $title = JString::increment($title); + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + foreach($title as $nr => &$_title) + { + $_title = JString::increment($_title); + } + } + // Make sure we have a title + elseif ($title) + { + $title = JString::increment($title); + } + $alias = JString::increment($alias, 'dash'); } - - return $title; + // Check if this is an array of titles + if (SupportgroupsHelper::checkArray($title)) + { + $title[] = $alias; + return $title; + } + // Make sure we have a title + elseif ($title) + { + return array($title, $alias); + } + // We only had an alias + return $alias; } } diff --git a/admin/models/support_groups.php b/admin/models/support_groups.php index b7a4285..0ed8469 100644 --- a/admin/models/support_groups.php +++ b/admin/models/support_groups.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage support_groups.php @author Llewellyn van der Merwe @@ -46,14 +46,180 @@ class SupportgroupsModelSupport_groups extends JModelList 'a.modified_by','modified_by', 'a.name','name', 'a.phone','phone', - 'a.location','location', - 'a.clinic','clinic', + 'a.area','area', + 'a.facility','facility', 'a.male','male', 'a.female','female' ); } parent::__construct($config); + } + + /** + * Method to get list export data. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getSmartExport($pks) + { + // setup the query + if (SupportgroupsHelper::checkArray($pks)) + { + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select($db->quoteName( + array('a.id','a.name','a.phone','g.name','r.name','c.name','h.name','a.female','a.female_art','a.female_children','a.male','a.male_art','a.male_children','a.info'), + array('id','name','phone','area','region','country','facility','female','female_art','female_children','male','male_art','male_children','info'))); + + $query->select($db->quoteName( + array('at.name','ft.name'), + array('area_type','facility_type'))); + + // From the supportgroups_support_group table + $query->from($db->quoteName('#__supportgroups_support_group', 'a')); + $query->where('a.id IN (' . implode(',',$pks) . ')'); + + // we convert all ids to the actual names for export + $query->join('LEFT', $db->quoteName('#__supportgroups_area', 'g') . ' ON (' . $db->quoteName('a.area') . ' = ' . $db->quoteName('g.id') . ')'); + $query->join('LEFT', $db->quoteName('#__supportgroups_facility', 'h') . ' ON (' . $db->quoteName('a.facility') . ' = ' . $db->quoteName('h.id') . ')'); + $query->join('LEFT', $db->quoteName('#__supportgroups_area_type', 'at') . ' ON (' . $db->quoteName('g.area_type') . ' = ' . $db->quoteName('at.id') . ')'); + $query->join('LEFT', $db->quoteName('#__supportgroups_region', 'r') . ' ON (' . $db->quoteName('g.region') . ' = ' . $db->quoteName('r.id') . ')'); + $query->join('LEFT', $db->quoteName('#__supportgroups_country', 'c') . ' ON (' . $db->quoteName('r.country') . ' = ' . $db->quoteName('c.id') . ')'); + $query->join('LEFT', $db->quoteName('#__supportgroups_facility_type', 'ft') . ' ON (' . $db->quoteName('h.facility_type') . ' = ' . $db->quoteName('ft.id') . ')'); + + // Implement View Level Access + if (!$user->authorise('core.options', 'com_supportgroups')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + + // Order the results by ordering + $query->order('a.ordering ASC'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + $information = $this->getInformationKeys(); + // set values to display correctly. + if (SupportgroupsHelper::checkArray($items)) + { + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('support_group.access', 'com_supportgroups.support_group.' . (int) $item->id) && $user->authorise('support_group.access', 'com_supportgroups')); + if (!$access) + { + unset($items[$nr]); + continue; + } + // set the area type + $item->area = $item->area . ' (' . $item->area_type . ')'; + // set the facility type + $item->facility = $item->facility . ' (' . $item->facility_type . ')'; + // clear those values + unset($item->area_type); + unset($item->facility_type); + if (SupportgroupsHelper::checkArray($information)) + { + // load information + if (SupportgroupsHelper::checkJson($item->info)) + { + $item->info = json_decode($item->info, true); + } + foreach ($information as $info => $name) + { + if (in_array($info, $item->info)) + { + $item->$name = 'yes'; + } + else + { + $item->$name = 'no'; + } + } + } + unset($item->info); + } + } + // Add headers to items array. + $headers = new stdClass(); + $headers->id = 'ID'; + $headers->name = 'Name'; + $headers->phone = 'Phone'; + $headers->area = 'Area'; + $headers->region = 'Region'; + $headers->country = 'Country'; + $headers->facility = 'Facility'; + $headers->female = 'Female'; + $headers->female_art = 'Female art'; + $headers->female_children = 'Female children'; + $headers->male = 'Male'; + $headers->male_art = 'Male art'; + $headers->male_children = 'Male children'; + if (SupportgroupsHelper::checkArray($information)) + { + // load information Headers + foreach ($information as $info => $name) + { + $key = SupportgroupsHelper::safeString($name); + $headers->$key = $name; + } + } + if (SupportgroupsHelper::checkObject($headers)) + { + array_unshift($items,$headers); + } + return $items; + } + } + return false; + } + + /** + * Method to get the information keys + * + * @return array + */ + protected function getInformationKeys() + { + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select($db->quoteName( + array('a.id','a.name','b.name'), + array('id','name','type'))); + + // From the supportgroups_support_group table + $query->from($db->quoteName('#__supportgroups_additional_info', 'a')); + + // we convert all ids to the actual names for export + $query->join('LEFT', $db->quoteName('#__supportgroups_info_type', 'b') . ' ON (' . $db->quoteName('a.info_type') . ' = ' . $db->quoteName('b.id') . ')'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + $bucket = array(); + foreach ($items as $item) + { + $bucket[$item->id] = $item->name .' (' . $item->type . ')'; + } + return $bucket; + } + return false; } /** @@ -76,11 +242,11 @@ class SupportgroupsModelSupport_groups extends JModelList $phone = $this->getUserStateFromRequest($this->context . '.filter.phone', 'filter_phone'); $this->setState('filter.phone', $phone); - $location = $this->getUserStateFromRequest($this->context . '.filter.location', 'filter_location'); - $this->setState('filter.location', $location); + $area = $this->getUserStateFromRequest($this->context . '.filter.area', 'filter_area'); + $this->setState('filter.area', $area); - $clinic = $this->getUserStateFromRequest($this->context . '.filter.clinic', 'filter_clinic'); - $this->setState('filter.clinic', $clinic); + $facility = $this->getUserStateFromRequest($this->context . '.filter.facility', 'filter_facility'); + $this->setState('filter.facility', $facility); $male = $this->getUserStateFromRequest($this->context . '.filter.male', 'filter_male'); $this->setState('filter.male', $male); @@ -138,7 +304,7 @@ class SupportgroupsModelSupport_groups extends JModelList } } - } + } // return items return $items; @@ -163,13 +329,13 @@ class SupportgroupsModelSupport_groups extends JModelList // From the supportgroups_item table $query->from($db->quoteName('#__supportgroups_support_group', 'a')); - // From the supportgroups_location table. - $query->select($db->quoteName('g.name','location_name')); - $query->join('LEFT', $db->quoteName('#__supportgroups_location', 'g') . ' ON (' . $db->quoteName('a.location') . ' = ' . $db->quoteName('g.id') . ')'); + // From the supportgroups_area table. + $query->select($db->quoteName('g.name','area_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_area', 'g') . ' ON (' . $db->quoteName('a.area') . ' = ' . $db->quoteName('g.id') . ')'); - // From the supportgroups_clinic table. - $query->select($db->quoteName('h.name','clinic_name')); - $query->join('LEFT', $db->quoteName('#__supportgroups_clinic', 'h') . ' ON (' . $db->quoteName('a.clinic') . ' = ' . $db->quoteName('h.id') . ')'); + // From the supportgroups_facility table. + $query->select($db->quoteName('h.name','facility_name')); + $query->join('LEFT', $db->quoteName('#__supportgroups_facility', 'h') . ' ON (' . $db->quoteName('a.facility') . ' = ' . $db->quoteName('h.id') . ')'); // Filter by published state $published = $this->getState('filter.published'); @@ -206,20 +372,20 @@ class SupportgroupsModelSupport_groups extends JModelList } else { - $search = $db->quote('%' . $db->escape($search, true) . '%'); - $query->where('(a.name LIKE '.$search.' OR a.phone LIKE '.$search.' OR a.location LIKE '.$search.' OR g.name LIKE '.$search.' OR a.clinic LIKE '.$search.' OR h.name LIKE '.$search.')'); + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.name LIKE '.$search.' OR a.phone LIKE '.$search.' OR a.area LIKE '.$search.' OR g.name LIKE '.$search.' OR a.facility LIKE '.$search.' OR h.name LIKE '.$search.' OR a.details LIKE '.$search.')'); } } - // Filter by location. - if ($location = $this->getState('filter.location')) + // Filter by area. + if ($area = $this->getState('filter.area')) { - $query->where('a.location = ' . $db->quote($db->escape($location, true))); + $query->where('a.area = ' . $db->quote($db->escape($area))); } - // Filter by clinic. - if ($clinic = $this->getState('filter.clinic')) + // Filter by facility. + if ($facility = $this->getState('filter.facility')) { - $query->where('a.clinic = ' . $db->quote($db->escape($clinic, true))); + $query->where('a.facility = ' . $db->quote($db->escape($facility))); } // Add the list ordering clause. @@ -243,6 +409,8 @@ class SupportgroupsModelSupport_groups extends JModelList // setup the query if (SupportgroupsHelper::checkArray($pks)) { + // Set a value to know this is exporting method. + $_export = true; // Get the user object. $user = JFactory::getUser(); // Create a new query object. @@ -348,8 +516,8 @@ class SupportgroupsModelSupport_groups extends JModelList $id .= ':' . $this->getState('filter.modified_by'); $id .= ':' . $this->getState('filter.name'); $id .= ':' . $this->getState('filter.phone'); - $id .= ':' . $this->getState('filter.location'); - $id .= ':' . $this->getState('filter.clinic'); + $id .= ':' . $this->getState('filter.area'); + $id .= ':' . $this->getState('filter.facility'); $id .= ':' . $this->getState('filter.male'); $id .= ':' . $this->getState('filter.female'); diff --git a/admin/models/supportgroups.php b/admin/models/supportgroups.php index 60a23e1..a4094ce 100644 --- a/admin/models/supportgroups.php +++ b/admin/models/supportgroups.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage supportgroups.php @@ -37,13 +37,13 @@ class SupportgroupsModelSupportgroups extends JModelList { public function getIcons() { - // load user for access menus - $user = JFactory::getUser(); - // reset icon array + // load user for access menus + $user = JFactory::getUser(); + // reset icon array $icons = array(); - // view groups array + // view groups array $viewGroups = array( - 'main' => array('png.support_group.add', 'png.support_groups', 'png.payment.add', 'png.payments', 'png.clinics', 'png.locations', 'png.regions', 'png.countries', 'png.currencies', 'png.help_documents') + 'main' => array('png.support_group.add', 'png.support_groups', 'png.payment.add', 'png.payments', 'png.facility.add', 'png.facilities', 'png.additional_info.add', 'png.additional_information', 'png.area.add', 'png.areas', 'png.region.add', 'png.regions', 'png.countries', 'png.currencies', 'png.help_documents') ); // view access array $viewAccess = array( @@ -59,21 +59,39 @@ class SupportgroupsModelSupportgroups extends JModelList 'payments.submenu' => 'payment.submenu', 'payments.dashboard_list' => 'payment.dashboard_list', 'payment.dashboard_add' => 'payment.dashboard_add', - 'clinic.create' => 'clinic.create', - 'clinics.access' => 'clinic.access', - 'clinic.access' => 'clinic.access', - 'clinics.submenu' => 'clinic.submenu', - 'clinics.dashboard_list' => 'clinic.dashboard_list', - 'location.create' => 'location.create', - 'locations.access' => 'location.access', - 'location.access' => 'location.access', - 'locations.submenu' => 'location.submenu', - 'locations.dashboard_list' => 'location.dashboard_list', + 'facility.create' => 'facility.create', + 'facilities.access' => 'facility.access', + 'facility.access' => 'facility.access', + 'facilities.submenu' => 'facility.submenu', + 'facilities.dashboard_list' => 'facility.dashboard_list', + 'facility.dashboard_add' => 'facility.dashboard_add', + 'facility_type.create' => 'facility_type.create', + 'facility_types.access' => 'facility_type.access', + 'facility_type.access' => 'facility_type.access', + 'additional_info.create' => 'additional_info.create', + 'additional_information.access' => 'additional_info.access', + 'additional_info.access' => 'additional_info.access', + 'additional_information.submenu' => 'additional_info.submenu', + 'additional_information.dashboard_list' => 'additional_info.dashboard_list', + 'additional_info.dashboard_add' => 'additional_info.dashboard_add', + 'info_type.create' => 'info_type.create', + 'info_types.access' => 'info_type.access', + 'info_type.access' => 'info_type.access', + 'area.create' => 'area.create', + 'areas.access' => 'area.access', + 'area.access' => 'area.access', + 'areas.submenu' => 'area.submenu', + 'areas.dashboard_list' => 'area.dashboard_list', + 'area.dashboard_add' => 'area.dashboard_add', + 'area_type.create' => 'area_type.create', + 'area_types.access' => 'area_type.access', + 'area_type.access' => 'area_type.access', 'region.create' => 'region.create', 'regions.access' => 'region.access', 'region.access' => 'region.access', 'regions.submenu' => 'region.submenu', 'regions.dashboard_list' => 'region.dashboard_list', + 'region.dashboard_add' => 'region.dashboard_add', 'country.create' => 'country.create', 'countries.access' => 'country.access', 'country.access' => 'country.access', @@ -89,93 +107,109 @@ class SupportgroupsModelSupportgroups extends JModelList 'help_document.access' => 'help_document.access', 'help_documents.submenu' => 'help_document.submenu', 'help_documents.dashboard_list' => 'help_document.dashboard_list'); + // loop over the $views foreach($viewGroups as $group => $views) - { + { $i = 0; if (SupportgroupsHelper::checkArray($views)) - { + { foreach($views as $view) { $add = false; - if (strpos($view,'.') !== false) - { - $dwd = explode('.', $view); - if (count($dwd) == 3) - { - list($type, $name, $action) = $dwd; - } - elseif (count($dwd) == 2) - { - list($type, $name) = $dwd; - $action = false; - } - if ($action) - { - $viewName = $name; - switch($action) - { - case 'add': - $url ='index.php?option=com_supportgroups&view='.$name.'&layout=edit'; - $image = $name.'_'.$action.'.'.$type; - $alt = $name.' '.$action; - $name = 'COM_SUPPORTGROUPS_DASHBOARD_'.SupportgroupsHelper::safeString($name,'U').'_ADD'; - $add = true; - break; - default: - $url = 'index.php?option=com_categories&view=categories&extension=com_supportgroups.'.$name; - $image = $name.'_'.$action.'.'.$type; - $alt = $name.' '.$action; - $name = 'COM_SUPPORTGROUPS_DASHBOARD_'.SupportgroupsHelper::safeString($name,'U').'_'.SupportgroupsHelper::safeString($action,'U'); - break; - } - } - else - { - $viewName = $name; - $alt = $name; - $url = 'index.php?option=com_supportgroups&view='.$name; - $image = $name.'.'.$type; - $name = 'COM_SUPPORTGROUPS_DASHBOARD_'.SupportgroupsHelper::safeString($name,'U'); - $hover = false; - } - } - else - { - $viewName = $view; - $alt = $view; - $url = 'index.php?option=com_supportgroups&view='.$view; - $image = $view.'.png'; - $name = ucwords($view).'

'; - $hover = false; - } - // first make sure the view access is set - if (SupportgroupsHelper::checkArray($viewAccess)) - { + // external views (links) + if (strpos($view,'||') !== false) + { + $dwd = explode('||', $view); + if (count($dwd) == 3) + { + list($type, $name, $url) = $dwd; + $viewName = $name; + $alt = $name; + $url = $url; + $image = $name.'.'.$type; + $name = 'COM_SUPPORTGROUPS_DASHBOARD_'.SupportgroupsHelper::safeString($name,'U'); + } + } + // internal views + elseif (strpos($view,'.') !== false) + { + $dwd = explode('.', $view); + if (count($dwd) == 3) + { + list($type, $name, $action) = $dwd; + } + elseif (count($dwd) == 2) + { + list($type, $name) = $dwd; + $action = false; + } + if ($action) + { + $viewName = $name; + switch($action) + { + case 'add': + $url = 'index.php?option=com_supportgroups&view='.$name.'&layout=edit'; + $image = $name.'_'.$action.'.'.$type; + $alt = $name.' '.$action; + $name = 'COM_SUPPORTGROUPS_DASHBOARD_'.SupportgroupsHelper::safeString($name,'U').'_ADD'; + $add = true; + break; + default: + $url = 'index.php?option=com_categories&view=categories&extension=com_supportgroups.'.$name; + $image = $name.'_'.$action.'.'.$type; + $alt = $name.' '.$action; + $name = 'COM_SUPPORTGROUPS_DASHBOARD_'.SupportgroupsHelper::safeString($name,'U').'_'.SupportgroupsHelper::safeString($action,'U'); + break; + } + } + else + { + $viewName = $name; + $alt = $name; + $url = 'index.php?option=com_supportgroups&view='.$name; + $image = $name.'.'.$type; + $name = 'COM_SUPPORTGROUPS_DASHBOARD_'.SupportgroupsHelper::safeString($name,'U'); + $hover = false; + } + } + else + { + $viewName = $view; + $alt = $view; + $url = 'index.php?option=com_supportgroups&view='.$view; + $image = $view.'.png'; + $name = ucwords($view).'

'; + $hover = false; + } + // first make sure the view access is set + if (SupportgroupsHelper::checkArray($viewAccess)) + { // setup some defaults $dashboard_add = false; $dashboard_list = false; - $accessTo = ''; - $accessAdd = ''; - // acces checking start - $accessCreate = (isset($viewAccess[$viewName.'.create'])) ? SupportgroupsHelper::checkString($viewAccess[$viewName.'.create']):false; - $accessAccess = (isset($viewAccess[$viewName.'.access'])) ? SupportgroupsHelper::checkString($viewAccess[$viewName.'.access']):false; + $accessTo = ''; + $accessAdd = ''; + // acces checking start + $accessCreate = (isset($viewAccess[$viewName.'.create'])) ? SupportgroupsHelper::checkString($viewAccess[$viewName.'.create']):false; + $accessAccess = (isset($viewAccess[$viewName.'.access'])) ? SupportgroupsHelper::checkString($viewAccess[$viewName.'.access']):false; // set main controllers $accessDashboard_add = (isset($viewAccess[$viewName.'.dashboard_add'])) ? SupportgroupsHelper::checkString($viewAccess[$viewName.'.dashboard_add']):false; $accessDashboard_list = (isset($viewAccess[$viewName.'.dashboard_list'])) ? SupportgroupsHelper::checkString($viewAccess[$viewName.'.dashboard_list']):false; - // check for adding access - if ($add && $accessCreate) - { - $accessAdd = $viewAccess[$viewName.'.create']; - } - elseif ($add) - { - $accessAdd = 'core.create'; - } - // check if acces to view is set - if ($accessAccess) - { - $accessTo = $viewAccess[$viewName.'.access']; - } + // check for adding access + if ($add && $accessCreate) + { + $accessAdd = $viewAccess[$viewName.'.create']; + } + elseif ($add) + { + $accessAdd = 'core.create'; + } + // check if acces to view is set + if ($accessAccess) + { + $accessTo = $viewAccess[$viewName.'.access']; + } // set main access controllers if ($accessDashboard_add) { @@ -185,67 +219,159 @@ class SupportgroupsModelSupportgroups extends JModelList { $dashboard_list = $user->authorise($viewAccess[$viewName.'.dashboard_list'], 'com_supportgroups'); } - if (SupportgroupsHelper::checkString($accessAdd) && SupportgroupsHelper::checkString($accessTo)) - { - // check access - if($user->authorise($accessAdd, 'com_supportgroups') && $user->authorise($accessTo, 'com_supportgroups') && $dashboard_add) - { - $icons[$group][$i] = new StdClass; - $icons[$group][$i]->url = $url; - $icons[$group][$i]->name = $name; - $icons[$group][$i]->image = $image; - $icons[$group][$i]->alt = $alt; - } - } - elseif (SupportgroupsHelper::checkString($accessTo)) - { - // check access - if($user->authorise($accessTo, 'com_supportgroups') && $dashboard_list) - { - $icons[$group][$i] = new StdClass; - $icons[$group][$i]->url = $url; - $icons[$group][$i]->name = $name; - $icons[$group][$i]->image = $image; - $icons[$group][$i]->alt = $alt; - } - } - elseif (SupportgroupsHelper::checkString($accessAdd)) - { - // check access - if($user->authorise($accessAdd, 'com_supportgroups') && $dashboard_add) - { - $icons[$group][$i] = new StdClass; - $icons[$group][$i]->url = $url; - $icons[$group][$i]->name = $name; - $icons[$group][$i]->image = $image; - $icons[$group][$i]->alt = $alt; - } - } - else - { - $icons[$group][$i] = new StdClass; - $icons[$group][$i]->url = $url; - $icons[$group][$i]->name = $name; - $icons[$group][$i]->image = $image; - $icons[$group][$i]->alt = $alt; - } - } - else - { - $icons[$group][$i] = new StdClass; - $icons[$group][$i]->url = $url; - $icons[$group][$i]->name = $name; - $icons[$group][$i]->image = $image; - $icons[$group][$i]->alt = $alt; - } - $i++; - } - } - else - { - $icons[$group][$i] = false; + if (SupportgroupsHelper::checkString($accessAdd) && SupportgroupsHelper::checkString($accessTo)) + { + // check access + if($user->authorise($accessAdd, 'com_supportgroups') && $user->authorise($accessTo, 'com_supportgroups') && $dashboard_add) + { + $icons[$group][$i] = new StdClass; + $icons[$group][$i]->url = $url; + $icons[$group][$i]->name = $name; + $icons[$group][$i]->image = $image; + $icons[$group][$i]->alt = $alt; + } + } + elseif (SupportgroupsHelper::checkString($accessTo)) + { + // check access + if($user->authorise($accessTo, 'com_supportgroups') && $dashboard_list) + { + $icons[$group][$i] = new StdClass; + $icons[$group][$i]->url = $url; + $icons[$group][$i]->name = $name; + $icons[$group][$i]->image = $image; + $icons[$group][$i]->alt = $alt; + } + } + elseif (SupportgroupsHelper::checkString($accessAdd)) + { + // check access + if($user->authorise($accessAdd, 'com_supportgroups') && $dashboard_add) + { + $icons[$group][$i] = new StdClass; + $icons[$group][$i]->url = $url; + $icons[$group][$i]->name = $name; + $icons[$group][$i]->image = $image; + $icons[$group][$i]->alt = $alt; + } + } + else + { + $icons[$group][$i] = new StdClass; + $icons[$group][$i]->url = $url; + $icons[$group][$i]->name = $name; + $icons[$group][$i]->image = $image; + $icons[$group][$i]->alt = $alt; + } + } + else + { + $icons[$group][$i] = new StdClass; + $icons[$group][$i]->url = $url; + $icons[$group][$i]->name = $name; + $icons[$group][$i]->image = $image; + $icons[$group][$i]->alt = $alt; + } + $i++; + } + } + else + { + $icons[$group][$i] = false; } } return $icons; + } + + + public function getNoticeboard() + { + // get the document to load the scripts + $document = JFactory::getDocument(); + $document->addScript(JURI::root() . "media/com_supportgroups/js/marked.js"); + $document->addScriptDeclaration(' + var token = "'.JSession::getFormToken().'"; + var noticeboard = "https://www.vdm.io/supportgroups-noticeboard-md"; + jQuery(document).ready(function () { + jQuery.get(noticeboard) + .success(function(board) { + if (board.length > 5) { + jQuery("#noticeboard-md").html(marked(board)); + getIS(1,board).done(function(result) { + if (result){ + jQuery("#cpanel_tabTabs a").each(function() { + if (this.href.indexOf("#vast_development_method") >= 0 || this.href.indexOf("#notice_board") >= 0) { + var textVDM = jQuery(this).text(); + jQuery(this).html("1 "+textVDM); + jQuery(this).attr("id","vdm-new-notice"); + jQuery("#vdm-new-notice").click(function() { + getIS(2,board).done(function(result) { + if (result) { + jQuery(".vdm-new-notice").fadeOut(500); + } + }); + }); + } + }); + } + }); + } else { + jQuery("#noticeboard-md").html("'.JText::_('COM_SUPPORTGROUPS_ALL_IS_GOOD_PLEASE_CHECK_AGAIN_LATTER').'"); + } + }) + .error(function(jqXHR, textStatus, errorThrown) { + jQuery("#noticeboard-md").html("'.JText::_('COM_SUPPORTGROUPS_ALL_IS_GOOD_PLEASE_CHECK_AGAIN_LATTER').'"); + }); + }); + // to check is READ/NEW + function getIS(type,notice){ + if(type == 1){ + var getUrl = "index.php?option=com_supportgroups&task=ajax.isNew&format=json"; + } else if (type == 2) { + var getUrl = "index.php?option=com_supportgroups&task=ajax.isRead&format=json"; + } + if(token.length > 0 && notice.length){ + var request = "token="+token+"¬ice="+notice; + } + return jQuery.ajax({ + type: "POST", + url: getUrl, + dataType: "jsonp", + data: request, + jsonp: "callback" + }); + } + // nice little dot trick :) + jQuery(document).ready( function($) { + var x=0; + setInterval(function() { + var dots = ""; + x++; + for (var y=0; y < x%8; y++) { + dots+="."; + } + $(".loading-dots").text(dots); + } , 500); + });'); + + return '
'.JText::_('COM_SUPPORTGROUPS_THE_NOTICE_BOARD_IS_LOADING').'..
'; + } + + public function getReadme() + { + $document = JFactory::getDocument(); + $document->addScriptDeclaration(' + var getreadme = "'. JURI::root() . 'administrator/components/com_supportgroups/README.txt"; + jQuery(document).ready(function () { + jQuery.get(getreadme) + .success(function(readme) { + jQuery("#readme-md").html(marked(readme)); + }) + .error(function(jqXHR, textStatus, errorThrown) { + jQuery("#readme-md").html("'.JText::_('COM_SUPPORTGROUPS_PLEASE_CHECK_AGAIN_LATTER').'"); + }); + });'); + + return '
'.JText::_('COM_SUPPORTGROUPS_THE_README_IS_LOADING').'..
'; } } diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index 02aee11..19277b4 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -1,29 +1,32 @@ CREATE TABLE IF NOT EXISTS `#__supportgroups_support_group` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `asset_id` INT(255) UNSIGNED NOT NULL DEFAULT '0', - `area` TEXT NOT NULL DEFAULT '', - `clinic` INT(11) NOT NULL DEFAULT '0', - `female` INT(11) NOT NULL DEFAULT '0', - `female_art` INT(11) NOT NULL DEFAULT '0', - `female_children` INT(11) NOT NULL DEFAULT '0', - `location` INT(11) NOT NULL DEFAULT '0', - `male` INT(11) NOT NULL DEFAULT '0', - `male_art` INT(11) NOT NULL DEFAULT '0', - `male_children` INT(11) NOT NULL DEFAULT '0', + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `alias` CHAR(64) NOT NULL DEFAULT '', + `area` INT(11) NOT NULL DEFAULT 0, + `details` TEXT NOT NULL, + `facility` INT(11) NOT NULL DEFAULT 0, + `female` INT(11) NOT NULL DEFAULT 0, + `female_art` INT(11) NOT NULL DEFAULT 0, + `female_children` INT(11) NOT NULL DEFAULT 0, + `info` TEXT NOT NULL, + `male` INT(11) NOT NULL DEFAULT 0, + `male_art` INT(11) NOT NULL DEFAULT 0, + `male_children` INT(11) NOT NULL DEFAULT 0, + `marker` TEXT NOT NULL, `name` VARCHAR(255) NOT NULL DEFAULT '', `phone` VARCHAR(64) NOT NULL DEFAULT '', - `params` TEXT NOT NULL DEFAULT '', - `published` tinyint(1) NOT NULL DEFAULT '1', - `created_by` int(11) NOT NULL DEFAULT '0', - `modified_by` int(11) NOT NULL DEFAULT '0', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `checked_out` int(11) NOT NULL, + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `version` int(11) NOT NULL DEFAULT '1', - `hits` int(11) NOT NULL DEFAULT '0', - `access` int(11) DEFAULT NULL, - `ordering` int(11) NOT NULL DEFAULT '0', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, `metakey` TEXT NOT NULL DEFAULT '', `metadesc` TEXT NOT NULL DEFAULT '', `metadata` TEXT NOT NULL DEFAULT '', @@ -34,34 +37,35 @@ CREATE TABLE IF NOT EXISTS `#__supportgroups_support_group` ( KEY `idx_modifiedby` (`modified_by`), KEY `idx_state` (`published`), KEY `idx_name` (`name`), - KEY `idx_location` (`location`), - KEY `idx_clinic` (`clinic`), + KEY `idx_area` (`area`), + KEY `idx_facility` (`facility`), KEY `idx_male` (`male`), KEY `idx_female` (`female`), + KEY `idx_alias` (`alias`), KEY `idx_female_art` (`female_art`), - KEY `idx_male_art` (`male_art`), KEY `idx_female_children` (`female_children`), + KEY `idx_male_art` (`male_art`), KEY `idx_male_children` (`male_children`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__supportgroups_payment` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `asset_id` INT(255) UNSIGNED NOT NULL DEFAULT '0', - `amount` VARCHAR(100) NOT NULL DEFAULT '0', - `support_group` INT(11) NOT NULL DEFAULT '0', - `year` INT(11) NOT NULL DEFAULT '0', - `params` TEXT NOT NULL DEFAULT '', - `published` tinyint(1) NOT NULL DEFAULT '1', - `created_by` int(11) NOT NULL DEFAULT '0', - `modified_by` int(11) NOT NULL DEFAULT '0', + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `amount` VARCHAR(100) NOT NULL DEFAULT 0, + `support_group` INT(11) NOT NULL DEFAULT 0, + `year` INT(11) NOT NULL DEFAULT 0, + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `checked_out` int(11) NOT NULL, + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `version` int(11) NOT NULL DEFAULT '1', - `hits` int(11) NOT NULL DEFAULT '0', - `access` int(11) DEFAULT NULL, - `ordering` int(11) NOT NULL DEFAULT '0', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), @@ -72,54 +76,27 @@ CREATE TABLE IF NOT EXISTS `#__supportgroups_payment` ( KEY `idx_year` (`year`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; -CREATE TABLE IF NOT EXISTS `#__supportgroups_clinic` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `asset_id` INT(255) UNSIGNED NOT NULL DEFAULT '0', - `area` TEXT NOT NULL DEFAULT '', +CREATE TABLE IF NOT EXISTS `#__supportgroups_facility` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `alias` CHAR(64) NOT NULL DEFAULT '', + `details` TEXT NOT NULL, + `facility_type` INT(11) NOT NULL DEFAULT 0, + `marker` TEXT NOT NULL, `name` VARCHAR(255) NOT NULL DEFAULT '', `phone` VARCHAR(64) NOT NULL DEFAULT '', - `params` TEXT NOT NULL DEFAULT '', - `published` tinyint(1) NOT NULL DEFAULT '1', - `created_by` int(11) NOT NULL DEFAULT '0', - `modified_by` int(11) NOT NULL DEFAULT '0', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `checked_out` int(11) NOT NULL, + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `version` int(11) NOT NULL DEFAULT '1', - `hits` int(11) NOT NULL DEFAULT '0', - `access` int(11) DEFAULT NULL, - `ordering` int(11) NOT NULL DEFAULT '0', - `metakey` TEXT NOT NULL DEFAULT '', - `metadesc` TEXT NOT NULL DEFAULT '', - `metadata` TEXT NOT NULL DEFAULT '', - PRIMARY KEY (`id`), - KEY `idx_access` (`access`), - KEY `idx_checkout` (`checked_out`), - KEY `idx_createdby` (`created_by`), - KEY `idx_modifiedby` (`modified_by`), - KEY `idx_state` (`published`), - KEY `idx_name` (`name`) -) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; - -CREATE TABLE IF NOT EXISTS `#__supportgroups_location` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `asset_id` INT(255) UNSIGNED NOT NULL DEFAULT '0', - `area` TEXT NOT NULL DEFAULT '', - `name` VARCHAR(255) NOT NULL DEFAULT '', - `region` INT(11) NOT NULL DEFAULT '0', - `params` TEXT NOT NULL DEFAULT '', - `published` tinyint(1) NOT NULL DEFAULT '1', - `created_by` int(11) NOT NULL DEFAULT '0', - `modified_by` int(11) NOT NULL DEFAULT '0', - `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `checked_out` int(11) NOT NULL, - `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `version` int(11) NOT NULL DEFAULT '1', - `hits` int(11) NOT NULL DEFAULT '0', - `access` int(11) DEFAULT NULL, - `ordering` int(11) NOT NULL DEFAULT '0', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, `metakey` TEXT NOT NULL DEFAULT '', `metadesc` TEXT NOT NULL DEFAULT '', `metadata` TEXT NOT NULL DEFAULT '', @@ -130,26 +107,177 @@ CREATE TABLE IF NOT EXISTS `#__supportgroups_location` ( KEY `idx_modifiedby` (`modified_by`), KEY `idx_state` (`published`), KEY `idx_name` (`name`), - KEY `idx_region` (`region`) + KEY `idx_facility_type` (`facility_type`), + KEY `idx_alias` (`alias`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `#__supportgroups_facility_type` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `alias` CHAR(64) NOT NULL DEFAULT '', + `name` VARCHAR(255) NOT NULL DEFAULT '', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`), + KEY `idx_name` (`name`), + KEY `idx_alias` (`alias`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `#__supportgroups_additional_info` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `alias` CHAR(64) NOT NULL DEFAULT '', + `details` TEXT NOT NULL, + `info_type` INT(11) NOT NULL DEFAULT 0, + `name` VARCHAR(255) NOT NULL DEFAULT '', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + `metakey` TEXT NOT NULL DEFAULT '', + `metadesc` TEXT NOT NULL DEFAULT '', + `metadata` TEXT NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`), + KEY `idx_name` (`name`), + KEY `idx_info_type` (`info_type`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `#__supportgroups_info_type` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `alias` CHAR(64) NOT NULL DEFAULT '', + `name` VARCHAR(255) NOT NULL DEFAULT '', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`), + KEY `idx_name` (`name`), + KEY `idx_alias` (`alias`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `#__supportgroups_area` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `alias` CHAR(64) NOT NULL DEFAULT '', + `area_type` INT(11) NOT NULL DEFAULT 0, + `color` VARCHAR(64) NOT NULL DEFAULT '', + `details` TEXT NOT NULL, + `name` VARCHAR(255) NOT NULL DEFAULT '', + `region` INT(11) NOT NULL DEFAULT 0, + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + `metakey` TEXT NOT NULL DEFAULT '', + `metadesc` TEXT NOT NULL DEFAULT '', + `metadata` TEXT NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`), + KEY `idx_name` (`name`), + KEY `idx_area_type` (`area_type`), + KEY `idx_region` (`region`), + KEY `idx_alias` (`alias`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `#__supportgroups_area_type` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `alias` CHAR(64) NOT NULL DEFAULT '', + `name` VARCHAR(255) NOT NULL DEFAULT '', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`), + KEY `idx_name` (`name`), + KEY `idx_alias` (`alias`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__supportgroups_region` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `asset_id` INT(255) UNSIGNED NOT NULL DEFAULT '0', - `country` INT(11) NOT NULL DEFAULT '0', + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `alias` CHAR(64) NOT NULL DEFAULT '', + `country` INT(11) NOT NULL DEFAULT 0, `name` VARCHAR(255) NOT NULL DEFAULT '', - `params` TEXT NOT NULL DEFAULT '', - `published` tinyint(1) NOT NULL DEFAULT '1', - `created_by` int(11) NOT NULL DEFAULT '0', - `modified_by` int(11) NOT NULL DEFAULT '0', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `checked_out` int(11) NOT NULL, + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `version` int(11) NOT NULL DEFAULT '1', - `hits` int(11) NOT NULL DEFAULT '0', - `access` int(11) DEFAULT NULL, - `ordering` int(11) NOT NULL DEFAULT '0', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, `metakey` TEXT NOT NULL DEFAULT '', `metadesc` TEXT NOT NULL DEFAULT '', `metadata` TEXT NOT NULL DEFAULT '', @@ -160,30 +288,31 @@ CREATE TABLE IF NOT EXISTS `#__supportgroups_region` ( KEY `idx_modifiedby` (`modified_by`), KEY `idx_state` (`published`), KEY `idx_name` (`name`), - KEY `idx_country` (`country`) + KEY `idx_country` (`country`), + KEY `idx_alias` (`alias`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__supportgroups_country` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `asset_id` INT(255) UNSIGNED NOT NULL DEFAULT '0', + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', `alias` CHAR(64) NOT NULL DEFAULT '', `codethree` CHAR(7) NOT NULL DEFAULT '', `codetwo` CHAR(7) NOT NULL DEFAULT '', `currency` CHAR(7) NOT NULL DEFAULT '', `name` VARCHAR(255) NOT NULL DEFAULT '', `worldzone` VARCHAR(255) NOT NULL DEFAULT '', - `params` TEXT NOT NULL DEFAULT '', - `published` tinyint(1) NOT NULL DEFAULT '1', - `created_by` int(11) NOT NULL DEFAULT '0', - `modified_by` int(11) NOT NULL DEFAULT '0', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `checked_out` int(11) NOT NULL, + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `version` int(11) NOT NULL DEFAULT '1', - `hits` int(11) NOT NULL DEFAULT '0', - `access` int(11) DEFAULT NULL, - `ordering` int(11) NOT NULL DEFAULT '0', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, `metakey` TEXT NOT NULL DEFAULT '', `metadesc` TEXT NOT NULL DEFAULT '', `metadata` TEXT NOT NULL DEFAULT '', @@ -202,30 +331,30 @@ CREATE TABLE IF NOT EXISTS `#__supportgroups_country` ( ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__supportgroups_currency` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `asset_id` INT(255) UNSIGNED NOT NULL DEFAULT '0', + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', `alias` CHAR(64) NOT NULL DEFAULT '', `codethree` CHAR(7) NOT NULL DEFAULT '', - `decimalplace` INT(7) NOT NULL DEFAULT '0', + `decimalplace` INT(7) NOT NULL DEFAULT 0, `decimalsymbol` CHAR(7) NOT NULL DEFAULT '', `name` VARCHAR(255) NOT NULL DEFAULT '', `negativestyle` VARCHAR(255) NOT NULL DEFAULT '', - `numericcode` INT(10) NOT NULL DEFAULT '0', + `numericcode` INT(10) NOT NULL DEFAULT 0, `positivestyle` VARCHAR(255) NOT NULL DEFAULT '', `symbol` CHAR(11) NOT NULL DEFAULT '', `thousands` CHAR(7) NOT NULL DEFAULT '', - `params` TEXT NOT NULL DEFAULT '', - `published` tinyint(1) NOT NULL DEFAULT '1', - `created_by` int(11) NOT NULL DEFAULT '0', - `modified_by` int(11) NOT NULL DEFAULT '0', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `checked_out` int(11) NOT NULL, + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `version` int(11) NOT NULL DEFAULT '1', - `hits` int(11) NOT NULL DEFAULT '0', - `access` int(11) DEFAULT NULL, - `ordering` int(11) NOT NULL DEFAULT '0', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, `metakey` TEXT NOT NULL DEFAULT '', `metadesc` TEXT NOT NULL DEFAULT '', `metadata` TEXT NOT NULL DEFAULT '', @@ -242,32 +371,32 @@ CREATE TABLE IF NOT EXISTS `#__supportgroups_currency` ( ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `#__supportgroups_help_document` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `asset_id` INT(255) UNSIGNED NOT NULL DEFAULT '0', + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', `admin_view` CHAR(255) NOT NULL DEFAULT '', `alias` CHAR(64) NOT NULL DEFAULT '', - `article` TINYINT(1) NOT NULL DEFAULT '0', - `content` TEXT NOT NULL DEFAULT '', - `groups` TEXT NOT NULL DEFAULT '', - `location` TINYINT(1) NOT NULL DEFAULT '0', - `not_required` INT(1) NOT NULL DEFAULT '0', + `article` TINYINT(1) NOT NULL DEFAULT 0, + `content` TEXT NOT NULL, + `groups` TEXT NOT NULL, + `location` TINYINT(1) NOT NULL DEFAULT 0, + `not_required` INT(1) NOT NULL DEFAULT 0, `site_view` CHAR(255) NOT NULL DEFAULT '', - `target` TINYINT(1) NOT NULL DEFAULT '0', + `target` TINYINT(1) NOT NULL DEFAULT 0, `title` CHAR(64) NOT NULL DEFAULT '', - `type` TINYINT(1) NOT NULL DEFAULT '0', + `type` TINYINT(1) NOT NULL DEFAULT 0, `url` VARCHAR(255) NOT NULL DEFAULT '', - `params` TEXT NOT NULL DEFAULT '', - `published` tinyint(1) NOT NULL DEFAULT '1', - `created_by` int(11) NOT NULL DEFAULT '0', - `modified_by` int(11) NOT NULL DEFAULT '0', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `checked_out` int(11) NOT NULL, + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', - `version` int(11) NOT NULL DEFAULT '1', - `hits` int(11) NOT NULL DEFAULT '0', - `access` int(11) DEFAULT NULL, - `ordering` int(11) NOT NULL DEFAULT '0', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `idx_access` (`access`), KEY `idx_checkout` (`checked_out`), @@ -277,12 +406,91 @@ CREATE TABLE IF NOT EXISTS `#__supportgroups_help_document` ( KEY `idx_title` (`title`), KEY `idx_type` (`type`), KEY `idx_location` (`location`), + KEY `idx_article` (`article`), KEY `idx_target` (`target`), - KEY `idx_alias` (`alias`), - KEY `idx_article` (`article`) + KEY `idx_alias` (`alias`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; +-- +-- Dumping data for table `#__supportgroups_info_type` +-- +INSERT INTO `#__supportgroups_info_type` (`id`, `asset_id`, `alias`, `name`, `params`, `published`, `created_by`, `modified_by`, `created`, `modified`, `checked_out`, `checked_out_time`, `version`, `hits`, `access`, `ordering`) VALUES +(1, 26628, 'skill-level', 'Skill Level', '', 1, 450, '', '2016-04-16 22:01:54', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', 1, 1), +(2, 26629, 'academic-credential', 'Academic Credential', '', 1, 450, '', '2016-04-16 22:03:35', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', 1, 2); + +-- +-- Dumping data for table `#__supportgroups_area` +-- + +INSERT INTO `#__supportgroups_area` (`id`, `alias`, `color`, `details`, `name`, `region`, `params`, `published`, `created_by`, `modified_by`, `created`, `modified`, `checked_out`, `checked_out_time`, `version`, `hits`, `access`, `ordering`, `metakey`, `metadesc`, `metadata`) VALUES +(1, 'anamulenge', '#0c1c94', '', 'Anamulenge', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 3, '', 1, 1, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(2, 'eegodi', '#ffffff', '', 'Eegodi', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 2, '', 1, 2, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(3, 'elimi', '', '', 'Elimi', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 3, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(4, 'endola', '#016b6b', '', 'Endola', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 4, '', 1, 4, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(5, 'enegla', '#4d8f2e', '', 'Enegla', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 2, '', 1, 5, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(6, 'epembe', '', '', 'Epembe', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 6, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(7, 'epembe-eeshi', '#15557a', '', 'Epembe/Eeshi', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 3, '', 1, 7, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(8, 'epembe-epumba-londjaba', '', '', 'Epembe/Epumba londjaba', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 8, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(9, 'epembe-othilu', '', '', 'Epembe/Othilu', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 9, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(10, 'etayi', '', '', 'Etayi', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 10, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(11, 'ogongo', '', '', 'Ogongo', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 11, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(12, 'ohangwena', '#bf53e6', '', 'Ohangwena', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 2, '', 1, 12, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(13, 'okahao', '', '', 'Okahao', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 13, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(14, 'okaku', '', '', 'Okaku', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 14, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(15, 'okalongo', '', '', 'Okalongo', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 15, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(16, 'okankolo', '', '', 'Okankolo', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 16, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(17, 'okatana', '', '', 'Okatana', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 17, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(18, 'okatyali', '', '', 'Okatyali', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 18, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(19, 'okongo', '', '', 'Okongo', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 19, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(20, 'olukonda', '', '', 'Olukonda', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 20, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(21, 'ompundja', '', '', 'Ompundja', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 21, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(22, 'omulonga', '', '', 'Omulonga', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 22, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(23, 'omulonga-onanona', '', '', 'Omulonga/Onanona', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 23, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(24, 'omundaungilo', '', '', 'Omundaungilo', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 24, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(25, 'omundaungilo-onakalung', '', '', 'Omundaungilo/onakalung', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 25, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(26, 'omuntele', '', '', 'Omuntele', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 26, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(27, 'omuntele-ehenge', '', '', 'Omuntele/Ehenge', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 27, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(28, 'omuntele-oshalongo', '', '', 'Omuntele/Oshalongo', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 28, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(29, 'omuthiya', '', '', 'Omuthiya', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 29, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(30, 'onayena', '', '', 'Onayena', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 30, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(31, 'ondangwa', '', '', 'Ondangwa', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 31, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(32, 'ondangwa-rular', '', '', 'Ondangwa rular', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 32, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(33, 'ondangwa-urban', '', '', 'Ondangwa Urban', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 33, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(34, 'ondangwa-epukunoyana', '', '', 'Ondangwa/Epukunoyana', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 34, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(35, 'ondanwa', '', '', 'Ondanwa', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 35, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(36, 'ondobe', '', '', 'Ondobe', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 36, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(37, 'onesi', '', '', 'Onesi', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 37, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(38, 'ongenga', '', '', 'Ongenga', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 38, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(39, 'ongwediva', '', '', 'Ongwediva', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 39, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(40, 'oniipa', '', '', 'Oniipa', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 40, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(41, 'oniwengedje', '', '', 'Oniwengedje', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 41, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(42, 'onyaana', '', '', 'Onyaana', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 42, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(43, 'onyaanya', '', '', 'Onyaanya', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 43, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(44, 'oshakati-east', '', '', 'Oshakati East', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 44, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(45, 'oshakati-east-oneshila', '', '', 'Oshakati East/Oneshila', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 45, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(46, 'oshakati-west', '', '', 'Oshakati West', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 46, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(47, 'oshikango', '', '', 'Oshikango', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 47, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(48, 'oshikuku', '', '', 'Oshikuku', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 48, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(49, 'oshikunde', '', '', 'Oshikunde', 1, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 49, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(50, 'otamanzi', '', '', 'Otamanzi', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:36:09', '', '0000-00-00 00:00:00', 1, '', 1, 50, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(51, 'otamanzi-onayalala', '', '', 'Otamanzi/Onayalala', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 51, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(52, 'otsadi', '', '', 'Otsadi', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 52, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(53, 'outapi-ohambalanganga', '', '', 'Outapi/Ohambalanganga', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 53, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(54, 'quinas', '', '', 'Quinas', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 54, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(55, 'ruacana', '', '', 'Ruacana', 2, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 55, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(56, 'tsumeb', '', '', 'Tsumeb', 5, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 56, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(57, 'uukwiyuushona', '', '', 'Uukwiyuushona', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 57, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'), +(58, 'uuvudhiya', '', '', 'Uuvudhiya', 4, '', 1, 450, 450, '2016-03-11 17:51:00', '2016-04-02 15:35:39', '', '0000-00-00 00:00:00', 1, '', 1, 58, '', '', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\"}'); + +-- +-- Dumping data for table `#__supportgroups_region` +-- + +INSERT INTO `#__supportgroups_region` (`id`, `asset_id`, `alias`, `country`, `name`, `params`, `published`, `created_by`, `modified_by`, `created`, `modified`, `checked_out`, `checked_out_time`, `version`, `hits`, `access`, `ordering`) VALUES +(1, 26816, 'khomas', 146, 'Khomas', '', 1, 450, '', '2016-05-17 05:01:46', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', 1, 1), +(2, 26817, 'karas', 146, 'Karas', '', 1, 450, '', '2016-05-17 05:01:57', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', 1, 2), +(3, 33181, 'region', 13, 'Region', '', 1, 450, '', '2016-11-15 04:52:45', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', 1, 3); -- -- Dumping data for table `#__supportgroups_country` @@ -536,172 +744,180 @@ INSERT INTO `#__supportgroups_country` (`id`, `asset_id`, `alias`, `codethree`, (245, '', '', 'SXM', 'SX', 'ANG', 'Sint Maarten (Netherlands Antilles)', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', ''), (246, '', '', 'ZZZ', 'ZZ', 'ZZZ', 'Reserved', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', ''); --- --- Dumping data for table `#__supportgroups_currency` --- +INSERT INTO `#__supportgroups_currency` (`id`, `asset_id`, `alias`, `codethree`, `decimalplace`, `decimalsymbol`, `name`, `negativestyle`, `numericcode`, `positivestyle`, `symbol`, `thousands`, `params`, `published`, `created_by`, `modified_by`, `created`, `modified`, `checked_out`, `checked_out_time`, `version`, `hits`, `access`, `ordering`) VALUES +(1, 0, '', 'AED', 2, ',', 'United Arab Emirates dirham', '{sign}{number} {symbol}', 784, '{number} {symbol}', 'د.إ', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 23), +(2, 0, '', 'AFN', 2, ',', 'Afghan afghani', '{sign}{number} {symbol}', 971, '{number} {symbol}', '؋', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 24), +(3, 0, '', 'ALL', 2, ',', 'Albanian lek', '{sign}{number} {symbol}', 8, '{number} {symbol}', 'Lek', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 25), +(4, 0, '', 'AMD', 2, ',', 'Armenian dram', '{sign}{number} {symbol}', 51, '{number} {symbol}', 'դր.', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 26), +(5, 0, '', 'ANG', 2, ',', 'Netherlands Antillean gulden', '{sign}{number} {symbol}', 532, '{number} {symbol}', 'ƒ', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 27), +(6, 0, '', 'AOA', 2, ',', 'Angolan kwanza', '{sign}{number} {symbol}', 973, '{number} {symbol}', 'Kz', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 28), +(7, 0, '', 'ARS', 2, ',', 'Argentine peso', '{sign}{number} {symbol}', 32, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 29), +(8, 0, '', 'AUD', 2, '.', 'Australian dollar', '{sign}{symbol} {number}', 36, '{symbol} {number}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 5), +(9, 0, '', 'AWG', 2, ',', 'Aruban florin', '{sign}{number} {symbol}', 533, '{number} {symbol}', 'ƒ', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 30), +(10, 0, '', 'AZN', 2, ',', 'Azerbaijani manat', '{sign}{number} {symbol}', 934, '{number} {symbol}', 'ман', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 31), +(11, 0, '', 'BAM', 2, ',', 'Bosnia and Herzegovina convert', '{sign}{number} {symbol}', 977, '{number} {symbol}', 'KM', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 32), +(12, 0, '', 'BBD', 2, ',', 'Barbadian dollar', '{sign}{number} {symbol}', 52, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 33), +(13, 0, '', 'BDT', 2, ',', 'Bangladeshi taka', '{sign}{number} {symbol}', 50, '{number} {symbol}', '৳', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 34), +(14, 0, '', 'BGN', 2, ',', 'Bulgarian lev', '{sign}{number} {symbol}', 975, '{number} {symbol}', 'лв', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 35), +(15, 0, '', 'BHD', 2, ',', 'Bahraini dinar', '{sign}{number} {symbol}', 48, '{number} {symbol}', 'ب.د', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 36), +(16, 0, '', 'BIF', 0, '', 'Burundian franc', '{sign}{number} {symbol}', 108, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 37), +(17, 0, '', 'BMD', 2, ',', 'Bermudian dollar', '{sign}{number} {symbol}', 60, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 38), +(18, 0, '', 'BND', 2, ',', 'Brunei dollar', '{sign}{number} {symbol}', 96, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 39), +(19, 0, '', 'BOB', 2, ',', 'Bolivian boliviano', '{sign}{number} {symbol}', 68, '{number} {symbol}', '$b', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 40), +(20, 0, '', 'BOV', 2, ',', 'Mvdol', '{sign}{number} {symbol}', 984, '{number} {symbol}', 'BOV', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 41), +(21, 0, '', 'BRL', 2, '.', 'Brazilian real', '{symbol} {sign}{number}', 986, '{symbol} {number}', 'R$', ',', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 17), +(22, 0, '', 'BSD', 2, ',', 'Bahamian dollar', '{sign}{number} {symbol}', 44, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 42), +(23, 0, '', 'BTN', 2, ',', 'Bhutanese ngultrum', '{sign}{number} {symbol}', 64, '{number} {symbol}', 'BTN', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 43), +(24, 0, '', 'BWP', 2, ',', 'Botswana pula', '{sign}{number} {symbol}', 72, '{number} {symbol}', 'P', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 44), +(25, 0, '', 'BYR', 0, '', 'Belarusian ruble', '{sign}{number} {symbol}', 974, '{number} {symbol}', 'p.', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 45), +(26, 0, '', 'BZD', 2, ',', 'Belize dollar', '{sign}{number} {symbol}', 84, '{number} {symbol}', 'BZ$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 46), +(27, 0, '', 'CAD', 2, '.', 'Canadian dollar', '{symbol}{sign}{number}', 124, '{symbol}{number}', '$', ',', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 7), +(28, 0, '', 'CDF', 2, ',', 'Congolese franc', '{sign}{number} {symbol}', 976, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 47), +(29, 0, '', 'CHE', 2, ',', 'WIR Euro', '{sign}{number} {symbol}', 947, '{number} {symbol}', '€', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 48), +(30, 0, '', 'CHF', 2, ',', 'Swiss franc', '{sign}{number} {symbol}', 756, '{number} {symbol}', 'CHF', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 6), +(31, 0, '', 'CHW', 2, ',', 'WIR Franc', '{sign}{number} {symbol}', 948, '{number} {symbol}', 'CHW', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 49), +(32, 0, '', 'CLF', 0, ',', 'Unidad de Fomento', '{sign}{number} {symbol}', 990, '{number} {symbol}', 'CLF', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 50), +(33, 0, '', 'CLP', 2, ',', 'Chilean peso', '{sign}{number} {symbol}', 152, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 51), +(34, 0, '', 'CNY', 2, ',', 'Chinese renminbi yuan', '{sign}{number} {symbol}', 156, '{number} {symbol}', '元', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 9), +(35, 0, '', 'COP', 2, ',', 'Colombian peso', '{sign}{number} {symbol}', 170, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 52), +(36, 0, '', 'COU', 2, ',', 'Unidad de Valor Real', '{sign}{number} {symbol}', 970, '{number} {symbol}', 'COU', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 53), +(37, 0, '', 'CRC', 2, ',', 'Costa Rican colón', '{sign}{number} {symbol}', 188, '{number} {symbol}', '₡', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 54), +(38, 0, '', 'CZK', 2, ',', 'Czech koruna', '{sign}{number} {symbol}', 203, '{number} {symbol}', 'Kč', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 57), +(39, 0, '', 'CUP', 2, ',', 'Cuban peso', '{sign}{number} {symbol}', 192, '{number} {symbol}', '₱', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 55), +(40, 0, '', 'CVE', 0, '', 'Cape Verdean escudo', '{sign}{number} {symbol}', 132, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 56), +(41, 0, '', 'DJF', 0, '', 'Djiboutian franc', '{sign}{number} {symbol}', 262, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 58), +(42, 0, '', 'DKK', 2, '.', 'Danish krone', '{symbol}{sign}{number}', 208, '{symbol}{number}', 'kr', ',', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 19), +(43, 0, '', 'DOP', 2, ',', 'Dominican peso', '{sign}{number} {symbol}', 214, '{number} {symbol}', 'RD$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 59), +(44, 0, '', 'DZD', 2, ',', 'Algerian dinar', '{sign}{number} {symbol}', 12, '{number} {symbol}', 'د.ج', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 60), +(45, 0, '', 'EGP', 2, ',', 'Egyptian pound', '{sign}{number} {symbol}', 818, '{number} {symbol}', '£', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 61), +(46, 0, '', 'ERN', 2, ',', 'Eritrean nakfa', '{sign}{number} {symbol}', 232, '{number} {symbol}', 'Nfk', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 62), +(47, 0, '', 'ETB', 2, ',', 'Ethiopian birr', '{sign}{number} {symbol}', 230, '{number} {symbol}', 'ETB', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 63), +(48, 0, '', 'EUR', 2, ',', 'Euro', '{sign}{number} {symbol}', 978, '{number} {symbol}', '€', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 2), +(49, 0, '', 'FJD', 2, ',', 'Fijian dollar', '{sign}{number} {symbol}', 242, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 64), +(50, 0, '', 'FKP', 2, ',', 'Falkland pound', '{sign}{number} {symbol}', 238, '{number} {symbol}', '£', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 65), +(51, 0, '', 'GBP', 2, '.', 'British pound', '{symbol}{sign}{number}', 826, '{symbol}{number}', '£', ',', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 4), +(52, 0, '', 'GEL', 2, ',', 'Georgian lari', '{sign}{number} {symbol}', 981, '{number} {symbol}', 'ლ', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 66), +(53, 0, '', 'GHS', 2, ',', 'Ghanaian cedi', '{sign}{number} {symbol}', 936, '{number} {symbol}', '₵', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 67), +(54, 0, '', 'GIP', 2, ',', 'Gibraltar pound', '{sign}{number} {symbol}', 292, '{number} {symbol}', '£', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 68), +(55, 0, '', 'GMD', 2, ',', 'Gambian dalasi', '{sign}{number} {symbol}', 270, '{number} {symbol}', 'D', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 69), +(56, 0, '', 'GNF', 0, '', 'Guinean franc', '{sign}{number} {symbol}', 324, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 70), +(57, 0, '', 'GTQ', 2, ',', 'Guatemalan quetzal', '{sign}{number} {symbol}', 320, '{number} {symbol}', 'Q', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 71), +(58, 0, '', 'GYD', 2, ',', 'Guyanese dollar', '{sign}{number} {symbol}', 328, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 72), +(59, 0, '', 'HKD', 2, ',', 'Hong Kong dollar', '{sign}{number} {symbol}', 344, '{number} {symbol}', '元', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 13), +(60, 0, '', 'HNL', 2, ',', 'Honduran lempira', '{sign}{number} {symbol}', 340, '{number} {symbol}', 'L', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 73), +(61, 0, '', 'HRK', 2, ',', 'Croatian kuna', '{sign}{number} {symbol}', 191, '{number} {symbol}', 'kn', '.', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 74), +(62, 0, '', 'HTG', 2, ',', 'Haitian gourde', '{sign}{number} {symbol}', 332, '{number} {symbol}', 'G', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 75), +(63, 0, '', 'HUF', 2, ',', 'Hungarian forint', '{sign}{number} {symbol}', 348, '{number} {symbol}', 'Ft', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 76), +(64, 0, '', 'IDR', 0, '', 'Indonesian rupiah', '{symbol}{sign}{number}', 360, '{symbol}{number}', 'Rp', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 77), +(65, 0, '', 'ILS', 2, ',', 'Israeli new sheqel', '{sign}{number} {symbol}', 376, '{number} {symbol}', '₪', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 20), +(66, 0, '', 'INR', 2, ',', 'Indian rupee', '{sign}{number} {symbol}', 356, '{number} {symbol}', '₨', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 16), +(67, 0, '', 'IQD', 0, '', 'Iraqi dinar', '{sign}{number} {symbol}', 368, '{number} {symbol}', 'ع.د', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 78), +(68, 0, '', 'IRR', 2, ',', 'Iranian rial', '{sign}{number}{symb0l}', 364, '{number} {symbol}', '﷼', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 79), +(69, 0, '', 'ISK', 2, ',', 'Icelandic króna', '{sign}{number} {symbol}', 352, '{number} {symbol}', 'kr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 80), +(70, 0, '', 'JMD', 2, ',', 'Jamaican dollar', '{sign}{number} {symbol}', 388, '{number} {symbol}', 'J$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 81), +(71, 0, '', 'JOD', 2, ',', 'Jordanian dinar', '{sign}{number} {symbol}', 400, '{number} {symbol}', 'د.ا', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 82), +(72, 0, '', 'JPY', 2, ',', 'Japanese yen', '{sign}{number} {symbol}', 392, '{number} {symbol}', '¥', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 3), +(73, 0, '', 'KES', 2, ',', 'Kenyan shilling', '{sign}{number} {symbol}', 404, '{number} {symbol}', 'Sh', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 83), +(74, 0, '', 'KGS', 2, ',', 'Kyrgyzstani som', '{sign}{number} {symbol}', 417, '{number} {symbol}', 'лв', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 84), +(75, 0, '', 'KHR', 2, ',', 'Cambodian riel', '{sign}{number} {symbol}', 116, '{number} {symbol}', '៛', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 85), +(76, 0, '', 'KMF', 0, '', 'Comorian franc', '{sign}{number} {symbol}', 174, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 86), +(77, 0, '', 'KPW', 0, '', 'North Korean won', '{sign}{number} {symbol}', 408, '{number} {symbol}', '₩', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 87), +(78, 0, '', 'KRW', 0, '', 'South Korean won', '{sign}{number} {symbol}', 410, '{number} {symbol}', '₩', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 21), +(79, 0, '', 'KWD', 2, ',', 'Kuwaiti dinar', '{sign}{number} {symbol}', 414, '{number} {symbol}', 'د.ك', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 88), +(80, 0, '', 'KYD', 2, ',', 'Cayman Islands dollar', '{sign}{number} {symbol}', 136, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 89), +(81, 0, '', 'KZT', 2, ',', 'Kazakhstani tenge', '{sign}{number} {symbol}', 398, '{number} {symbol}', 'лв', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 90), +(82, 0, '', 'LAK', 0, '', 'Lao kip', '{sign}{number} {symbol}', 418, '{number} {symbol}', '₭', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 91), +(83, 0, '', 'LBP', 0, '', 'Lebanese pound', '{sign}{number} {symbol}', 422, '{number} {symbol}', '£', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 92), +(84, 0, '', 'LKR', 2, ',', 'Sri Lankan rupee', '{sign}{number} {symbol}', 144, '{number} {symbol}', '₨', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 93), +(85, 0, '', 'LRD', 2, ',', 'Liberian dollar', '{sign}{number} {symbol}', 430, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 94), +(86, 0, '', 'LSL', 2, ',', 'Lesotho loti', '{sign}{number} {symbol}', 426, '{number} {symbol}', 'L', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 95), +(87, 0, '', 'LTL', 2, ',', 'Lithuanian litas', '{sign}{number} {symbol}', 440, '{number} {symbol}', 'Lt', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 96), +(88, 0, '', 'LVL', 2, ',', 'Latvian lats', '{sign}{number} {symbol}', 428, '{number} {symbol}', 'Ls', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 97), +(89, 0, '', 'LYD', 3, ',', 'Libyan dinar', '{sign}{number} {symbol}', 434, '{number} {symbol}', 'ل.د', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 98), +(90, 0, '', 'MAD', 2, ',', 'Moroccan dirham', '{sign}{number} {symbol}', 504, '{number} {symbol}', 'د.م.', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 99), +(91, 0, '', 'MDL', 2, ',', 'Moldovan leu', '{sign}{number} {symbol}', 498, '{number} {symbol}', 'L', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 100), +(92, 0, '', 'MGA', 2, ',', 'Malagasy ariary', '{sign}{number} {symbol}', 969, '{number} {symbol}', 'MGA', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 101), +(93, 0, '', 'MKD', 2, ',', 'Macedonian denar', '{sign}{number} {symbol}', 807, '{number} {symbol}', 'ден', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 102), +(94, 0, '', 'MMK', 2, ',', 'Myanmar kyat', '{symbol} {sign}{number}', 104, '{number} {symbol}', 'K', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 103), +(95, 0, '', 'MNT', 2, ',', 'Mongolian tögrög', '{sign}{number} {symbol}', 496, '{number} {symbol}', '₮', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 104), +(96, 0, '', 'MOP', 1, ',', 'Macanese pataca', '{symbol}{sign}{number}', 446, '{symbol}{number}', 'P', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 105), +(97, 0, '', 'MRO', 2, ',', 'Mauritanian ouguiya', '{sign}{number} {symbol}', 478, '{number} {symbol}', 'UM', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 106), +(98, 0, '', 'MUR', 2, ',', 'Mauritian rupee', '{sign}{number} {symbol}', 480, '{number} {symbol}', '₨', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 107), +(99, 0, '', 'MVR', 2, ',', 'Maldivian rufiyaa', '{sign}{number} {symbol}', 462, '{number} {symbol}', 'ރ.', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 108), +(100, 0, '', 'MWK', 2, ',', 'Malawian kwacha', '{sign}{number} {symbol}', 454, '{number} {symbol}', 'MK', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 109), +(101, 0, '', 'MXN', 2, ',', 'Mexican peso', '{sign}{number} {symbol}', 484, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 8), +(102, 0, '', 'MXV', 2, ',', 'Mexican Unid', '{sign}{number} {symbol}', 979, '{number} {symbol}', 'MXV', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 110), +(103, 0, '', 'MYR', 2, ',', 'Malaysian ringgit', '{sign}{number} {symbol}', 458, '{number} {symbol}', 'RM', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 111), +(104, 0, '', 'MZN', 2, ',', 'Mozambican metical', '{sign}{number} {symbol}', 943, '{number} {symbol}', 'MT', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 112), +(105, 0, '', 'NAD', 2, ',', 'Namibian dollar', '{symbol} {sign}{number}', 516, '{symbol} {number}', 'N$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 113), +(106, 0, '', 'NGN', 2, ',', 'Nigerian naira', '{sign}{number} {symbol}', 566, '{number} {symbol}', '₦', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 114), +(107, 0, '', 'NIO', 2, ',', 'Nicaraguan córdoba', '{sign}{number} {symbol}', 558, '{number} {symbol}', 'C$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 115), +(108, 0, '', 'NOK', 2, ',', 'Norwegian krone', '{symbol}{sign}{number}', 578, '{symbol}{number}', 'kr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 18), +(109, 0, '', 'NPR', 2, ',', 'Nepalese rupee', '{sign}{number} {symbol}', 524, '{number} {symbol}', '₨', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 116), +(110, 0, '', 'NZD', 2, ',', 'New Zealand dollar', '{symbol}{sign}{number}', 554, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 10), +(111, 0, '', 'OMR', 3, '.', 'Omani rial', '{sign}{number} {symbol}', 512, '{number} {symbol}', '﷼', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 117), +(112, 0, '', 'PAB', 2, ',', 'Panamanian balboa', '{sign}{number} {symbol}', 590, '{number} {symbol}', 'B/.', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 118), +(113, 0, '', 'PEN', 2, ',', 'Peruvian nuevo sol', '{sign}{number} {symbol}', 604, '{number} {symbol}', 'S/.', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 119), +(114, 0, '', 'PGK', 2, ',', 'Papua New Guinean kina', '{sign}{number} {symbol}', 598, '{number} {symbol}', 'K', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 120), +(115, 0, '', 'PHP', 2, ',', 'Philippine peso', '{sign}{number} {symbol}', 608, '{number} {symbol}', '₱', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 121), +(116, 0, '', 'PKR', 2, ',', 'Pakistani rupee', '{sign}{number} {symbol}', 586, '{number} {symbol}', '₨', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 122), +(117, 0, '', 'PLN', 2, ',', 'Polish Złoty', '{sign}{number} {symbol}', 985, '{number} {symbol}', 'zł', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 123), +(118, 0, '', 'PYG', 0, '', 'Paraguayan guaraní', '{symbol} {sign}{number}', 600, '{symbol} {number}', '₲', '.', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 124), +(119, 0, '', 'QAR', 2, ',', 'Qatari riyal', '{sign}{number} {symbol}', 634, '{number} {symbol}', '﷼', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 125), +(120, 0, '', 'RON', 2, ',', 'Romanian leu', '{sign}{number} {symbol}', 946, '{number} {symbol}', 'lei', '.', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 126), +(121, 0, '', 'RWF', 2, ',', 'Rwandan franc', '{sign}{number} {symbol}', 646, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 128), +(122, 0, '', 'SAR', 2, ',', 'Saudi riyal', '{sign}{number} {symbol}', 682, '{number} {symbol}', '﷼', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 129), +(123, 0, '', 'SBD', 2, ',', 'Solomon Islands dollar', '{sign}{number} {symbol}', 90, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 130), +(124, 0, '', 'SCR', 2, ',', 'Seychellois rupee', '{sign}{number} {symbol}', 690, '{number} {symbol}', '₨', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 131), +(125, 0, '', 'SDG', 2, ',', 'Sudanese pound', '{sign}{number} {symbol}', 938, '{number} {symbol}', '£', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 132), +(126, 0, '', 'SEK', 2, ',', 'Swedish krona', '{sign}{number} {symbol}', 752, '{number} {symbol}', 'kr', '.', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 11), +(127, 0, '', 'SGD', 2, ',', 'Singapore dollar', '{sign}{number} {symbol}', 702, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 14), +(128, 0, '', 'SHP', 2, ',', 'Saint Helenian pound', '{sign}{number} {symbol}', 654, '{number} {symbol}', '£', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 133), +(129, 0, '', 'SLL', 2, ',', 'Sierra Leonean leone', '{sign}{number} {symbol}', 694, '{number} {symbol}', 'Le', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 134), +(130, 0, '', 'SOS', 2, ',', 'Somali shilling', '{sign}{number} {symbol}', 706, '{number} {symbol}', 'S', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 135), +(131, 0, '', 'SRD', 2, ',', 'Surinamese dollar', '{sign}{number} {symbol}', 968, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 136), +(132, 0, '', 'STD', 0, '', 'São Tomé and Príncipe dobra', '{sign}{number} {symbol}', 678, '{number} {symbol}', 'Db', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 137), +(133, 0, '', 'RUB', 2, ',', 'Russian ruble', '{sign}{number} {symbol}', 643, '{number} {symbol}', 'руб', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 12), +(134, 0, '', 'SVC', 2, ',', 'Salvadoran colón', '{sign}{number} {symbol}', 222, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 138), +(135, 0, '', 'SYP', 2, ',', 'Syrian pound', '{sign}{number} {symbol}', 760, '{number} {symbol}', '£', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 139), +(136, 0, '', 'SZL', 2, ',', 'Swazi lilangeni', '{sign}{number} {symbol}', 748, '{number} {symbol}', 'L', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 140), +(137, 0, '', 'THB', 2, ',', 'Thai baht', '{sign}{number} {symbol}', 764, '{number} {symbol}', '฿', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 141), +(138, 0, '', 'TJS', 2, ',', 'Tajikistani somoni', '{sign}{number} {symbol}', 972, '{number} {symbol}', 'ЅМ', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 142), +(139, 0, '', 'TND', 3, ',', 'Tunisian dinar', '{sign}{number} {symbol}', 788, '{number} {symbol}', 'د.ت', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 143), +(140, 0, '', 'TOP', 2, ',', 'Tongan paʻanga', '{sign}{number} {symbol}', 776, '{number} {symbol}', 'T$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 144), +(141, 0, '', 'TRY', 2, ',', 'Turkish new lira', '{sign}{number} {symbol}', 949, '{number} {symbol}', 'YTL', '.', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 15), +(142, 0, '', 'TTD', 2, ',', 'Trinidad and Tobago dollar', '{sign}{number} {symbol}', 780, '{number} {symbol}', 'TT$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 145), +(143, 0, '', 'TWD', 2, ',', 'New Taiwan dollar', '{sign}{number} {symbol}', 901, '{number} {symbol}', 'NT$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 146), +(144, 0, '', 'TZS', 2, ',', 'Tanzanian shilling', '{sign}{number} {symbol}', 834, '{number} {symbol}', 'Sh', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 147), +(145, 0, '', 'UAH', 2, ',', 'Ukrainian hryvnia', '{sign}{number} {symbol}', 980, '{number} {symbol}', '₴', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 148), +(146, 0, '', 'UGX', 2, ',', 'Ugandan shilling', '{sign}{number} {symbol}', 800, '{number} {symbol}', 'Sh', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 149), +(147, 0, '', 'USD', 2, '.', 'United States dollar', '{symbol}{sign}{number}', 840, '{symbol}{number}', '$', ',', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 1), +(148, 0, '', 'UYI', 2, ',', 'Uruguay Peso', '{sign}{number} {symbol}', 940, '{number} {symbol}', 'UYI', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 150), +(149, 0, '', 'UYU', 0, '', 'Uruguayan peso', '{symbol}{sign}{number}', 858, '{symbol} {number}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 151), +(150, 0, '', 'UZS', 2, ',', 'Uzbekistani som', '{sign}{number} {symbol}', 860, '{number} {symbol}', 'лв', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 152), +(151, 0, '', 'VEF', 2, ',', 'Venezuelan bolívar', '{sign}{number} {symbol}', 937, '{number} {symbol}', 'Bs', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 153), +(152, 0, '', 'VND', 0, '', 'Vietnamese Dong', '{sign}{number} {symbol}', 704, '{number} {symbol}', '₫', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 154), +(153, 0, '', 'VUV', 2, ',', 'Vanuatu vatu', '{sign}{number} {symbol}', 548, '{number} {symbol}', 'Vt', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 155), +(154, 0, '', 'WST', 2, ',', 'Samoan tala', '{sign}{number} {symbol}', 882, '{number} {symbol}', 'T', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 156), +(155, 0, '', 'XAF', 0, '', 'Central African CFA franc', '{sign}{number} {symbol}', 950, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 157), +(156, 0, '', 'XCD', 2, ',', 'East Caribbean dollar', '{sign}{number} {symbol}', 951, '{number} {symbol}', '$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 158), +(157, 0, '', 'XOF', 2, ',', 'West African CFA franc', '{sign}{number} {symbol}', 952, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 159), +(158, 0, '', 'XPF', 2, ',', 'CFP franc', '{sign}{number} {symbol}', 953, '{number} {symbol}', 'Fr', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 160), +(159, 0, '', 'YER', 2, ',', 'Yemeni rial', '{sign}{number} {symbol}', 886, '{number} {symbol}', '﷼', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 161), +(160, 0, '', 'RSD', 2, ',', 'Serbian dinar', '{sign}{number} {symbol}', 941, '{number} {symbol}', 'Дин.', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 127), +(161, 3022, 'south-african-rand', 'ZAR', 2, ',', 'South African rand', '{symbol} {sign}{number}', 710, '{symbol} {number}', 'R', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 2, 0, 5, 22), +(162, 0, '', 'ZMK', 2, ',', 'Zambian kwacha', '{sign}{number} {symbol}', 894, '{number} {symbol}', 'ZK', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 162), +(163, 0, '', 'ZWD', 2, ',', 'Zimbabwean dollar', '{sign}{number} {symbol}', 932, '{number} {symbol}', 'Z$', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 163), +(164, 0, '', 'ZZZ', 2, ',', 'Reserved', '', 0, '', 'O', '', '', 1, 0, 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, '0000-00-00 00:00:00', 1, 0, 0, 164); -INSERT INTO `#__supportgroups_currency` (`id`, `alias`, `codethree`, `decimalplace`, `decimalsymbol`, `name`, `negativestyle`, `numericcode`, `positivestyle`, `symbol`, `thousands`, `params`, `published`, `created_by`, `modified_by`, `created`, `modified`, `checked_out`, `checked_out_time`, `version`, `hits`, `access`, `ordering`) VALUES -(1, '', 'AED', 2, ',', 'United Arab Emirates dirham', '{sign}{number} {symbol}', 784, '{number} {symbol}', 'د.إ', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 23), -(2, '', 'AFN', 2, ',', 'Afghan afghani', '{sign}{number} {symbol}', 971, '{number} {symbol}', '؋', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 24), -(3, '', 'ALL', 2, ',', 'Albanian lek', '{sign}{number} {symbol}', 8, '{number} {symbol}', 'Lek', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 25), -(4, '', 'AMD', 2, ',', 'Armenian dram', '{sign}{number} {symbol}', 51, '{number} {symbol}', 'դր.', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 26), -(5, '', 'ANG', 2, ',', 'Netherlands Antillean gulden', '{sign}{number} {symbol}', 532, '{number} {symbol}', 'ƒ', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 27), -(6, '', 'AOA', 2, ',', 'Angolan kwanza', '{sign}{number} {symbol}', 973, '{number} {symbol}', 'Kz', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 28), -(7, '', 'ARS', 2, ',', 'Argentine peso', '{sign}{number} {symbol}', 32, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 29), -(8, '', 'AUD', 2, '.', 'Australian dollar', '{sign}{symbol} {number}', 36, '{symbol} {number}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 5), -(9, '', 'AWG', 2, ',', 'Aruban florin', '{sign}{number} {symbol}', 533, '{number} {symbol}', 'ƒ', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 30), -(10, '', 'AZN', 2, ',', 'Azerbaijani manat', '{sign}{number} {symbol}', 934, '{number} {symbol}', 'ман', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 31), -(11, '', 'BAM', 2, ',', 'Bosnia and Herzegovina convert', '{sign}{number} {symbol}', 977, '{number} {symbol}', 'KM', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 32), -(12, '', 'BBD', 2, ',', 'Barbadian dollar', '{sign}{number} {symbol}', 52, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 33), -(13, '', 'BDT', 2, ',', 'Bangladeshi taka', '{sign}{number} {symbol}', 50, '{number} {symbol}', '৳', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 34), -(14, '', 'BGN', 2, ',', 'Bulgarian lev', '{sign}{number} {symbol}', 975, '{number} {symbol}', 'лв', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 35), -(15, '', 'BHD', 2, ',', 'Bahraini dinar', '{sign}{number} {symbol}', 48, '{number} {symbol}', 'ب.د', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 36), -(16, '', 'BIF', '', '', 'Burundian franc', '{sign}{number} {symbol}', 108, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 37), -(17, '', 'BMD', 2, ',', 'Bermudian dollar', '{sign}{number} {symbol}', 60, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 38), -(18, '', 'BND', 2, ',', 'Brunei dollar', '{sign}{number} {symbol}', 96, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 39), -(19, '', 'BOB', 2, ',', 'Bolivian boliviano', '{sign}{number} {symbol}', 68, '{number} {symbol}', '$b', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 40), -(20, '', 'BOV', 2, ',', 'Mvdol', '{sign}{number} {symbol}', 984, '{number} {symbol}', 'BOV', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 41), -(21, '', 'BRL', 2, '.', 'Brazilian real', '{symbol} {sign}{number}', 986, '{symbol} {number}', 'R$', ',', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 17), -(22, '', 'BSD', 2, ',', 'Bahamian dollar', '{sign}{number} {symbol}', 44, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 42), -(23, '', 'BTN', 2, ',', 'Bhutanese ngultrum', '{sign}{number} {symbol}', 64, '{number} {symbol}', 'BTN', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 43), -(24, '', 'BWP', 2, ',', 'Botswana pula', '{sign}{number} {symbol}', 72, '{number} {symbol}', 'P', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 44), -(25, '', 'BYR', '', '', 'Belarusian ruble', '{sign}{number} {symbol}', 974, '{number} {symbol}', 'p.', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 45), -(26, '', 'BZD', 2, ',', 'Belize dollar', '{sign}{number} {symbol}', 84, '{number} {symbol}', 'BZ$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 46), -(27, '', 'CAD', 2, '.', 'Canadian dollar', '{symbol}{sign}{number}', 124, '{symbol}{number}', '$', ',', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 7), -(28, '', 'CDF', 2, ',', 'Congolese franc', '{sign}{number} {symbol}', 976, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 47), -(29, '', 'CHE', 2, ',', 'WIR Euro', '{sign}{number} {symbol}', 947, '{number} {symbol}', '€', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 48), -(30, '', 'CHF', 2, ',', 'Swiss franc', '{sign}{number} {symbol}', 756, '{number} {symbol}', 'CHF', '', '', 1, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 6), -(31, '', 'CHW', 2, ',', 'WIR Franc', '{sign}{number} {symbol}', 948, '{number} {symbol}', 'CHW', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 49), -(32, '', 'CLF', '', ',', 'Unidad de Fomento', '{sign}{number} {symbol}', 990, '{number} {symbol}', 'CLF', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 50), -(33, '', 'CLP', 2, ',', 'Chilean peso', '{sign}{number} {symbol}', 152, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 51), -(34, '', 'CNY', 2, ',', 'Chinese renminbi yuan', '{sign}{number} {symbol}', 156, '{number} {symbol}', '元', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 9), -(35, '', 'COP', 2, ',', 'Colombian peso', '{sign}{number} {symbol}', 170, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 52), -(36, '', 'COU', 2, ',', 'Unidad de Valor Real', '{sign}{number} {symbol}', 970, '{number} {symbol}', 'COU', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 53), -(37, '', 'CRC', 2, ',', 'Costa Rican colón', '{sign}{number} {symbol}', 188, '{number} {symbol}', '₡', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 54), -(38, '', 'CZK', 2, ',', 'Czech koruna', '{sign}{number} {symbol}', 203, '{number} {symbol}', 'Kč', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 57), -(39, '', 'CUP', 2, ',', 'Cuban peso', '{sign}{number} {symbol}', 192, '{number} {symbol}', '₱', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 55), -(40, '', 'CVE', '', '', 'Cape Verdean escudo', '{sign}{number} {symbol}', 132, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 56), -(41, '', 'DJF', '', '', 'Djiboutian franc', '{sign}{number} {symbol}', 262, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 58), -(42, '', 'DKK', 2, '.', 'Danish krone', '{symbol}{sign}{number}', 208, '{symbol}{number}', 'kr', ',', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 19), -(43, '', 'DOP', 2, ',', 'Dominican peso', '{sign}{number} {symbol}', 214, '{number} {symbol}', 'RD$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 59), -(44, '', 'DZD', 2, ',', 'Algerian dinar', '{sign}{number} {symbol}', 12, '{number} {symbol}', 'د.ج', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 60), -(45, '', 'EGP', 2, ',', 'Egyptian pound', '{sign}{number} {symbol}', 818, '{number} {symbol}', '£', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 61), -(46, '', 'ERN', 2, ',', 'Eritrean nakfa', '{sign}{number} {symbol}', 232, '{number} {symbol}', 'Nfk', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 62), -(47, '', 'ETB', 2, ',', 'Ethiopian birr', '{sign}{number} {symbol}', 230, '{number} {symbol}', 'ETB', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 63), -(48, '', 'EUR', 2, ',', 'Euro', '{sign}{number} {symbol}', 978, '{number} {symbol}', '€', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 2), -(49, '', 'FJD', 2, ',', 'Fijian dollar', '{sign}{number} {symbol}', 242, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 64), -(50, '', 'FKP', 2, ',', 'Falkland pound', '{sign}{number} {symbol}', 238, '{number} {symbol}', '£', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 65), -(51, '', 'GBP', 2, '.', 'British pound', '{symbol}{sign}{number}', 826, '{symbol}{number}', '£', ',', '', 1, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 4), -(52, '', 'GEL', 2, ',', 'Georgian lari', '{sign}{number} {symbol}', 981, '{number} {symbol}', 'ლ', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 66), -(53, '', 'GHS', 2, ',', 'Ghanaian cedi', '{sign}{number} {symbol}', 936, '{number} {symbol}', '₵', '', '', 1, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 67), -(54, '', 'GIP', 2, ',', 'Gibraltar pound', '{sign}{number} {symbol}', 292, '{number} {symbol}', '£', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 68), -(55, '', 'GMD', 2, ',', 'Gambian dalasi', '{sign}{number} {symbol}', 270, '{number} {symbol}', 'D', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 69), -(56, '', 'GNF', '', '', 'Guinean franc', '{sign}{number} {symbol}', 324, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 70), -(57, '', 'GTQ', 2, ',', 'Guatemalan quetzal', '{sign}{number} {symbol}', 320, '{number} {symbol}', 'Q', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 71), -(58, '', 'GYD', 2, ',', 'Guyanese dollar', '{sign}{number} {symbol}', 328, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 72), -(59, '', 'HKD', 2, ',', 'Hong Kong dollar', '{sign}{number} {symbol}', 344, '{number} {symbol}', '元', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 13), -(60, '', 'HNL', 2, ',', 'Honduran lempira', '{sign}{number} {symbol}', 340, '{number} {symbol}', 'L', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 73), -(61, '', 'HRK', 2, ',', 'Croatian kuna', '{sign}{number} {symbol}', 191, '{number} {symbol}', 'kn', '.', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 74), -(62, '', 'HTG', 2, ',', 'Haitian gourde', '{sign}{number} {symbol}', 332, '{number} {symbol}', 'G', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 75), -(63, '', 'HUF', 2, ',', 'Hungarian forint', '{sign}{number} {symbol}', 348, '{number} {symbol}', 'Ft', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 76), -(64, '', 'IDR', '', '', 'Indonesian rupiah', '{symbol}{sign}{number}', 360, '{symbol}{number}', 'Rp', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 77), -(65, '', 'ILS', 2, ',', 'Israeli new sheqel', '{sign}{number} {symbol}', 376, '{number} {symbol}', '₪', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 20), -(66, '', 'INR', 2, ',', 'Indian rupee', '{sign}{number} {symbol}', 356, '{number} {symbol}', '₨', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 16), -(67, '', 'IQD', '', '', 'Iraqi dinar', '{sign}{number} {symbol}', 368, '{number} {symbol}', 'ع.د', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 78), -(68, '', 'IRR', 2, ',', 'Iranian rial', '{sign}{number}{symb0l}', 364, '{number} {symbol}', '﷼', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 79), -(69, '', 'ISK', 2, ',', 'Icelandic króna', '{sign}{number} {symbol}', 352, '{number} {symbol}', 'kr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 80), -(70, '', 'JMD', 2, ',', 'Jamaican dollar', '{sign}{number} {symbol}', 388, '{number} {symbol}', 'J$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 81), -(71, '', 'JOD', 2, ',', 'Jordanian dinar', '{sign}{number} {symbol}', 400, '{number} {symbol}', 'د.ا', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 82), -(72, '', 'JPY', 2, ',', 'Japanese yen', '{sign}{number} {symbol}', 392, '{number} {symbol}', '¥', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 3), -(73, '', 'KES', 2, ',', 'Kenyan shilling', '{sign}{number} {symbol}', 404, '{number} {symbol}', 'Sh', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 83), -(74, '', 'KGS', 2, ',', 'Kyrgyzstani som', '{sign}{number} {symbol}', 417, '{number} {symbol}', 'лв', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 84), -(75, '', 'KHR', 2, ',', 'Cambodian riel', '{sign}{number} {symbol}', 116, '{number} {symbol}', '៛', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 85), -(76, '', 'KMF', '', '', 'Comorian franc', '{sign}{number} {symbol}', 174, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 86), -(77, '', 'KPW', '', '', 'North Korean won', '{sign}{number} {symbol}', 408, '{number} {symbol}', '₩', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 87), -(78, '', 'KRW', '', '', 'South Korean won', '{sign}{number} {symbol}', 410, '{number} {symbol}', '₩', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 21), -(79, '', 'KWD', 2, ',', 'Kuwaiti dinar', '{sign}{number} {symbol}', 414, '{number} {symbol}', 'د.ك', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 88), -(80, '', 'KYD', 2, ',', 'Cayman Islands dollar', '{sign}{number} {symbol}', 136, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 89), -(81, '', 'KZT', 2, ',', 'Kazakhstani tenge', '{sign}{number} {symbol}', 398, '{number} {symbol}', 'лв', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 90), -(82, '', 'LAK', '', '', 'Lao kip', '{sign}{number} {symbol}', 418, '{number} {symbol}', '₭', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 91), -(83, '', 'LBP', '', '', 'Lebanese pound', '{sign}{number} {symbol}', 422, '{number} {symbol}', '£', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 92), -(84, '', 'LKR', 2, ',', 'Sri Lankan rupee', '{sign}{number} {symbol}', 144, '{number} {symbol}', '₨', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 93), -(85, '', 'LRD', 2, ',', 'Liberian dollar', '{sign}{number} {symbol}', 430, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 94), -(86, '', 'LSL', 2, ',', 'Lesotho loti', '{sign}{number} {symbol}', 426, '{number} {symbol}', 'L', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 95), -(87, '', 'LTL', 2, ',', 'Lithuanian litas', '{sign}{number} {symbol}', 440, '{number} {symbol}', 'Lt', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 96), -(88, '', 'LVL', 2, ',', 'Latvian lats', '{sign}{number} {symbol}', 428, '{number} {symbol}', 'Ls', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 97), -(89, '', 'LYD', 3, ',', 'Libyan dinar', '{sign}{number} {symbol}', 434, '{number} {symbol}', 'ل.د', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 98), -(90, '', 'MAD', 2, ',', 'Moroccan dirham', '{sign}{number} {symbol}', 504, '{number} {symbol}', 'د.م.', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 99), -(91, '', 'MDL', 2, ',', 'Moldovan leu', '{sign}{number} {symbol}', 498, '{number} {symbol}', 'L', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 100), -(92, '', 'MGA', 2, ',', 'Malagasy ariary', '{sign}{number} {symbol}', 969, '{number} {symbol}', 'MGA', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 101), -(93, '', 'MKD', 2, ',', 'Macedonian denar', '{sign}{number} {symbol}', 807, '{number} {symbol}', 'ден', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 102), -(94, '', 'MMK', 2, ',', 'Myanmar kyat', '{symbol} {sign}{number}', 104, '{number} {symbol}', 'K', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 103), -(95, '', 'MNT', 2, ',', 'Mongolian tögrög', '{sign}{number} {symbol}', 496, '{number} {symbol}', '₮', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 104), -(96, '', 'MOP', 1, ',', 'Macanese pataca', '{symbol}{sign}{number}', 446, '{symbol}{number}', 'P', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 105), -(97, '', 'MRO', 2, ',', 'Mauritanian ouguiya', '{sign}{number} {symbol}', 478, '{number} {symbol}', 'UM', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 106), -(98, '', 'MUR', 2, ',', 'Mauritian rupee', '{sign}{number} {symbol}', 480, '{number} {symbol}', '₨', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 107), -(99, '', 'MVR', 2, ',', 'Maldivian rufiyaa', '{sign}{number} {symbol}', 462, '{number} {symbol}', 'ރ.', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 108), -(100, '', 'MWK', 2, ',', 'Malawian kwacha', '{sign}{number} {symbol}', 454, '{number} {symbol}', 'MK', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 109), -(101, '', 'MXN', 2, ',', 'Mexican peso', '{sign}{number} {symbol}', 484, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 8), -(102, '', 'MXV', 2, ',', 'Mexican Unid', '{sign}{number} {symbol}', 979, '{number} {symbol}', 'MXV', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 110), -(103, '', 'MYR', 2, ',', 'Malaysian ringgit', '{sign}{number} {symbol}', 458, '{number} {symbol}', 'RM', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 111), -(104, '', 'MZN', 2, ',', 'Mozambican metical', '{sign}{number} {symbol}', 943, '{number} {symbol}', 'MT', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 112), -(105, '', 'NAD', 2, ',', 'Namibian dollar', '{symbol} {sign}{number}', 516, '{symbol} {number}', 'N$', '', '', 1, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 113), -(106, '', 'NGN', 2, ',', 'Nigerian naira', '{sign}{number} {symbol}', 566, '{number} {symbol}', '₦', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 114), -(107, '', 'NIO', 2, ',', 'Nicaraguan córdoba', '{sign}{number} {symbol}', 558, '{number} {symbol}', 'C$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 115), -(108, '', 'NOK', 2, ',', 'Norwegian krone', '{symbol}{sign}{number}', 578, '{symbol}{number}', 'kr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 18), -(109, '', 'NPR', 2, ',', 'Nepalese rupee', '{sign}{number} {symbol}', 524, '{number} {symbol}', '₨', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 116), -(110, '', 'NZD', 2, ',', 'New Zealand dollar', '{symbol}{sign}{number}', 554, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 10), -(111, '', 'OMR', 3, '.', 'Omani rial', '{sign}{number} {symbol}', 512, '{number} {symbol}', '﷼', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 117), -(112, '', 'PAB', 2, ',', 'Panamanian balboa', '{sign}{number} {symbol}', 590, '{number} {symbol}', 'B/.', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 118), -(113, '', 'PEN', 2, ',', 'Peruvian nuevo sol', '{sign}{number} {symbol}', 604, '{number} {symbol}', 'S/.', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 119), -(114, '', 'PGK', 2, ',', 'Papua New Guinean kina', '{sign}{number} {symbol}', 598, '{number} {symbol}', 'K', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 120), -(115, '', 'PHP', 2, ',', 'Philippine peso', '{sign}{number} {symbol}', 608, '{number} {symbol}', '₱', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 121), -(116, '', 'PKR', 2, ',', 'Pakistani rupee', '{sign}{number} {symbol}', 586, '{number} {symbol}', '₨', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 122), -(117, '', 'PLN', 2, ',', 'Polish Złoty', '{sign}{number} {symbol}', 985, '{number} {symbol}', 'zł', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 123), -(118, '', 'PYG', '', '', 'Paraguayan guaraní', '{symbol} {sign}{number}', 600, '{symbol} {number}', '₲', '.', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 124), -(119, '', 'QAR', 2, ',', 'Qatari riyal', '{sign}{number} {symbol}', 634, '{number} {symbol}', '﷼', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 125), -(120, '', 'RON', 2, ',', 'Romanian leu', '{sign}{number} {symbol}', 946, '{number} {symbol}', 'lei', '.', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 126), -(121, '', 'RWF', 2, ',', 'Rwandan franc', '{sign}{number} {symbol}', 646, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 128), -(122, '', 'SAR', 2, ',', 'Saudi riyal', '{sign}{number} {symbol}', 682, '{number} {symbol}', '﷼', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 129), -(123, '', 'SBD', 2, ',', 'Solomon Islands dollar', '{sign}{number} {symbol}', 90, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 130), -(124, '', 'SCR', 2, ',', 'Seychellois rupee', '{sign}{number} {symbol}', 690, '{number} {symbol}', '₨', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 131), -(125, '', 'SDG', 2, ',', 'Sudanese pound', '{sign}{number} {symbol}', 938, '{number} {symbol}', '£', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 132), -(126, '', 'SEK', 2, ',', 'Swedish krona', '{sign}{number} {symbol}', 752, '{number} {symbol}', 'kr', '.', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 11), -(127, '', 'SGD', 2, ',', 'Singapore dollar', '{sign}{number} {symbol}', 702, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 14), -(128, '', 'SHP', 2, ',', 'Saint Helenian pound', '{sign}{number} {symbol}', 654, '{number} {symbol}', '£', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 133), -(129, '', 'SLL', 2, ',', 'Sierra Leonean leone', '{sign}{number} {symbol}', 694, '{number} {symbol}', 'Le', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 134), -(130, '', 'SOS', 2, ',', 'Somali shilling', '{sign}{number} {symbol}', 706, '{number} {symbol}', 'S', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 135), -(131, '', 'SRD', 2, ',', 'Surinamese dollar', '{sign}{number} {symbol}', 968, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 136), -(132, '', 'STD', '', '', 'São Tomé and Príncipe dobra', '{sign}{number} {symbol}', 678, '{number} {symbol}', 'Db', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 137), -(133, '', 'RUB', 2, ',', 'Russian ruble', '{sign}{number} {symbol}', 643, '{number} {symbol}', 'руб', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 12), -(134, '', 'SVC', 2, ',', 'Salvadoran colón', '{sign}{number} {symbol}', 222, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 138), -(135, '', 'SYP', 2, ',', 'Syrian pound', '{sign}{number} {symbol}', 760, '{number} {symbol}', '£', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 139), -(136, '', 'SZL', 2, ',', 'Swazi lilangeni', '{sign}{number} {symbol}', 748, '{number} {symbol}', 'L', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 140), -(137, '', 'THB', 2, ',', 'Thai baht', '{sign}{number} {symbol}', 764, '{number} {symbol}', '฿', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 141), -(138, '', 'TJS', 2, ',', 'Tajikistani somoni', '{sign}{number} {symbol}', 972, '{number} {symbol}', 'ЅМ', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 142), -(139, '', 'TND', 3, ',', 'Tunisian dinar', '{sign}{number} {symbol}', 788, '{number} {symbol}', 'د.ت', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 143), -(140, '', 'TOP', 2, ',', 'Tongan paʻanga', '{sign}{number} {symbol}', 776, '{number} {symbol}', 'T$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 144), -(141, '', 'TRY', 2, ',', 'Turkish new lira', '{sign}{number} {symbol}', 949, '{number} {symbol}', 'YTL', '.', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 15), -(142, '', 'TTD', 2, ',', 'Trinidad and Tobago dollar', '{sign}{number} {symbol}', 780, '{number} {symbol}', 'TT$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 145), -(143, '', 'TWD', 2, ',', 'New Taiwan dollar', '{sign}{number} {symbol}', 901, '{number} {symbol}', 'NT$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 146), -(144, '', 'TZS', 2, ',', 'Tanzanian shilling', '{sign}{number} {symbol}', 834, '{number} {symbol}', 'Sh', '', '', 1, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 147), -(145, '', 'UAH', 2, ',', 'Ukrainian hryvnia', '{sign}{number} {symbol}', 980, '{number} {symbol}', '₴', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 148), -(146, '', 'UGX', 2, ',', 'Ugandan shilling', '{sign}{number} {symbol}', 800, '{number} {symbol}', 'Sh', '', '', 1, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 149), -(147, '', 'USD', 2, '.', 'United States dollar', '{symbol}{sign}{number}', 840, '{symbol}{number}', '$', ',', '', 1, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 1), -(148, '', 'UYI', 2, ',', 'Uruguay Peso', '{sign}{number} {symbol}', 940, '{number} {symbol}', 'UYI', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 150), -(149, '', 'UYU', '', '', 'Uruguayan peso', '{symbol}{sign}{number}', 858, '{symbol} {number}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 151), -(150, '', 'UZS', 2, ',', 'Uzbekistani som', '{sign}{number} {symbol}', 860, '{number} {symbol}', 'лв', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 152), -(151, '', 'VEF', 2, ',', 'Venezuelan bolívar', '{sign}{number} {symbol}', 937, '{number} {symbol}', 'Bs', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 153), -(152, '', 'VND', '', '', 'Vietnamese Dong', '{sign}{number} {symbol}', 704, '{number} {symbol}', '₫', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 154), -(153, '', 'VUV', 2, ',', 'Vanuatu vatu', '{sign}{number} {symbol}', 548, '{number} {symbol}', 'Vt', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 155), -(154, '', 'WST', 2, ',', 'Samoan tala', '{sign}{number} {symbol}', 882, '{number} {symbol}', 'T', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 156), -(155, '', 'XAF', '', '', 'Central African CFA franc', '{sign}{number} {symbol}', 950, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 157), -(156, '', 'XCD', 2, ',', 'East Caribbean dollar', '{sign}{number} {symbol}', 951, '{number} {symbol}', '$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 158), -(157, '', 'XOF', 2, ',', 'West African CFA franc', '{sign}{number} {symbol}', 952, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 159), -(158, '', 'XPF', 2, ',', 'CFP franc', '{sign}{number} {symbol}', 953, '{number} {symbol}', 'Fr', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 160), -(159, '', 'YER', 2, ',', 'Yemeni rial', '{sign}{number} {symbol}', 886, '{number} {symbol}', '﷼', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 161), -(160, '', 'RSD', 2, ',', 'Serbian dinar', '{sign}{number} {symbol}', 941, '{number} {symbol}', 'Дин.', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 127), -(161, 'south-african-rand', 'ZAR', 2, ',', 'South African rand', '{symbol} {sign}{number}', 710, '{symbol} {number}', 'R', '', '', 1, '', 845, '0000-00-00 00:00:00', '2015-08-30 22:07:36', '', '0000-00-00 00:00:00', 2, '', 5, 22), -(162, '', 'ZMK', 2, ',', 'Zambian kwacha', '{sign}{number} {symbol}', 894, '{number} {symbol}', 'ZK', '', '', 1, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 162), -(163, '', 'ZWD', 2, ',', 'Zimbabwean dollar', '{sign}{number} {symbol}', 932, '{number} {symbol}', 'Z$', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 163), -(164, '', 'ZZZ', 2, ',', 'Reserved', '', '', '', 'O', '', '', 2, '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 1, '', '', 164); \ No newline at end of file + + +-- +-- Always insure this column rules is large enough for all the access control values. +-- +ALTER TABLE `#__assets` CHANGE `rules` `rules` MEDIUMTEXT NOT NULL COMMENT 'JSON encoded access control.'; + +-- +-- Always insure this column name is large enough for long component and view names. +-- +ALTER TABLE `#__assets` CHANGE `name` `name` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'The unique name for the asset.'; diff --git a/admin/sql/uninstall.mysql.utf8.sql b/admin/sql/uninstall.mysql.utf8.sql index 0c2aa88..6c5b6d3 100644 --- a/admin/sql/uninstall.mysql.utf8.sql +++ b/admin/sql/uninstall.mysql.utf8.sql @@ -1,7 +1,11 @@ DROP TABLE IF EXISTS `#__supportgroups_support_group`; DROP TABLE IF EXISTS `#__supportgroups_payment`; -DROP TABLE IF EXISTS `#__supportgroups_clinic`; -DROP TABLE IF EXISTS `#__supportgroups_location`; +DROP TABLE IF EXISTS `#__supportgroups_facility`; +DROP TABLE IF EXISTS `#__supportgroups_facility_type`; +DROP TABLE IF EXISTS `#__supportgroups_additional_info`; +DROP TABLE IF EXISTS `#__supportgroups_info_type`; +DROP TABLE IF EXISTS `#__supportgroups_area`; +DROP TABLE IF EXISTS `#__supportgroups_area_type`; DROP TABLE IF EXISTS `#__supportgroups_region`; DROP TABLE IF EXISTS `#__supportgroups_country`; DROP TABLE IF EXISTS `#__supportgroups_currency`; diff --git a/admin/sql/updates/mysql/1.0.3.sql b/admin/sql/updates/mysql/1.0.3.sql new file mode 100644 index 0000000..98f02dd --- /dev/null +++ b/admin/sql/updates/mysql/1.0.3.sql @@ -0,0 +1 @@ +RENAME TABLE `#__supportgroups_capacity` TO `#__supportgroups_additional_info`; diff --git a/admin/sql/updates/mysql/1.0.4.sql b/admin/sql/updates/mysql/1.0.4.sql new file mode 100644 index 0000000..b8ba860 --- /dev/null +++ b/admin/sql/updates/mysql/1.0.4.sql @@ -0,0 +1,3 @@ +RENAME TABLE `#__supportgroups_capacity_type` TO `#__supportgroups_info_type`; + +ALTER TABLE `#__supportgroups_support_group` CHANGE `capacity` `info` TEXT NOT NULL DEFAULT ''; diff --git a/admin/sql/updates/mysql/1.0.5.sql b/admin/sql/updates/mysql/1.0.5.sql new file mode 100644 index 0000000..43b0770 --- /dev/null +++ b/admin/sql/updates/mysql/1.0.5.sql @@ -0,0 +1 @@ +ALTER TABLE `#__supportgroups_additional_info` CHANGE `type` `info_type` INT(11) NOT NULL DEFAULT '0'; diff --git a/admin/sql/updates/mysql/1.0.6.sql b/admin/sql/updates/mysql/1.0.6.sql new file mode 100644 index 0000000..22b3724 --- /dev/null +++ b/admin/sql/updates/mysql/1.0.6.sql @@ -0,0 +1 @@ +ALTER TABLE `#__supportgroups_facility` CHANGE `type` `facility_type` INT(11) NOT NULL DEFAULT '0'; diff --git a/admin/sql/updates/mysql/1.0.7.sql b/admin/sql/updates/mysql/1.0.7.sql new file mode 100644 index 0000000..4207b43 --- /dev/null +++ b/admin/sql/updates/mysql/1.0.7.sql @@ -0,0 +1 @@ +ALTER TABLE `#__supportgroups_area` CHANGE `type` `area_type` INT(11) NOT NULL DEFAULT '0'; diff --git a/admin/supportgroups.php b/admin/supportgroups.php index 7d000a0..05899ad 100644 --- a/admin/supportgroups.php +++ b/admin/supportgroups.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage supportgroups.php @@ -29,7 +29,7 @@ defined('_JEXEC') or die('Restricted access'); // Access check. if (!JFactory::getUser()->authorise('core.manage', 'com_supportgroups')) { - return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); + return JError::raiseWaring(404, JText::_('JERROR_ALERTNOAUTHOR')); }; // Load cms libraries @@ -43,7 +43,7 @@ $document->addStyleSheet('components/com_supportgroups/assets/css/admin.css'); $document->addScript('components/com_supportgroups/assets/js/admin.js'); // require helper files -JLoader::register('SupportgroupsHelper', dirname(__FILE__) . '/helpers/supportgroups.php'); +JLoader::register('SupportgroupsHelper', dirname(__FILE__) . '/helpers/supportgroups.php'); JLoader::register('JHtmlBatch_', dirname(__FILE__) . '/helpers/html/batch_.php'); // import joomla controller library diff --git a/admin/tables/additional_info.php b/admin/tables/additional_info.php new file mode 100644 index 0000000..dfbd019 --- /dev/null +++ b/admin/tables/additional_info.php @@ -0,0 +1,338 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla table library +jimport('joomla.database.table'); + +/** + * Additional_information Table class + */ +class SupportgroupsTableAdditional_info extends JTable +{ + /** + * Ensure the params and metadata in json encoded in the bind method + * + * @var array + * @since 3.3 + */ + protected $_jsonEncode = array('params', 'metadata'); + + /** + * Constructor + * + * @param object Database connector object + */ + function __construct(&$db) + { + parent::__construct('#__supportgroups_additional_info', 'id', $db); + + // Adding History Options + JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_supportgroups.additional_info')); + } + + public function bind($array, $ignore = '') + { + + if (isset($array['params']) && is_array($array['params'])) + { + $registry = new JRegistry; + $registry->loadArray($array['params']); + $array['params'] = (string) $registry; + } + + if (isset($array['metadata']) && is_array($array['metadata'])) + { + $registry = new JRegistry; + $registry->loadArray($array['metadata']); + $array['metadata'] = (string) $registry; + } + + // Bind the rules. + if (isset($array['rules']) && is_array($array['rules'])) + { + $rules = new JAccessRules($array['rules']); + $this->setRules($rules); + } + return parent::bind($array, $ignore); + } + + /** + * Overload the store method for the Additional_info table. + * + * @param boolean Toggle whether null values should be updated. + * @return boolean True on success, false on failure. + * @since 1.6 + */ + public function store($updateNulls = false) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if ($this->id) + { + // Existing item + $this->modified = $date->toSql(); + $this->modified_by = $user->get('id'); + } + else + { + // New additional_info. A additional_info created and created_by field can be set by the user, + // so we don't touch either of these if they are set. + if (!(int) $this->created) + { + $this->created = $date->toSql(); + } + if (empty($this->created_by)) + { + $this->created_by = $user->get('id'); + } + } + + if (isset($this->alias)) + { + // Verify that the alias is unique + $table = JTable::getInstance('additional_info', 'SupportgroupsTable'); + + if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->setError(JText::_('COM_SUPPORTGROUPS_ADDITIONAL_INFO_ERROR_UNIQUE_ALIAS')); + return false; + } + } + + if (isset($this->url)) + { + // Convert IDN urls to punycode + $this->url = JStringPunycode::urlToPunycode($this->url); + } + if (isset($this->website)) + { + // Convert IDN urls to punycode + $this->website = JStringPunycode::urlToPunycode($this->website); + } + + return parent::store($updateNulls); + } + + /** + * Overloaded check method to ensure data integrity. + * + * @return boolean True on success. + */ + public function check() + { + if (isset($this->alias)) + { + // Generate a valid alias + $this->generateAlias(); + + $table = JTable::getInstance('additional_info', 'supportgroupsTable'); + + while ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->alias = JString::increment($this->alias, 'dash'); + } + } + + /* + * Clean up keywords -- eliminate extra spaces between phrases + * and cr (\r) and lf (\n) characters from string. + * Only process if not empty. + */ + if (!empty($this->metakey)) + { + // Array of characters to remove. + $bad_characters = array("\n", "\r", "\"", "<", ">"); + + // Remove bad characters. + $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); + + // Create array using commas as delimiter. + $keys = explode(',', $after_clean); + $clean_keys = array(); + + foreach ($keys as $key) + { + // Ignore blank keywords. + if (trim($key)) + { + $clean_keys[] = trim($key); + } + } + + // Put array back together delimited by ", " + $this->metakey = implode(", ", $clean_keys); + } + + // Clean up description -- eliminate quotes and <> brackets + if (!empty($this->metadesc)) + { + // Only process if not empty + $bad_characters = array("\"", "<", ">"); + $this->metadesc = JString::str_ireplace($bad_characters, "", $this->metadesc); + } + + // If we don't have any access rules set at this point just use an empty JAccessRules class + if (!$this->getRules()) + { + $rules = $this->getDefaultAssetValues('com_supportgroups.additional_info.'.$this->id); + $this->setRules($rules); + } + + // Set ordering + if ($this->published < 0) + { + // Set ordering to 0 if state is archived or trashed + $this->ordering = 0; + } + + return true; + } + + /** + * Gets the default asset values for a component. + * + * @param $string $component The component asset name to search for + * + * @return JAccessRules The JAccessRules object for the asset + */ + protected function getDefaultAssetValues($component, $try = true) + { + // Need to find the asset id by the name of the component. + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__assets')) + ->where($db->quoteName('name') . ' = ' . $db->quote($component)); + $db->setQuery($query); + $db->execute(); + if ($db->loadRowList()) + { + // asset alread set so use saved rules + $assetId = (int) $db->loadResult(); + return JAccess::getAssetRules($assetId); + } + // try again + elseif ($try) + { + $try = explode('.',$component); + $result = $this->getDefaultAssetValues($try[0], false); + if ($result instanceof JAccessRules) + { + if (isset($try[1])) + { + $_result = (string) $result; + $_result = json_decode($_result); + foreach ($_result as $name => &$rule) + { + $v = explode('.', $name); + if ($try[1] !== $v[0]) + { + // remove since it is not part of this view + unset($_result->$name); + } + else + { + // clear the value since we inherit + $rule = array(); + } + } + // check if there are any view values remaining + if (count( (array) $_result)) + { + $_result = json_encode($_result); + $_result = array($_result); + // Instantiate and return the JAccessRules object for the asset rules. + $rules = new JAccessRules; + $rules->mergeCollection($_result); + + return $rules; + } + } + return $result; + } + } + return JAccess::getAssetRules(0); + } + + /** + * Method to compute the default name of the asset. + * The default name is in the form 'table_name.id' + * where id is the value of the primary key of the table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetName() + { + $k = $this->_tbl_key; + return 'com_supportgroups.additional_info.'.(int) $this->$k; + } + + /** + * Method to return the title to use for the asset table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetTitle() + { + if (isset($this->title)) + { + return $this->title; + } + return ''; + } + + /** + * Get the parent asset id for the record + * + * @return int + * @since 2.5 + */ + protected function _getAssetParentId(JTable $table = NULL, $id = NULL) + { + $asset = JTable::getInstance('Asset'); + $asset->loadByName('com_supportgroups'); + + return $asset->id; + } + + /** + * This view does not actually have an alias + * + * @return bool + */ + public function generateAlias() + { + return false; + } + +} diff --git a/admin/tables/clinic.php b/admin/tables/area.php similarity index 86% rename from admin/tables/clinic.php rename to admin/tables/area.php index 2729e62..463f0ca 100644 --- a/admin/tables/clinic.php +++ b/admin/tables/area.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups - @subpackage clinic.php + @subpackage area.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -32,9 +32,9 @@ use Joomla\Registry\Registry; jimport('joomla.database.table'); /** - * Clinics Table class + * Areas Table class */ -class SupportgroupsTableClinic extends JTable +class SupportgroupsTableArea extends JTable { /** * Ensure the params and metadata in json encoded in the bind method @@ -51,10 +51,10 @@ class SupportgroupsTableClinic extends JTable */ function __construct(&$db) { - parent::__construct('#__supportgroups_clinic', 'id', $db); + parent::__construct('#__supportgroups_area', 'id', $db); // Adding History Options - JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_supportgroups.clinic')); + JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_supportgroups.area')); } public function bind($array, $ignore = '') @@ -84,7 +84,7 @@ class SupportgroupsTableClinic extends JTable } /** - * Overload the store method for the Clinic table. + * Overload the store method for the Area table. * * @param boolean Toggle whether null values should be updated. * @return boolean True on success, false on failure. @@ -103,7 +103,7 @@ class SupportgroupsTableClinic extends JTable } else { - // New clinic. A clinic created and created_by field can be set by the user, + // New area. A area created and created_by field can be set by the user, // so we don't touch either of these if they are set. if (!(int) $this->created) { @@ -118,11 +118,11 @@ class SupportgroupsTableClinic extends JTable if (isset($this->alias)) { // Verify that the alias is unique - $table = JTable::getInstance('clinic', 'SupportgroupsTable'); + $table = JTable::getInstance('area', 'SupportgroupsTable'); if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) { - $this->setError(JText::_('COM_SUPPORTGROUPS_CLINIC_ERROR_UNIQUE_ALIAS')); + $this->setError(JText::_('COM_SUPPORTGROUPS_AREA_ERROR_UNIQUE_ALIAS')); return false; } } @@ -153,7 +153,7 @@ class SupportgroupsTableClinic extends JTable // Generate a valid alias $this->generateAlias(); - $table = JTable::getInstance('clinic', 'supportgroupsTable'); + $table = JTable::getInstance('area', 'supportgroupsTable'); while ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) { @@ -202,7 +202,7 @@ class SupportgroupsTableClinic extends JTable // If we don't have any access rules set at this point just use an empty JAccessRules class if (!$this->getRules()) { - $rules = $this->getDefaultAssetValues('com_supportgroups.clinic.'.$this->id); + $rules = $this->getDefaultAssetValues('com_supportgroups.area.'.$this->id); $this->setRules($rules); } @@ -265,7 +265,7 @@ class SupportgroupsTableClinic extends JTable } } // check if there are any view values remaining - if (count($_result)) + if (count( (array) $_result)) { $_result = json_encode($_result); $_result = array($_result); @@ -293,7 +293,7 @@ class SupportgroupsTableClinic extends JTable protected function _getAssetName() { $k = $this->_tbl_key; - return 'com_supportgroups.clinic.'.(int) $this->$k; + return 'com_supportgroups.area.'.(int) $this->$k; } /** @@ -323,29 +323,29 @@ class SupportgroupsTableClinic extends JTable $asset->loadByName('com_supportgroups'); return $asset->id; - } - - /** - * Generate a valid alias from title / date. - * Remains public to be able to check for duplicated alias before saving - * - * @return string - */ - public function generateAlias() - { - if (empty($this->alias)) - { - $this->alias = $this->name; - } - - $this->alias = JApplication::stringURLSafe($this->alias); - - if (trim(str_replace('-', '', $this->alias)) == '') - { - $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); - } - - return $this->alias; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; } } diff --git a/admin/tables/area_type.php b/admin/tables/area_type.php new file mode 100644 index 0000000..5a72c93 --- /dev/null +++ b/admin/tables/area_type.php @@ -0,0 +1,351 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla table library +jimport('joomla.database.table'); + +/** + * Area_types Table class + */ +class SupportgroupsTableArea_type extends JTable +{ + /** + * Ensure the params and metadata in json encoded in the bind method + * + * @var array + * @since 3.3 + */ + protected $_jsonEncode = array('params', 'metadata'); + + /** + * Constructor + * + * @param object Database connector object + */ + function __construct(&$db) + { + parent::__construct('#__supportgroups_area_type', 'id', $db); + + // Adding History Options + JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_supportgroups.area_type')); + } + + public function bind($array, $ignore = '') + { + + if (isset($array['params']) && is_array($array['params'])) + { + $registry = new JRegistry; + $registry->loadArray($array['params']); + $array['params'] = (string) $registry; + } + + if (isset($array['metadata']) && is_array($array['metadata'])) + { + $registry = new JRegistry; + $registry->loadArray($array['metadata']); + $array['metadata'] = (string) $registry; + } + + // Bind the rules. + if (isset($array['rules']) && is_array($array['rules'])) + { + $rules = new JAccessRules($array['rules']); + $this->setRules($rules); + } + return parent::bind($array, $ignore); + } + + /** + * Overload the store method for the Area_type table. + * + * @param boolean Toggle whether null values should be updated. + * @return boolean True on success, false on failure. + * @since 1.6 + */ + public function store($updateNulls = false) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if ($this->id) + { + // Existing item + $this->modified = $date->toSql(); + $this->modified_by = $user->get('id'); + } + else + { + // New area_type. A area_type created and created_by field can be set by the user, + // so we don't touch either of these if they are set. + if (!(int) $this->created) + { + $this->created = $date->toSql(); + } + if (empty($this->created_by)) + { + $this->created_by = $user->get('id'); + } + } + + if (isset($this->alias)) + { + // Verify that the alias is unique + $table = JTable::getInstance('area_type', 'SupportgroupsTable'); + + if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->setError(JText::_('COM_SUPPORTGROUPS_AREA_TYPE_ERROR_UNIQUE_ALIAS')); + return false; + } + } + + if (isset($this->url)) + { + // Convert IDN urls to punycode + $this->url = JStringPunycode::urlToPunycode($this->url); + } + if (isset($this->website)) + { + // Convert IDN urls to punycode + $this->website = JStringPunycode::urlToPunycode($this->website); + } + + return parent::store($updateNulls); + } + + /** + * Overloaded check method to ensure data integrity. + * + * @return boolean True on success. + */ + public function check() + { + if (isset($this->alias)) + { + // Generate a valid alias + $this->generateAlias(); + + $table = JTable::getInstance('area_type', 'supportgroupsTable'); + + while ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->alias = JString::increment($this->alias, 'dash'); + } + } + + /* + * Clean up keywords -- eliminate extra spaces between phrases + * and cr (\r) and lf (\n) characters from string. + * Only process if not empty. + */ + if (!empty($this->metakey)) + { + // Array of characters to remove. + $bad_characters = array("\n", "\r", "\"", "<", ">"); + + // Remove bad characters. + $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); + + // Create array using commas as delimiter. + $keys = explode(',', $after_clean); + $clean_keys = array(); + + foreach ($keys as $key) + { + // Ignore blank keywords. + if (trim($key)) + { + $clean_keys[] = trim($key); + } + } + + // Put array back together delimited by ", " + $this->metakey = implode(", ", $clean_keys); + } + + // Clean up description -- eliminate quotes and <> brackets + if (!empty($this->metadesc)) + { + // Only process if not empty + $bad_characters = array("\"", "<", ">"); + $this->metadesc = JString::str_ireplace($bad_characters, "", $this->metadesc); + } + + // If we don't have any access rules set at this point just use an empty JAccessRules class + if (!$this->getRules()) + { + $rules = $this->getDefaultAssetValues('com_supportgroups.area_type.'.$this->id); + $this->setRules($rules); + } + + // Set ordering + if ($this->published < 0) + { + // Set ordering to 0 if state is archived or trashed + $this->ordering = 0; + } + + return true; + } + + /** + * Gets the default asset values for a component. + * + * @param $string $component The component asset name to search for + * + * @return JAccessRules The JAccessRules object for the asset + */ + protected function getDefaultAssetValues($component, $try = true) + { + // Need to find the asset id by the name of the component. + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__assets')) + ->where($db->quoteName('name') . ' = ' . $db->quote($component)); + $db->setQuery($query); + $db->execute(); + if ($db->loadRowList()) + { + // asset alread set so use saved rules + $assetId = (int) $db->loadResult(); + return JAccess::getAssetRules($assetId); + } + // try again + elseif ($try) + { + $try = explode('.',$component); + $result = $this->getDefaultAssetValues($try[0], false); + if ($result instanceof JAccessRules) + { + if (isset($try[1])) + { + $_result = (string) $result; + $_result = json_decode($_result); + foreach ($_result as $name => &$rule) + { + $v = explode('.', $name); + if ($try[1] !== $v[0]) + { + // remove since it is not part of this view + unset($_result->$name); + } + else + { + // clear the value since we inherit + $rule = array(); + } + } + // check if there are any view values remaining + if (count( (array) $_result)) + { + $_result = json_encode($_result); + $_result = array($_result); + // Instantiate and return the JAccessRules object for the asset rules. + $rules = new JAccessRules; + $rules->mergeCollection($_result); + + return $rules; + } + } + return $result; + } + } + return JAccess::getAssetRules(0); + } + + /** + * Method to compute the default name of the asset. + * The default name is in the form 'table_name.id' + * where id is the value of the primary key of the table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetName() + { + $k = $this->_tbl_key; + return 'com_supportgroups.area_type.'.(int) $this->$k; + } + + /** + * Method to return the title to use for the asset table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetTitle() + { + if (isset($this->title)) + { + return $this->title; + } + return ''; + } + + /** + * Get the parent asset id for the record + * + * @return int + * @since 2.5 + */ + protected function _getAssetParentId(JTable $table = NULL, $id = NULL) + { + $asset = JTable::getInstance('Asset'); + $asset->loadByName('com_supportgroups'); + + return $asset->id; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; + } + +} diff --git a/admin/tables/country.php b/admin/tables/country.php index 56afb63..e65b86d 100644 --- a/admin/tables/country.php +++ b/admin/tables/country.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage country.php @author Llewellyn van der Merwe @@ -265,7 +265,7 @@ class SupportgroupsTableCountry extends JTable } } // check if there are any view values remaining - if (count($_result)) + if (count( (array) $_result)) { $_result = json_encode($_result); $_result = array($_result); @@ -323,29 +323,29 @@ class SupportgroupsTableCountry extends JTable $asset->loadByName('com_supportgroups'); return $asset->id; - } - - /** - * Generate a valid alias from title / date. - * Remains public to be able to check for duplicated alias before saving - * - * @return string - */ - public function generateAlias() - { - if (empty($this->alias)) - { - $this->alias = $this->name; - } - - $this->alias = JApplication::stringURLSafe($this->alias); - - if (trim(str_replace('-', '', $this->alias)) == '') - { - $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); - } - - return $this->alias; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; } } diff --git a/admin/tables/currency.php b/admin/tables/currency.php index 0801a5e..9c946db 100644 --- a/admin/tables/currency.php +++ b/admin/tables/currency.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage currency.php @author Llewellyn van der Merwe @@ -265,7 +265,7 @@ class SupportgroupsTableCurrency extends JTable } } // check if there are any view values remaining - if (count($_result)) + if (count( (array) $_result)) { $_result = json_encode($_result); $_result = array($_result); @@ -323,29 +323,29 @@ class SupportgroupsTableCurrency extends JTable $asset->loadByName('com_supportgroups'); return $asset->id; - } - - /** - * Generate a valid alias from title / date. - * Remains public to be able to check for duplicated alias before saving - * - * @return string - */ - public function generateAlias() - { - if (empty($this->alias)) - { - $this->alias = $this->name; - } - - $this->alias = JApplication::stringURLSafe($this->alias); - - if (trim(str_replace('-', '', $this->alias)) == '') - { - $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); - } - - return $this->alias; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; } } diff --git a/admin/tables/location.php b/admin/tables/facility.php similarity index 86% rename from admin/tables/location.php rename to admin/tables/facility.php index e0ca2a0..f89370b 100644 --- a/admin/tables/location.php +++ b/admin/tables/facility.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 @package Support Groups - @subpackage location.php + @subpackage facility.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -32,9 +32,9 @@ use Joomla\Registry\Registry; jimport('joomla.database.table'); /** - * Locations Table class + * Facilities Table class */ -class SupportgroupsTableLocation extends JTable +class SupportgroupsTableFacility extends JTable { /** * Ensure the params and metadata in json encoded in the bind method @@ -51,10 +51,10 @@ class SupportgroupsTableLocation extends JTable */ function __construct(&$db) { - parent::__construct('#__supportgroups_location', 'id', $db); + parent::__construct('#__supportgroups_facility', 'id', $db); // Adding History Options - JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_supportgroups.location')); + JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_supportgroups.facility')); } public function bind($array, $ignore = '') @@ -84,7 +84,7 @@ class SupportgroupsTableLocation extends JTable } /** - * Overload the store method for the Location table. + * Overload the store method for the Facility table. * * @param boolean Toggle whether null values should be updated. * @return boolean True on success, false on failure. @@ -103,7 +103,7 @@ class SupportgroupsTableLocation extends JTable } else { - // New location. A location created and created_by field can be set by the user, + // New facility. A facility created and created_by field can be set by the user, // so we don't touch either of these if they are set. if (!(int) $this->created) { @@ -118,11 +118,11 @@ class SupportgroupsTableLocation extends JTable if (isset($this->alias)) { // Verify that the alias is unique - $table = JTable::getInstance('location', 'SupportgroupsTable'); + $table = JTable::getInstance('facility', 'SupportgroupsTable'); if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) { - $this->setError(JText::_('COM_SUPPORTGROUPS_LOCATION_ERROR_UNIQUE_ALIAS')); + $this->setError(JText::_('COM_SUPPORTGROUPS_FACILITY_ERROR_UNIQUE_ALIAS')); return false; } } @@ -153,7 +153,7 @@ class SupportgroupsTableLocation extends JTable // Generate a valid alias $this->generateAlias(); - $table = JTable::getInstance('location', 'supportgroupsTable'); + $table = JTable::getInstance('facility', 'supportgroupsTable'); while ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) { @@ -202,7 +202,7 @@ class SupportgroupsTableLocation extends JTable // If we don't have any access rules set at this point just use an empty JAccessRules class if (!$this->getRules()) { - $rules = $this->getDefaultAssetValues('com_supportgroups.location.'.$this->id); + $rules = $this->getDefaultAssetValues('com_supportgroups.facility.'.$this->id); $this->setRules($rules); } @@ -265,7 +265,7 @@ class SupportgroupsTableLocation extends JTable } } // check if there are any view values remaining - if (count($_result)) + if (count( (array) $_result)) { $_result = json_encode($_result); $_result = array($_result); @@ -293,7 +293,7 @@ class SupportgroupsTableLocation extends JTable protected function _getAssetName() { $k = $this->_tbl_key; - return 'com_supportgroups.location.'.(int) $this->$k; + return 'com_supportgroups.facility.'.(int) $this->$k; } /** @@ -323,29 +323,29 @@ class SupportgroupsTableLocation extends JTable $asset->loadByName('com_supportgroups'); return $asset->id; - } - - /** - * Generate a valid alias from title / date. - * Remains public to be able to check for duplicated alias before saving - * - * @return string - */ - public function generateAlias() - { - if (empty($this->alias)) - { - $this->alias = $this->name; - } - - $this->alias = JApplication::stringURLSafe($this->alias); - - if (trim(str_replace('-', '', $this->alias)) == '') - { - $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); - } - - return $this->alias; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; } } diff --git a/admin/tables/facility_type.php b/admin/tables/facility_type.php new file mode 100644 index 0000000..ea0bb81 --- /dev/null +++ b/admin/tables/facility_type.php @@ -0,0 +1,351 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla table library +jimport('joomla.database.table'); + +/** + * Facility_types Table class + */ +class SupportgroupsTableFacility_type extends JTable +{ + /** + * Ensure the params and metadata in json encoded in the bind method + * + * @var array + * @since 3.3 + */ + protected $_jsonEncode = array('params', 'metadata'); + + /** + * Constructor + * + * @param object Database connector object + */ + function __construct(&$db) + { + parent::__construct('#__supportgroups_facility_type', 'id', $db); + + // Adding History Options + JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_supportgroups.facility_type')); + } + + public function bind($array, $ignore = '') + { + + if (isset($array['params']) && is_array($array['params'])) + { + $registry = new JRegistry; + $registry->loadArray($array['params']); + $array['params'] = (string) $registry; + } + + if (isset($array['metadata']) && is_array($array['metadata'])) + { + $registry = new JRegistry; + $registry->loadArray($array['metadata']); + $array['metadata'] = (string) $registry; + } + + // Bind the rules. + if (isset($array['rules']) && is_array($array['rules'])) + { + $rules = new JAccessRules($array['rules']); + $this->setRules($rules); + } + return parent::bind($array, $ignore); + } + + /** + * Overload the store method for the Facility_type table. + * + * @param boolean Toggle whether null values should be updated. + * @return boolean True on success, false on failure. + * @since 1.6 + */ + public function store($updateNulls = false) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if ($this->id) + { + // Existing item + $this->modified = $date->toSql(); + $this->modified_by = $user->get('id'); + } + else + { + // New facility_type. A facility_type created and created_by field can be set by the user, + // so we don't touch either of these if they are set. + if (!(int) $this->created) + { + $this->created = $date->toSql(); + } + if (empty($this->created_by)) + { + $this->created_by = $user->get('id'); + } + } + + if (isset($this->alias)) + { + // Verify that the alias is unique + $table = JTable::getInstance('facility_type', 'SupportgroupsTable'); + + if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->setError(JText::_('COM_SUPPORTGROUPS_FACILITY_TYPE_ERROR_UNIQUE_ALIAS')); + return false; + } + } + + if (isset($this->url)) + { + // Convert IDN urls to punycode + $this->url = JStringPunycode::urlToPunycode($this->url); + } + if (isset($this->website)) + { + // Convert IDN urls to punycode + $this->website = JStringPunycode::urlToPunycode($this->website); + } + + return parent::store($updateNulls); + } + + /** + * Overloaded check method to ensure data integrity. + * + * @return boolean True on success. + */ + public function check() + { + if (isset($this->alias)) + { + // Generate a valid alias + $this->generateAlias(); + + $table = JTable::getInstance('facility_type', 'supportgroupsTable'); + + while ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->alias = JString::increment($this->alias, 'dash'); + } + } + + /* + * Clean up keywords -- eliminate extra spaces between phrases + * and cr (\r) and lf (\n) characters from string. + * Only process if not empty. + */ + if (!empty($this->metakey)) + { + // Array of characters to remove. + $bad_characters = array("\n", "\r", "\"", "<", ">"); + + // Remove bad characters. + $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); + + // Create array using commas as delimiter. + $keys = explode(',', $after_clean); + $clean_keys = array(); + + foreach ($keys as $key) + { + // Ignore blank keywords. + if (trim($key)) + { + $clean_keys[] = trim($key); + } + } + + // Put array back together delimited by ", " + $this->metakey = implode(", ", $clean_keys); + } + + // Clean up description -- eliminate quotes and <> brackets + if (!empty($this->metadesc)) + { + // Only process if not empty + $bad_characters = array("\"", "<", ">"); + $this->metadesc = JString::str_ireplace($bad_characters, "", $this->metadesc); + } + + // If we don't have any access rules set at this point just use an empty JAccessRules class + if (!$this->getRules()) + { + $rules = $this->getDefaultAssetValues('com_supportgroups.facility_type.'.$this->id); + $this->setRules($rules); + } + + // Set ordering + if ($this->published < 0) + { + // Set ordering to 0 if state is archived or trashed + $this->ordering = 0; + } + + return true; + } + + /** + * Gets the default asset values for a component. + * + * @param $string $component The component asset name to search for + * + * @return JAccessRules The JAccessRules object for the asset + */ + protected function getDefaultAssetValues($component, $try = true) + { + // Need to find the asset id by the name of the component. + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__assets')) + ->where($db->quoteName('name') . ' = ' . $db->quote($component)); + $db->setQuery($query); + $db->execute(); + if ($db->loadRowList()) + { + // asset alread set so use saved rules + $assetId = (int) $db->loadResult(); + return JAccess::getAssetRules($assetId); + } + // try again + elseif ($try) + { + $try = explode('.',$component); + $result = $this->getDefaultAssetValues($try[0], false); + if ($result instanceof JAccessRules) + { + if (isset($try[1])) + { + $_result = (string) $result; + $_result = json_decode($_result); + foreach ($_result as $name => &$rule) + { + $v = explode('.', $name); + if ($try[1] !== $v[0]) + { + // remove since it is not part of this view + unset($_result->$name); + } + else + { + // clear the value since we inherit + $rule = array(); + } + } + // check if there are any view values remaining + if (count( (array) $_result)) + { + $_result = json_encode($_result); + $_result = array($_result); + // Instantiate and return the JAccessRules object for the asset rules. + $rules = new JAccessRules; + $rules->mergeCollection($_result); + + return $rules; + } + } + return $result; + } + } + return JAccess::getAssetRules(0); + } + + /** + * Method to compute the default name of the asset. + * The default name is in the form 'table_name.id' + * where id is the value of the primary key of the table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetName() + { + $k = $this->_tbl_key; + return 'com_supportgroups.facility_type.'.(int) $this->$k; + } + + /** + * Method to return the title to use for the asset table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetTitle() + { + if (isset($this->title)) + { + return $this->title; + } + return ''; + } + + /** + * Get the parent asset id for the record + * + * @return int + * @since 2.5 + */ + protected function _getAssetParentId(JTable $table = NULL, $id = NULL) + { + $asset = JTable::getInstance('Asset'); + $asset->loadByName('com_supportgroups'); + + return $asset->id; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; + } + +} diff --git a/admin/tables/help_document.php b/admin/tables/help_document.php index 648353d..b80a6da 100644 --- a/admin/tables/help_document.php +++ b/admin/tables/help_document.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage help_document.php @author Llewellyn van der Merwe @@ -265,7 +265,7 @@ class SupportgroupsTableHelp_document extends JTable } } // check if there are any view values remaining - if (count($_result)) + if (count( (array) $_result)) { $_result = json_encode($_result); $_result = array($_result); @@ -323,29 +323,29 @@ class SupportgroupsTableHelp_document extends JTable $asset->loadByName('com_supportgroups'); return $asset->id; - } - - /** - * Generate a valid alias from title / date. - * Remains public to be able to check for duplicated alias before saving - * - * @return string - */ - public function generateAlias() - { - if (empty($this->alias)) - { - $this->alias = $this->name; - } - - $this->alias = JApplication::stringURLSafe($this->alias); - - if (trim(str_replace('-', '', $this->alias)) == '') - { - $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); - } - - return $this->alias; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->title; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; } } diff --git a/admin/tables/info_type.php b/admin/tables/info_type.php new file mode 100644 index 0000000..850186a --- /dev/null +++ b/admin/tables/info_type.php @@ -0,0 +1,351 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla table library +jimport('joomla.database.table'); + +/** + * Info_types Table class + */ +class SupportgroupsTableInfo_type extends JTable +{ + /** + * Ensure the params and metadata in json encoded in the bind method + * + * @var array + * @since 3.3 + */ + protected $_jsonEncode = array('params', 'metadata'); + + /** + * Constructor + * + * @param object Database connector object + */ + function __construct(&$db) + { + parent::__construct('#__supportgroups_info_type', 'id', $db); + + // Adding History Options + JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_supportgroups.info_type')); + } + + public function bind($array, $ignore = '') + { + + if (isset($array['params']) && is_array($array['params'])) + { + $registry = new JRegistry; + $registry->loadArray($array['params']); + $array['params'] = (string) $registry; + } + + if (isset($array['metadata']) && is_array($array['metadata'])) + { + $registry = new JRegistry; + $registry->loadArray($array['metadata']); + $array['metadata'] = (string) $registry; + } + + // Bind the rules. + if (isset($array['rules']) && is_array($array['rules'])) + { + $rules = new JAccessRules($array['rules']); + $this->setRules($rules); + } + return parent::bind($array, $ignore); + } + + /** + * Overload the store method for the Info_type table. + * + * @param boolean Toggle whether null values should be updated. + * @return boolean True on success, false on failure. + * @since 1.6 + */ + public function store($updateNulls = false) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if ($this->id) + { + // Existing item + $this->modified = $date->toSql(); + $this->modified_by = $user->get('id'); + } + else + { + // New info_type. A info_type created and created_by field can be set by the user, + // so we don't touch either of these if they are set. + if (!(int) $this->created) + { + $this->created = $date->toSql(); + } + if (empty($this->created_by)) + { + $this->created_by = $user->get('id'); + } + } + + if (isset($this->alias)) + { + // Verify that the alias is unique + $table = JTable::getInstance('info_type', 'SupportgroupsTable'); + + if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->setError(JText::_('COM_SUPPORTGROUPS_INFO_TYPE_ERROR_UNIQUE_ALIAS')); + return false; + } + } + + if (isset($this->url)) + { + // Convert IDN urls to punycode + $this->url = JStringPunycode::urlToPunycode($this->url); + } + if (isset($this->website)) + { + // Convert IDN urls to punycode + $this->website = JStringPunycode::urlToPunycode($this->website); + } + + return parent::store($updateNulls); + } + + /** + * Overloaded check method to ensure data integrity. + * + * @return boolean True on success. + */ + public function check() + { + if (isset($this->alias)) + { + // Generate a valid alias + $this->generateAlias(); + + $table = JTable::getInstance('info_type', 'supportgroupsTable'); + + while ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->alias = JString::increment($this->alias, 'dash'); + } + } + + /* + * Clean up keywords -- eliminate extra spaces between phrases + * and cr (\r) and lf (\n) characters from string. + * Only process if not empty. + */ + if (!empty($this->metakey)) + { + // Array of characters to remove. + $bad_characters = array("\n", "\r", "\"", "<", ">"); + + // Remove bad characters. + $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); + + // Create array using commas as delimiter. + $keys = explode(',', $after_clean); + $clean_keys = array(); + + foreach ($keys as $key) + { + // Ignore blank keywords. + if (trim($key)) + { + $clean_keys[] = trim($key); + } + } + + // Put array back together delimited by ", " + $this->metakey = implode(", ", $clean_keys); + } + + // Clean up description -- eliminate quotes and <> brackets + if (!empty($this->metadesc)) + { + // Only process if not empty + $bad_characters = array("\"", "<", ">"); + $this->metadesc = JString::str_ireplace($bad_characters, "", $this->metadesc); + } + + // If we don't have any access rules set at this point just use an empty JAccessRules class + if (!$this->getRules()) + { + $rules = $this->getDefaultAssetValues('com_supportgroups.info_type.'.$this->id); + $this->setRules($rules); + } + + // Set ordering + if ($this->published < 0) + { + // Set ordering to 0 if state is archived or trashed + $this->ordering = 0; + } + + return true; + } + + /** + * Gets the default asset values for a component. + * + * @param $string $component The component asset name to search for + * + * @return JAccessRules The JAccessRules object for the asset + */ + protected function getDefaultAssetValues($component, $try = true) + { + // Need to find the asset id by the name of the component. + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__assets')) + ->where($db->quoteName('name') . ' = ' . $db->quote($component)); + $db->setQuery($query); + $db->execute(); + if ($db->loadRowList()) + { + // asset alread set so use saved rules + $assetId = (int) $db->loadResult(); + return JAccess::getAssetRules($assetId); + } + // try again + elseif ($try) + { + $try = explode('.',$component); + $result = $this->getDefaultAssetValues($try[0], false); + if ($result instanceof JAccessRules) + { + if (isset($try[1])) + { + $_result = (string) $result; + $_result = json_decode($_result); + foreach ($_result as $name => &$rule) + { + $v = explode('.', $name); + if ($try[1] !== $v[0]) + { + // remove since it is not part of this view + unset($_result->$name); + } + else + { + // clear the value since we inherit + $rule = array(); + } + } + // check if there are any view values remaining + if (count( (array) $_result)) + { + $_result = json_encode($_result); + $_result = array($_result); + // Instantiate and return the JAccessRules object for the asset rules. + $rules = new JAccessRules; + $rules->mergeCollection($_result); + + return $rules; + } + } + return $result; + } + } + return JAccess::getAssetRules(0); + } + + /** + * Method to compute the default name of the asset. + * The default name is in the form 'table_name.id' + * where id is the value of the primary key of the table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetName() + { + $k = $this->_tbl_key; + return 'com_supportgroups.info_type.'.(int) $this->$k; + } + + /** + * Method to return the title to use for the asset table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetTitle() + { + if (isset($this->title)) + { + return $this->title; + } + return ''; + } + + /** + * Get the parent asset id for the record + * + * @return int + * @since 2.5 + */ + protected function _getAssetParentId(JTable $table = NULL, $id = NULL) + { + $asset = JTable::getInstance('Asset'); + $asset->loadByName('com_supportgroups'); + + return $asset->id; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; + } + +} diff --git a/admin/tables/payment.php b/admin/tables/payment.php index d816df6..57374ec 100644 --- a/admin/tables/payment.php +++ b/admin/tables/payment.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage payment.php @author Llewellyn van der Merwe @@ -265,7 +265,7 @@ class SupportgroupsTablePayment extends JTable } } // check if there are any view values remaining - if (count($_result)) + if (count( (array) $_result)) { $_result = json_encode($_result); $_result = array($_result); @@ -323,29 +323,16 @@ class SupportgroupsTablePayment extends JTable $asset->loadByName('com_supportgroups'); return $asset->id; - } - - /** - * Generate a valid alias from title / date. - * Remains public to be able to check for duplicated alias before saving - * - * @return string - */ - public function generateAlias() - { - if (empty($this->alias)) - { - $this->alias = $this->name; - } - - $this->alias = JApplication::stringURLSafe($this->alias); - - if (trim(str_replace('-', '', $this->alias)) == '') - { - $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); - } - - return $this->alias; + } + + /** + * This view does not actually have an alias + * + * @return bool + */ + public function generateAlias() + { + return false; } } diff --git a/admin/tables/region.php b/admin/tables/region.php index 9e361b6..3b56514 100644 --- a/admin/tables/region.php +++ b/admin/tables/region.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage region.php @author Llewellyn van der Merwe @@ -265,7 +265,7 @@ class SupportgroupsTableRegion extends JTable } } // check if there are any view values remaining - if (count($_result)) + if (count( (array) $_result)) { $_result = json_encode($_result); $_result = array($_result); @@ -323,29 +323,29 @@ class SupportgroupsTableRegion extends JTable $asset->loadByName('com_supportgroups'); return $asset->id; - } - - /** - * Generate a valid alias from title / date. - * Remains public to be able to check for duplicated alias before saving - * - * @return string - */ - public function generateAlias() - { - if (empty($this->alias)) - { - $this->alias = $this->name; - } - - $this->alias = JApplication::stringURLSafe($this->alias); - - if (trim(str_replace('-', '', $this->alias)) == '') - { - $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); - } - - return $this->alias; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; } } diff --git a/admin/tables/support_group.php b/admin/tables/support_group.php index 29aaf85..06496f7 100644 --- a/admin/tables/support_group.php +++ b/admin/tables/support_group.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage support_group.php @author Llewellyn van der Merwe @@ -265,7 +265,7 @@ class SupportgroupsTableSupport_group extends JTable } } // check if there are any view values remaining - if (count($_result)) + if (count( (array) $_result)) { $_result = json_encode($_result); $_result = array($_result); @@ -323,29 +323,29 @@ class SupportgroupsTableSupport_group extends JTable $asset->loadByName('com_supportgroups'); return $asset->id; - } - - /** - * Generate a valid alias from title / date. - * Remains public to be able to check for duplicated alias before saving - * - * @return string - */ - public function generateAlias() - { - if (empty($this->alias)) - { - $this->alias = $this->name; - } - - $this->alias = JApplication::stringURLSafe($this->alias); - - if (trim(str_replace('-', '', $this->alias)) == '') - { - $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); - } - - return $this->alias; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format('Y-m-d-H-i-s'); + } + + return $this->alias; } } diff --git a/admin/views/additional_info/submitbutton.js b/admin/views/additional_info/submitbutton.js new file mode 100644 index 0000000..17f2160 --- /dev/null +++ b/admin/views/additional_info/submitbutton.js @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 16 of this MVC + @build 25th October, 2017 + @created 9th March, 2016 + @package Support Groups + @subpackage submitbutton.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +Joomla.submitbutton = function(task) +{ + if (task == ''){ + return false; + } else { + var isValid=true; + var action = task.split('.'); + if (action[1] != 'cancel' && action[1] != 'close'){ + var forms = $$('form.form-validate'); + for (var i=0;i + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.formvalidation'); +JHtml::_('formbehavior.chosen', 'select'); +JHtml::_('behavior.keepalive'); +$componentParams = JComponentHelper::getParams('com_supportgroups'); +?> +
+
+ + +
+ + 'settings')); ?> + + +
+
+ +
+
+
+
+ +
+
+ + + canDo->get('support_group.access')) : ?> + +
+
+
+
+ +
+
+ + + + canDo->get('additional_info.delete') || $this->canDo->get('additional_info.edit.created_by') || $this->canDo->get('additional_info.edit.state') || $this->canDo->get('additional_info.edit.created')) : ?> + +
+
+ +
+
+ +
+
+ + + + canDo->get('core.admin')) : ?> + +
+
+
+
+ form->getFieldset('accesscontrol') as $field): ?> +
+ label; echo $field->input;?> +
+
+ +
+
+
+
+ + + + + +
+ + +
+
+
+ + diff --git a/admin/views/locations/tmpl/index.html b/admin/views/additional_info/tmpl/index.html similarity index 100% rename from admin/views/locations/tmpl/index.html rename to admin/views/additional_info/tmpl/index.html diff --git a/admin/views/additional_info/view.html.php b/admin/views/additional_info/view.html.php new file mode 100644 index 0000000..5620b09 --- /dev/null +++ b/admin/views/additional_info/view.html.php @@ -0,0 +1,215 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Additional_info View class + */ +class SupportgroupsViewAdditional_info extends JViewLegacy +{ + /** + * display method of View + * @return void + */ + public function display($tpl = null) + { + // Assign the variables + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('additional_info',$this->item); + // get input + $jinput = JFactory::getApplication()->input; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; + if ($this->refid) + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } + + // Get Linked view data + $this->vvwsupport_groups = $this->get('Vvwsupport_groups'); + + // Set the toolbar + $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JFactory::getApplication()->input->set('hidemainmenu', true); + $user = JFactory::getUser(); + $userId = $user->id; + $isNew = $this->item->id == 0; + + JToolbarHelper::title( JText::_($isNew ? 'COM_SUPPORTGROUPS_ADDITIONAL_INFO_NEW' : 'COM_SUPPORTGROUPS_ADDITIONAL_INFO_EDIT'), 'pencil-2 article-add'); + // Built the actions for new and existing records. + if ($this->refid || $this->ref) + { + if ($this->canDo->get('additional_info.create') && $isNew) + { + // We can create the record. + JToolBarHelper::save('additional_info.save', 'JTOOLBAR_SAVE'); + } + elseif ($this->canDo->get('additional_info.edit')) + { + // We can save the record. + JToolBarHelper::save('additional_info.save', 'JTOOLBAR_SAVE'); + } + if ($isNew) + { + // Do not creat but cancel. + JToolBarHelper::cancel('additional_info.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + // We can close it. + JToolBarHelper::cancel('additional_info.cancel', 'JTOOLBAR_CLOSE'); + } + } + else + { + if ($isNew) + { + // For new records, check the create permission. + if ($this->canDo->get('additional_info.create')) + { + JToolBarHelper::apply('additional_info.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('additional_info.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::custom('additional_info.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + }; + JToolBarHelper::cancel('additional_info.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + if ($this->canDo->get('additional_info.edit')) + { + // We can save the new record + JToolBarHelper::apply('additional_info.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('additional_info.save', 'JTOOLBAR_SAVE'); + // We can save this record, but check the create permission to see + // if we can return to make a new one. + if ($this->canDo->get('additional_info.create')) + { + JToolBarHelper::custom('additional_info.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + } + } + $canVersion = ($this->canDo->get('core.version') && $this->canDo->get('additional_info.version')); + if ($this->state->params->get('save_history', 1) && $this->canDo->get('additional_info.edit') && $canVersion) + { + JToolbarHelper::versions('com_supportgroups.additional_info', $this->item->id); + } + if ($this->canDo->get('additional_info.create')) + { + JToolBarHelper::custom('additional_info.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); + } + JToolBarHelper::cancel('additional_info.cancel', 'JTOOLBAR_CLOSE'); + } + } + JToolbarHelper::divider(); + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('additional_info'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 30) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + $isNew = ($this->item->id < 1); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_ADDITIONAL_INFO_NEW' : 'COM_SUPPORTGROUPS_ADDITIONAL_INFO_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/additional_info.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + + // Add the CSS for Footable + $this->document->addStyleSheet('https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css'); + $this->document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable-v3/css/footable.standalone.min.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + // Add the JavaScript for Footable (adding all funtions) + $this->document->addScript(JURI::root() .'media/com_supportgroups/footable-v3/js/footable.min.js', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + + $footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('.footable').footable();});});"; + $this->document->addScriptDeclaration($footable); + + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/additional_info/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + JText::script('view not acceptable. Error'); + } +} diff --git a/media/footable/css/fonts/index.html b/admin/views/additional_information/index.html similarity index 100% rename from media/footable/css/fonts/index.html rename to admin/views/additional_information/index.html diff --git a/admin/views/additional_information/tmpl/default.php b/admin/views/additional_information/tmpl/default.php new file mode 100644 index 0000000..11898c6 --- /dev/null +++ b/admin/views/additional_information/tmpl/default.php @@ -0,0 +1,99 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// load tooltip behavior +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.multiselect'); +JHtml::_('dropdown.init'); +JHtml::_('formbehavior.chosen', 'select'); + +if ($this->saveOrder) +{ + $saveOrderingUrl = 'index.php?option=com_supportgroups&task=additional_information.saveOrderAjax&tmpl=component'; + JHtml::_('sortablelist.sortable', 'additional_infoList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); +} + +?> + +
+sidebar)): ?> +
+ sidebar; ?> +
+
+ +
+ +items)): ?> + loadTemplate('toolbar');?> +
+ +
+ + loadTemplate('toolbar');?> + + loadTemplate('head');?> + loadTemplate('foot');?> + loadTemplate('body');?> +
+ + canCreate && $this->canEdit) : ?> + JText::_('COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION_BATCH_OPTIONS'), + 'footer' => $this->loadTemplate('batch_footer') + ), + $this->loadTemplate('batch_body') + ); ?> + + + + +
+ + + + \ No newline at end of file diff --git a/admin/views/additional_information/tmpl/default_batch_body.php b/admin/views/additional_information/tmpl/default_batch_body.php new file mode 100644 index 0000000..aa98ef1 --- /dev/null +++ b/admin/views/additional_information/tmpl/default_batch_body.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + +

+batchDisplay; ?> \ No newline at end of file diff --git a/admin/views/clinics/tmpl/default_batch_footer.php b/admin/views/additional_information/tmpl/default_batch_footer.php similarity index 88% rename from admin/views/clinics/tmpl/default_batch_footer.php rename to admin/views/additional_information/tmpl/default_batch_footer.php index 3d1745a..eae3d84 100644 --- a/admin/views/clinics/tmpl/default_batch_footer.php +++ b/admin/views/additional_information/tmpl/default_batch_footer.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 16 of this MVC + @build 25th October, 2017 + @created 9th March, 2016 @package Support Groups @subpackage default_batch_footer.php @author Llewellyn van der Merwe @@ -28,10 +28,10 @@ defined('_JEXEC') or die('Restricted access'); ?> - - \ No newline at end of file diff --git a/admin/views/additional_information/tmpl/default_body.php b/admin/views/additional_information/tmpl/default_body.php new file mode 100644 index 0000000..ac12862 --- /dev/null +++ b/admin/views/additional_information/tmpl/default_body.php @@ -0,0 +1,120 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +$edit = "index.php?option=com_supportgroups&view=additional_information&task=additional_info.edit"; + +?> +items as $i => $item): ?> + user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0; + $userChkOut = JFactory::getUser($item->checked_out); + $canDo = SupportgroupsHelper::getActions('additional_info',$item,'additional_information'); + ?> + + + get('additional_info.edit.state')): ?> + saveOrder) + { + $iconClass = ' inactive'; + } + else + { + $iconClass = ' inactive tip-top" hasTooltip" title="' . JHtml::tooltipText('JORDERINGDISABLED'); + } + ?> + + + + saveOrder) : ?> + + + + ⋮ + + + + get('additional_info.edit')): ?> + checked_out) : ?> + + id); ?> + + □ + + + id); ?> + + + □ + + + + get('additional_info.edit')): ?> +
+ escape($item->name); ?> + checked_out): ?> + name, $item->checked_out_time, 'additional_information.', $canCheckin); ?> + +
+ +
escape($item->name); ?>
+ + + + user->authorise('info_type.edit', 'com_supportgroups.info_type.' . (int)$item->info_type)): ?> + + +
escape($item->info_type_name); ?>
+ + + + escape($item->details); ?> + + + get('additional_info.edit.state')) : ?> + checked_out) : ?> + + published, $i, 'additional_information.', true, 'cb'); ?> + + published, $i, 'additional_information.', false, 'cb'); ?> + + + published, $i, 'additional_information.', true, 'cb'); ?> + + + published, $i, 'additional_information.', false, 'cb'); ?> + + + + id; ?> + + + \ No newline at end of file diff --git a/admin/views/additional_information/tmpl/default_foot.php b/admin/views/additional_information/tmpl/default_foot.php new file mode 100644 index 0000000..0265f5c --- /dev/null +++ b/admin/views/additional_information/tmpl/default_foot.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + pagination->getListFooter(); ?> + \ No newline at end of file diff --git a/admin/views/additional_information/tmpl/default_head.php b/admin/views/additional_information/tmpl/default_head.php new file mode 100644 index 0000000..f579fb1 --- /dev/null +++ b/admin/views/additional_information/tmpl/default_head.php @@ -0,0 +1,67 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + canEdit&& $this->canState): ?> + + ', 'ordering', $this->listDirn, $this->listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + + + + + + + ▾ + + + ■ + + + + listDirn, $this->listOrder); ?> + + + listDirn, $this->listOrder); ?> + + + + + canState): ?> + + listDirn, $this->listOrder); ?> + + + + + + + + listDirn, $this->listOrder); ?> + + \ No newline at end of file diff --git a/admin/views/additional_information/tmpl/default_toolbar.php b/admin/views/additional_information/tmpl/default_toolbar.php new file mode 100644 index 0000000..a9849da --- /dev/null +++ b/admin/views/additional_information/tmpl/default_toolbar.php @@ -0,0 +1,59 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> +
+ +
+ + +
+
+ + pagination->getLimitBox(); ?> +
+
+ + +
+
+ + +
+
+
\ No newline at end of file diff --git a/media/footable/css/index.html b/admin/views/additional_information/tmpl/index.html similarity index 100% rename from media/footable/css/index.html rename to admin/views/additional_information/tmpl/index.html diff --git a/admin/views/additional_information/view.html.php b/admin/views/additional_information/view.html.php new file mode 100644 index 0000000..73e3101 --- /dev/null +++ b/admin/views/additional_information/view.html.php @@ -0,0 +1,275 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Supportgroups View class for the Additional_information + */ +class SupportgroupsViewAdditional_information extends JViewLegacy +{ + /** + * Additional_information view display method + * @return void + */ + function display($tpl = null) + { + if ($this->getLayout() !== 'modal') + { + // Include helper submenu + SupportgroupsHelper::addSubmenu('additional_information'); + } + + // Assign data to the view + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('additional_info'); + $this->canEdit = $this->canDo->get('additional_info.edit'); + $this->canState = $this->canDo->get('additional_info.edit.state'); + $this->canCreate = $this->canDo->get('additional_info.create'); + $this->canDelete = $this->canDo->get('additional_info.delete'); + $this->canBatch = $this->canDo->get('core.batch'); + + // We don't need toolbar in the modal window. + if ($this->getLayout() !== 'modal') + { + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION'), 'book'); + JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=additional_information'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + + if ($this->canCreate) + { + JToolBarHelper::addNew('additional_info.add'); + } + + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) + { + if ($this->canEdit) + { + JToolBarHelper::editList('additional_info.edit'); + } + + if ($this->canState) + { + JToolBarHelper::publishList('additional_information.publish'); + JToolBarHelper::unpublishList('additional_information.unpublish'); + JToolBarHelper::archiveList('additional_information.archive'); + + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('additional_information.checkin'); + } + } + + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'additional_information.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('additional_information.trash'); + } + + if ($this->canDo->get('core.export') && $this->canDo->get('additional_info.export')) + { + JToolBarHelper::custom('additional_information.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); + } + } + + if ($this->canDo->get('core.import') && $this->canDo->get('additional_info.import')) + { + JToolBarHelper::custom('additional_information.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); + } + + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('additional_information'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } + + if ($this->canState) + { + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_published', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) + ); + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } + } + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_ACCESS'), + 'filter_access', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + ); + } + + // Set Info Type Name Selection + $this->info_typeNameOptions = JFormHelper::loadFieldType('Infotype')->getOptions(); + if ($this->info_typeNameOptions) + { + // Info Type Name Filter + JHtmlSidebar::addFilter( + '- Select '.JText::_('COM_SUPPORTGROUPS_ADDITIONAL_INFO_INFO_TYPE_LABEL').' -', + 'filter_info_type', + JHtml::_('select.options', $this->info_typeNameOptions, 'value', 'text', $this->state->get('filter.info_type')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + // Info Type Name Batch Selection + JHtmlBatch_::addListSelection( + '- Keep Original '.JText::_('COM_SUPPORTGROUPS_ADDITIONAL_INFO_INFO_TYPE_LABEL').' -', + 'batch[info_type]', + JHtml::_('select.options', $this->info_typeNameOptions, 'value', 'text') + ); + } + } + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_ADDITIONAL_INFORMATION')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/additional_information.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 50) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Returns an array of fields the table can be sorted by + * + * @return array Array containing the field name to sort by as the key and display text as value + */ + protected function getSortFields() + { + return array( + 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), + 'a.published' => JText::_('JSTATUS'), + 'a.name' => JText::_('COM_SUPPORTGROUPS_ADDITIONAL_INFO_NAME_LABEL'), + 'g.name' => JText::_('COM_SUPPORTGROUPS_ADDITIONAL_INFO_INFO_TYPE_LABEL'), + 'a.id' => JText::_('JGRID_HEADING_ID') + ); + } +} diff --git a/admin/views/clinic/submitbutton.js b/admin/views/area/submitbutton.js similarity index 89% rename from admin/views/clinic/submitbutton.js rename to admin/views/area/submitbutton.js index 9bcccff..13050f8 100644 --- a/admin/views/clinic/submitbutton.js +++ b/admin/views/area/submitbutton.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage submitbutton.js @author Llewellyn van der Merwe @@ -42,7 +42,7 @@ Joomla.submitbutton = function(task) Joomla.submitform(task); return true; } else { - alert(Joomla.JText._('clinic, some values are not acceptable.','Some values are unacceptable')); + alert(Joomla.JText._('area, some values are not acceptable.','Some values are unacceptable')); return false; } } diff --git a/admin/views/location/tmpl/edit.php b/admin/views/area/tmpl/edit.php similarity index 71% rename from admin/views/location/tmpl/edit.php rename to admin/views/area/tmpl/edit.php index e4671ee..4fc9ee7 100644 --- a/admin/views/location/tmpl/edit.php +++ b/admin/views/area/tmpl/edit.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage edit.php @author Llewellyn van der Merwe @@ -33,50 +33,57 @@ JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.keepalive'); $componentParams = JComponentHelper::getParams('com_supportgroups'); ?> - +
-
+ +
- 'settings')); ?> + 'settings')); ?> - +
+
+ +
+
+ +
- +
canDo->get('support_group.access')) : ?> - +
- +
- canDo->get('location.delete') || $this->canDo->get('location.edit.created_by') || $this->canDo->get('location.edit.state') || $this->canDo->get('location.edit.created')) : ?> - + canDo->get('area.delete') || $this->canDo->get('area.edit.created_by') || $this->canDo->get('area.edit.state') || $this->canDo->get('area.edit.created')) : ?> +
- +
- +
canDo->get('core.admin')) : ?> - +
@@ -97,11 +104,13 @@ $componentParams = JComponentHelper::getParams('com_supportgroups');
- +
+
- + +
+
+sidebar)): ?> +
+ sidebar; ?> +
+
+ +
+ +items)): ?> + loadTemplate('toolbar');?> +
+ +
+ + loadTemplate('toolbar');?> + + loadTemplate('head');?> + loadTemplate('foot');?> + loadTemplate('body');?> +
+ + canCreate && $this->canEdit) : ?> + JText::_('COM_SUPPORTGROUPS_AREA_TYPES_BATCH_OPTIONS'), + 'footer' => $this->loadTemplate('batch_footer') + ), + $this->loadTemplate('batch_body') + ); ?> + + + + +
+ + + + \ No newline at end of file diff --git a/admin/views/locations/tmpl/default_batch_body.php b/admin/views/area_types/tmpl/default_batch_body.php similarity index 88% rename from admin/views/locations/tmpl/default_batch_body.php rename to admin/views/area_types/tmpl/default_batch_body.php index 89f1671..e146f74 100644 --- a/admin/views/locations/tmpl/default_batch_body.php +++ b/admin/views/area_types/tmpl/default_batch_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups @subpackage default_batch_body.php @author Llewellyn van der Merwe @@ -28,5 +28,5 @@ defined('_JEXEC') or die('Restricted access'); ?> -

+

batchDisplay; ?> \ No newline at end of file diff --git a/admin/views/locations/tmpl/default_batch_footer.php b/admin/views/area_types/tmpl/default_batch_footer.php similarity index 88% rename from admin/views/locations/tmpl/default_batch_footer.php rename to admin/views/area_types/tmpl/default_batch_footer.php index ba5bf68..b79bdea 100644 --- a/admin/views/locations/tmpl/default_batch_footer.php +++ b/admin/views/area_types/tmpl/default_batch_footer.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups @subpackage default_batch_footer.php @author Llewellyn van der Merwe @@ -28,10 +28,10 @@ defined('_JEXEC') or die('Restricted access'); ?> - - \ No newline at end of file diff --git a/admin/views/clinics/tmpl/default_body.php b/admin/views/area_types/tmpl/default_body.php similarity index 84% rename from admin/views/clinics/tmpl/default_body.php rename to admin/views/area_types/tmpl/default_body.php index ee31a00..4e1af41 100644 --- a/admin/views/clinics/tmpl/default_body.php +++ b/admin/views/area_types/tmpl/default_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups @subpackage default_body.php @author Llewellyn van der Merwe @@ -26,18 +26,18 @@ // No direct access to this file defined('_JEXEC') or die('Restricted access'); -$edit = "index.php?option=com_supportgroups&view=clinics&task=clinic.edit"; +$edit = "index.php?option=com_supportgroups&view=area_types&task=area_type.edit"; ?> items as $i => $item): ?> user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0; $userChkOut = JFactory::getUser($item->checked_out); - $canDo = SupportgroupsHelper::getActions('clinic',$item,'clinics'); + $canDo = SupportgroupsHelper::getActions('area_type',$item,'area_types'); ?> - get('clinic.edit.state')): ?> + get('area_type.edit.state')): ?> saveOrder) { @@ -60,7 +60,7 @@ $edit = "index.php?option=com_supportgroups&view=clinics&task=clinic.edit"; - get('clinic.edit')): ?> + get('area_type.edit')): ?> checked_out) : ?> id); ?> @@ -75,33 +75,30 @@ $edit = "index.php?option=com_supportgroups&view=clinics&task=clinic.edit"; - get('clinic.edit')): ?> + get('area_type.edit')): ?>
escape($item->name); ?> checked_out): ?> - name, $item->checked_out_time, 'clinics.', $canCheckin); ?> + name, $item->checked_out_time, 'area_types.', $canCheckin); ?>
escape($item->name); ?>
- - escape($item->phone); ?> - - get('clinic.edit.state')) : ?> + get('area_type.edit.state')) : ?> checked_out) : ?> - published, $i, 'clinics.', true, 'cb'); ?> + published, $i, 'area_types.', true, 'cb'); ?> - published, $i, 'clinics.', false, 'cb'); ?> + published, $i, 'area_types.', false, 'cb'); ?> - published, $i, 'clinics.', true, 'cb'); ?> + published, $i, 'area_types.', true, 'cb'); ?> - published, $i, 'clinics.', false, 'cb'); ?> + published, $i, 'area_types.', false, 'cb'); ?> diff --git a/admin/views/area_types/tmpl/default_foot.php b/admin/views/area_types/tmpl/default_foot.php new file mode 100644 index 0000000..c9d04a3 --- /dev/null +++ b/admin/views/area_types/tmpl/default_foot.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + pagination->getListFooter(); ?> + \ No newline at end of file diff --git a/admin/views/clinics/tmpl/default_head.php b/admin/views/area_types/tmpl/default_head.php similarity index 78% rename from admin/views/clinics/tmpl/default_head.php rename to admin/views/area_types/tmpl/default_head.php index bc41afe..06f3cee 100644 --- a/admin/views/clinics/tmpl/default_head.php +++ b/admin/views/area_types/tmpl/default_head.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups @subpackage default_head.php @author Llewellyn van der Merwe @@ -44,21 +44,18 @@ defined('_JEXEC') or die('Restricted access'); - listDirn, $this->listOrder); ?> - - - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> canState): ?> - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> - + - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> \ No newline at end of file diff --git a/admin/views/clinics/tmpl/default_toolbar.php b/admin/views/area_types/tmpl/default_toolbar.php similarity index 95% rename from admin/views/clinics/tmpl/default_toolbar.php rename to admin/views/area_types/tmpl/default_toolbar.php index 847c958..b908468 100644 --- a/admin/views/clinics/tmpl/default_toolbar.php +++ b/admin/views/area_types/tmpl/default_toolbar.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @first version of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 @package Support Groups @subpackage default_toolbar.php @author Llewellyn van der Merwe @@ -30,7 +30,7 @@ defined('_JEXEC') or die('Restricted access');
diff --git a/media/footable/js/index.html b/admin/views/area_types/tmpl/index.html similarity index 100% rename from media/footable/js/index.html rename to admin/views/area_types/tmpl/index.html diff --git a/admin/views/area_types/view.html.php b/admin/views/area_types/view.html.php new file mode 100644 index 0000000..00c5f6f --- /dev/null +++ b/admin/views/area_types/view.html.php @@ -0,0 +1,252 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Supportgroups View class for the Area_types + */ +class SupportgroupsViewArea_types extends JViewLegacy +{ + /** + * Area_types view display method + * @return void + */ + function display($tpl = null) + { + if ($this->getLayout() !== 'modal') + { + // Include helper submenu + SupportgroupsHelper::addSubmenu('area_types'); + } + + // Assign data to the view + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('area_type'); + $this->canEdit = $this->canDo->get('area_type.edit'); + $this->canState = $this->canDo->get('area_type.edit.state'); + $this->canCreate = $this->canDo->get('area_type.create'); + $this->canDelete = $this->canDo->get('area_type.delete'); + $this->canBatch = $this->canDo->get('core.batch'); + + // We don't need toolbar in the modal window. + if ($this->getLayout() !== 'modal') + { + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_AREA_TYPES'), 'home'); + JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=area_types'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + + if ($this->canCreate) + { + JToolBarHelper::addNew('area_type.add'); + } + + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) + { + if ($this->canEdit) + { + JToolBarHelper::editList('area_type.edit'); + } + + if ($this->canState) + { + JToolBarHelper::publishList('area_types.publish'); + JToolBarHelper::unpublishList('area_types.unpublish'); + JToolBarHelper::archiveList('area_types.archive'); + + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('area_types.checkin'); + } + } + + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'area_types.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('area_types.trash'); + } + + if ($this->canDo->get('core.export') && $this->canDo->get('area_type.export')) + { + JToolBarHelper::custom('area_types.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); + } + } + + if ($this->canDo->get('core.import') && $this->canDo->get('area_type.import')) + { + JToolBarHelper::custom('area_types.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); + } + + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('area_types'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } + + if ($this->canState) + { + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_published', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) + ); + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } + } + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_ACCESS'), + 'filter_access', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + ); + } + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_AREA_TYPES')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/area_types.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 50) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Returns an array of fields the table can be sorted by + * + * @return array Array containing the field name to sort by as the key and display text as value + */ + protected function getSortFields() + { + return array( + 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), + 'a.published' => JText::_('JSTATUS'), + 'a.name' => JText::_('COM_SUPPORTGROUPS_AREA_TYPE_NAME_LABEL'), + 'a.id' => JText::_('JGRID_HEADING_ID') + ); + } +} diff --git a/media/uikit/css/components/index.html b/admin/views/areas/index.html similarity index 100% rename from media/uikit/css/components/index.html rename to admin/views/areas/index.html diff --git a/admin/views/clinics/tmpl/default.php b/admin/views/areas/tmpl/default.php similarity index 86% rename from admin/views/clinics/tmpl/default.php rename to admin/views/areas/tmpl/default.php index b87186f..c54ae0b 100644 --- a/admin/views/clinics/tmpl/default.php +++ b/admin/views/areas/tmpl/default.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default.php @author Llewellyn van der Merwe @@ -34,8 +34,8 @@ JHtml::_('formbehavior.chosen', 'select'); if ($this->saveOrder) { - $saveOrderingUrl = 'index.php?option=com_supportgroups&task=clinics.saveOrderAjax&tmpl=component'; - JHtml::_('sortablelist.sortable', 'clinicList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); + $saveOrderingUrl = 'index.php?option=com_supportgroups&task=areas.saveOrderAjax&tmpl=component'; + JHtml::_('sortablelist.sortable', 'areaList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); } ?> @@ -56,7 +56,7 @@ if ($this->saveOrder) Joomla.tableOrdering(order, dirn, ''); } -
+ sidebar)): ?>
sidebar; ?> @@ -72,7 +72,7 @@ if ($this->saveOrder)
loadTemplate('toolbar');?> - +
loadTemplate('head');?>loadTemplate('foot');?>loadTemplate('body');?> @@ -83,7 +83,7 @@ if ($this->saveOrder) 'bootstrap.renderModal', 'collapseModal', array( - 'title' => JText::_('COM_SUPPORTGROUPS_CLINICS_BATCH_OPTIONS'), + 'title' => JText::_('COM_SUPPORTGROUPS_AREAS_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer') ), $this->loadTemplate('batch_body') diff --git a/admin/views/clinics/tmpl/default_batch_body.php b/admin/views/areas/tmpl/default_batch_body.php similarity index 88% rename from admin/views/clinics/tmpl/default_batch_body.php rename to admin/views/areas/tmpl/default_batch_body.php index 0bfc18d..092623a 100644 --- a/admin/views/clinics/tmpl/default_batch_body.php +++ b/admin/views/areas/tmpl/default_batch_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default_batch_body.php @author Llewellyn van der Merwe @@ -28,5 +28,5 @@ defined('_JEXEC') or die('Restricted access'); ?> -

+

batchDisplay; ?> \ No newline at end of file diff --git a/admin/views/areas/tmpl/default_batch_footer.php b/admin/views/areas/tmpl/default_batch_footer.php new file mode 100644 index 0000000..c5be103 --- /dev/null +++ b/admin/views/areas/tmpl/default_batch_footer.php @@ -0,0 +1,37 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + + + \ No newline at end of file diff --git a/admin/views/areas/tmpl/default_body.php b/admin/views/areas/tmpl/default_body.php new file mode 100644 index 0000000..a197873 --- /dev/null +++ b/admin/views/areas/tmpl/default_body.php @@ -0,0 +1,132 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +$edit = "index.php?option=com_supportgroups&view=areas&task=area.edit"; + +?> +items as $i => $item): ?> + user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0; + $userChkOut = JFactory::getUser($item->checked_out); + $canDo = SupportgroupsHelper::getActions('area',$item,'areas'); + ?> +
+ + + + + + + + + + + \ No newline at end of file diff --git a/admin/views/areas/tmpl/default_foot.php b/admin/views/areas/tmpl/default_foot.php new file mode 100644 index 0000000..7cb0053 --- /dev/null +++ b/admin/views/areas/tmpl/default_foot.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + + \ No newline at end of file diff --git a/admin/views/areas/tmpl/default_head.php b/admin/views/areas/tmpl/default_head.php new file mode 100644 index 0000000..b76b112 --- /dev/null +++ b/admin/views/areas/tmpl/default_head.php @@ -0,0 +1,73 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + canEdit&& $this->canState): ?> + + + + + + + + + + + + canState): ?> + + + + + + \ No newline at end of file diff --git a/admin/views/locations/tmpl/default_toolbar.php b/admin/views/areas/tmpl/default_toolbar.php similarity index 95% rename from admin/views/locations/tmpl/default_toolbar.php rename to admin/views/areas/tmpl/default_toolbar.php index a84d146..7b9a946 100644 --- a/admin/views/locations/tmpl/default_toolbar.php +++ b/admin/views/areas/tmpl/default_toolbar.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 32 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default_toolbar.php @author Llewellyn van der Merwe @@ -30,7 +30,7 @@ defined('_JEXEC') or die('Restricted access');
diff --git a/media/uikit/css/index.html b/admin/views/areas/tmpl/index.html similarity index 100% rename from media/uikit/css/index.html rename to admin/views/areas/tmpl/index.html diff --git a/admin/views/areas/view.html.php b/admin/views/areas/view.html.php new file mode 100644 index 0000000..b888464 --- /dev/null +++ b/admin/views/areas/view.html.php @@ -0,0 +1,298 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Supportgroups View class for the Areas + */ +class SupportgroupsViewAreas extends JViewLegacy +{ + /** + * Areas view display method + * @return void + */ + function display($tpl = null) + { + if ($this->getLayout() !== 'modal') + { + // Include helper submenu + SupportgroupsHelper::addSubmenu('areas'); + } + + // Assign data to the view + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('area'); + $this->canEdit = $this->canDo->get('area.edit'); + $this->canState = $this->canDo->get('area.edit.state'); + $this->canCreate = $this->canDo->get('area.create'); + $this->canDelete = $this->canDo->get('area.delete'); + $this->canBatch = $this->canDo->get('core.batch'); + + // We don't need toolbar in the modal window. + if ($this->getLayout() !== 'modal') + { + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_AREAS'), 'home'); + JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=areas'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + + if ($this->canCreate) + { + JToolBarHelper::addNew('area.add'); + } + + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) + { + if ($this->canEdit) + { + JToolBarHelper::editList('area.edit'); + } + + if ($this->canState) + { + JToolBarHelper::publishList('areas.publish'); + JToolBarHelper::unpublishList('areas.unpublish'); + JToolBarHelper::archiveList('areas.archive'); + + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('areas.checkin'); + } + } + + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'areas.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('areas.trash'); + } + + if ($this->canDo->get('core.export') && $this->canDo->get('area.export')) + { + JToolBarHelper::custom('areas.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); + } + } + + if ($this->canDo->get('core.import') && $this->canDo->get('area.import')) + { + JToolBarHelper::custom('areas.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); + } + + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('areas'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } + + if ($this->canState) + { + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_published', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) + ); + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } + } + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_ACCESS'), + 'filter_access', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + ); + } + + // Set Area Type Name Selection + $this->area_typeNameOptions = JFormHelper::loadFieldType('Areastype')->getOptions(); + if ($this->area_typeNameOptions) + { + // Area Type Name Filter + JHtmlSidebar::addFilter( + '- Select '.JText::_('COM_SUPPORTGROUPS_AREA_AREA_TYPE_LABEL').' -', + 'filter_area_type', + JHtml::_('select.options', $this->area_typeNameOptions, 'value', 'text', $this->state->get('filter.area_type')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + // Area Type Name Batch Selection + JHtmlBatch_::addListSelection( + '- Keep Original '.JText::_('COM_SUPPORTGROUPS_AREA_AREA_TYPE_LABEL').' -', + 'batch[area_type]', + JHtml::_('select.options', $this->area_typeNameOptions, 'value', 'text') + ); + } + } + + // Set Region Name Selection + $this->regionNameOptions = JFormHelper::loadFieldType('Regions')->getOptions(); + if ($this->regionNameOptions) + { + // Region Name Filter + JHtmlSidebar::addFilter( + '- Select '.JText::_('COM_SUPPORTGROUPS_AREA_REGION_LABEL').' -', + 'filter_region', + JHtml::_('select.options', $this->regionNameOptions, 'value', 'text', $this->state->get('filter.region')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + // Region Name Batch Selection + JHtmlBatch_::addListSelection( + '- Keep Original '.JText::_('COM_SUPPORTGROUPS_AREA_REGION_LABEL').' -', + 'batch[region]', + JHtml::_('select.options', $this->regionNameOptions, 'value', 'text') + ); + } + } + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_AREAS')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/areas.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 50) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Returns an array of fields the table can be sorted by + * + * @return array Array containing the field name to sort by as the key and display text as value + */ + protected function getSortFields() + { + return array( + 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), + 'a.published' => JText::_('JSTATUS'), + 'a.name' => JText::_('COM_SUPPORTGROUPS_AREA_NAME_LABEL'), + 'g.name' => JText::_('COM_SUPPORTGROUPS_AREA_AREA_TYPE_LABEL'), + 'h.name' => JText::_('COM_SUPPORTGROUPS_AREA_REGION_LABEL'), + 'a.id' => JText::_('JGRID_HEADING_ID') + ); + } +} diff --git a/admin/views/clinics/view.html.php b/admin/views/clinics/view.html.php deleted file mode 100644 index 6602a8b..0000000 --- a/admin/views/clinics/view.html.php +++ /dev/null @@ -1,251 +0,0 @@ - - @copyright Copyright (C) 2015. All Rights Reserved - @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html - - Support Groups - -/-----------------------------------------------------------------------------------------------------------------------------*/ - -// No direct access to this file -defined('_JEXEC') or die('Restricted access'); - -// import Joomla view library -jimport('joomla.application.component.view'); - -/** - * Supportgroups View class for the Clinics - */ -class SupportgroupsViewClinics extends JViewLegacy -{ - /** - * Clinics view display method - * @return void - */ - function display($tpl = null) - { - if ($this->getLayout() !== 'modal') - { - // Include helper submenu - SupportgroupsHelper::addSubmenu('clinics'); - } - - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - - // Assign data to the view - $this->items = $this->get('Items'); - $this->pagination = $this->get('Pagination'); - $this->state = $this->get('State'); - $this->user = JFactory::getUser(); - $this->listOrder = $this->escape($this->state->get('list.ordering')); - $this->listDirn = $this->escape($this->state->get('list.direction')); - $this->saveOrder = $this->listOrder == 'ordering'; - // get global action permissions - $this->canDo = SupportgroupsHelper::getActions('clinic'); - $this->canEdit = $this->canDo->get('clinic.edit'); - $this->canState = $this->canDo->get('clinic.edit.state'); - $this->canCreate = $this->canDo->get('clinic.create'); - $this->canDelete = $this->canDo->get('clinic.delete'); - $this->canBatch = $this->canDo->get('core.batch'); - - // We don't need toolbar in the modal window. - if ($this->getLayout() !== 'modal') - { - $this->addToolbar(); - $this->sidebar = JHtmlSidebar::render(); - // load the batch html - if ($this->canCreate && $this->canEdit && $this->canState) - { - $this->batchDisplay = JHtmlBatch_::render(); - } - } - - // Display the template - parent::display($tpl); - - // Set the document - $this->setDocument(); - } - - /** - * Setting the toolbar - */ - protected function addToolBar() - { - JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_CLINICS'), 'health'); - JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=clinics'); - JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); - - if ($this->canCreate) - { - JToolBarHelper::addNew('clinic.add'); - } - - // Only load if there are items - if (SupportgroupsHelper::checkArray($this->items)) - { - if ($this->canEdit) - { - JToolBarHelper::editList('clinic.edit'); - } - - if ($this->canState) - { - JToolBarHelper::publishList('clinics.publish'); - JToolBarHelper::unpublishList('clinics.unpublish'); - JToolBarHelper::archiveList('clinics.archive'); - - if ($this->canDo->get('core.admin')) - { - JToolBarHelper::checkin('clinics.checkin'); - } - } - - // Add a batch button - if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) - { - // Get the toolbar object instance - $bar = JToolBar::getInstance('toolbar'); - // set the batch button name - $title = JText::_('JTOOLBAR_BATCH'); - // Instantiate a new JLayoutFile instance and render the batch button - $layout = new JLayoutFile('joomla.toolbar.batch'); - // add the button to the page - $dhtml = $layout->render(array('title' => $title)); - $bar->appendButton('Custom', $dhtml, 'batch'); - } - - if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) - { - JToolbarHelper::deleteList('', 'clinics.delete', 'JTOOLBAR_EMPTY_TRASH'); - } - elseif ($this->canState && $this->canDelete) - { - JToolbarHelper::trash('clinics.trash'); - } - - if ($this->canDo->get('core.export') && $this->canDo->get('clinic.export')) - { - JToolBarHelper::custom('clinics.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); - } - } - - if ($this->canDo->get('core.import') && $this->canDo->get('clinic.import')) - { - JToolBarHelper::custom('clinics.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); - } - - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('clinics'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } - - // add the options comp button - if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) - { - JToolBarHelper::preferences('com_supportgroups'); - } - - if ($this->canState) - { - JHtmlSidebar::addFilter( - JText::_('JOPTION_SELECT_PUBLISHED'), - 'filter_published', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) - ); - // only load if batch allowed - if ($this->canBatch) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), - 'batch[published]', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) - ); - } - } - - JHtmlSidebar::addFilter( - JText::_('JOPTION_SELECT_ACCESS'), - 'filter_access', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) - ); - - if ($this->canBatch && $this->canCreate && $this->canEdit) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), - 'batch[access]', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') - ); - } - } - - /** - * Method to set up the document properties - * - * @return void - */ - protected function setDocument() - { - $document = JFactory::getDocument(); - $document->setTitle(JText::_('COM_SUPPORTGROUPS_CLINICS')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/clinics.css"); - } - - /** - * Escapes a value for output in a view script. - * - * @param mixed $var The output to escape. - * - * @return mixed The escaped value. - */ - public function escape($var) - { - if(strlen($var) > 50) - { - // use the helper htmlEscape method instead and shorten the string - return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); - } - // use the helper htmlEscape method instead. - return SupportgroupsHelper::htmlEscape($var, $this->_charset); - } - - /** - * Returns an array of fields the table can be sorted by - * - * @return array Array containing the field name to sort by as the key and display text as value - */ - protected function getSortFields() - { - return array( - 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), - 'a.published' => JText::_('JSTATUS'), - 'a.name' => JText::_('COM_SUPPORTGROUPS_CLINIC_NAME_LABEL'), - 'a.phone' => JText::_('COM_SUPPORTGROUPS_CLINIC_PHONE_LABEL'), - 'a.id' => JText::_('JGRID_HEADING_ID') - ); - } -} diff --git a/admin/views/countries/tmpl/default.php b/admin/views/countries/tmpl/default.php index 419112a..246a58f 100644 --- a/admin/views/countries/tmpl/default.php +++ b/admin/views/countries/tmpl/default.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage default.php @author Llewellyn van der Merwe diff --git a/admin/views/countries/tmpl/default_batch_body.php b/admin/views/countries/tmpl/default_batch_body.php index 4b0dfc8..fbd7be2 100644 --- a/admin/views/countries/tmpl/default_batch_body.php +++ b/admin/views/countries/tmpl/default_batch_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage default_batch_body.php @author Llewellyn van der Merwe diff --git a/admin/views/countries/tmpl/default_batch_footer.php b/admin/views/countries/tmpl/default_batch_footer.php index f7076da..cb2088f 100644 --- a/admin/views/countries/tmpl/default_batch_footer.php +++ b/admin/views/countries/tmpl/default_batch_footer.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage default_batch_footer.php @author Llewellyn van der Merwe @@ -28,7 +28,7 @@ defined('_JEXEC') or die('Restricted access'); ?> - diff --git a/admin/views/countries/tmpl/default_body.php b/admin/views/countries/tmpl/default_body.php index 5dfac3a..798daaf 100644 --- a/admin/views/countries/tmpl/default_body.php +++ b/admin/views/countries/tmpl/default_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage default_body.php @author Llewellyn van der Merwe diff --git a/admin/views/countries/tmpl/default_foot.php b/admin/views/countries/tmpl/default_foot.php index acf8b13..754279b 100644 --- a/admin/views/countries/tmpl/default_foot.php +++ b/admin/views/countries/tmpl/default_foot.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage default_foot.php @author Llewellyn van der Merwe diff --git a/admin/views/countries/tmpl/default_head.php b/admin/views/countries/tmpl/default_head.php index 81aece3..88bd13e 100644 --- a/admin/views/countries/tmpl/default_head.php +++ b/admin/views/countries/tmpl/default_head.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage default_head.php @author Llewellyn van der Merwe diff --git a/admin/views/countries/tmpl/default_toolbar.php b/admin/views/countries/tmpl/default_toolbar.php index 713369b..ccebd79 100644 --- a/admin/views/countries/tmpl/default_toolbar.php +++ b/admin/views/countries/tmpl/default_toolbar.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage default_toolbar.php @author Llewellyn van der Merwe diff --git a/admin/views/countries/view.html.php b/admin/views/countries/view.html.php index 24c11a4..c25a18b 100644 --- a/admin/views/countries/view.html.php +++ b/admin/views/countries/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -46,39 +46,38 @@ class SupportgroupsViewCountries extends JViewLegacy SupportgroupsHelper::addSubmenu('countries'); } - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign data to the view - $this->items = $this->get('Items'); - $this->pagination = $this->get('Pagination'); - $this->state = $this->get('State'); - $this->user = JFactory::getUser(); - $this->listOrder = $this->escape($this->state->get('list.ordering')); - $this->listDirn = $this->escape($this->state->get('list.direction')); - $this->saveOrder = $this->listOrder == 'ordering'; - // get global action permissions - $this->canDo = SupportgroupsHelper::getActions('country'); - $this->canEdit = $this->canDo->get('country.edit'); - $this->canState = $this->canDo->get('country.edit.state'); - $this->canCreate = $this->canDo->get('country.create'); - $this->canDelete = $this->canDo->get('country.delete'); - $this->canBatch = $this->canDo->get('core.batch'); + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('country'); + $this->canEdit = $this->canDo->get('country.edit'); + $this->canState = $this->canDo->get('country.edit.state'); + $this->canCreate = $this->canDo->get('country.create'); + $this->canDelete = $this->canDo->get('country.delete'); + $this->canBatch = $this->canDo->get('core.batch'); // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); - // load the batch html - if ($this->canCreate && $this->canEdit && $this->canState) - { - $this->batchDisplay = JHtmlBatch_::render(); - } + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); } // Display the template @@ -95,96 +94,96 @@ class SupportgroupsViewCountries extends JViewLegacy { JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_COUNTRIES'), 'flag'); JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=countries'); - JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); if ($this->canCreate) - { + { JToolBarHelper::addNew('country.add'); } - // Only load if there are items - if (SupportgroupsHelper::checkArray($this->items)) + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) { - if ($this->canEdit) - { - JToolBarHelper::editList('country.edit'); - } + if ($this->canEdit) + { + JToolBarHelper::editList('country.edit'); + } - if ($this->canState) - { - JToolBarHelper::publishList('countries.publish'); - JToolBarHelper::unpublishList('countries.unpublish'); - JToolBarHelper::archiveList('countries.archive'); + if ($this->canState) + { + JToolBarHelper::publishList('countries.publish'); + JToolBarHelper::unpublishList('countries.unpublish'); + JToolBarHelper::archiveList('countries.archive'); - if ($this->canDo->get('core.admin')) - { - JToolBarHelper::checkin('countries.checkin'); - } - } + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('countries.checkin'); + } + } - // Add a batch button - if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) - { - // Get the toolbar object instance - $bar = JToolBar::getInstance('toolbar'); - // set the batch button name - $title = JText::_('JTOOLBAR_BATCH'); - // Instantiate a new JLayoutFile instance and render the batch button - $layout = new JLayoutFile('joomla.toolbar.batch'); - // add the button to the page - $dhtml = $layout->render(array('title' => $title)); - $bar->appendButton('Custom', $dhtml, 'batch'); - } + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } - if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) - { - JToolbarHelper::deleteList('', 'countries.delete', 'JTOOLBAR_EMPTY_TRASH'); - } - elseif ($this->canState && $this->canDelete) - { - JToolbarHelper::trash('countries.trash'); - } + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'countries.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('countries.trash'); + } if ($this->canDo->get('core.export') && $this->canDo->get('country.export')) { JToolBarHelper::custom('countries.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); } - } + } if ($this->canDo->get('core.import') && $this->canDo->get('country.import')) { JToolBarHelper::custom('countries.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); } - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('countries'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('countries'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } - // add the options comp button - if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) - { - JToolBarHelper::preferences('com_supportgroups'); - } + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } - if ($this->canState) - { + if ($this->canState) + { JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_PUBLISHED'), 'filter_published', JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) ); - // only load if batch allowed - if ($this->canBatch) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), - 'batch[published]', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) - ); - } + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } } JHtmlSidebar::addFilter( @@ -196,11 +195,11 @@ class SupportgroupsViewCountries extends JViewLegacy if ($this->canBatch && $this->canCreate && $this->canEdit) { JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), - 'batch[access]', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') ); - } + } // Set Currency Name Selection $this->currencyNameOptions = JFormHelper::loadFieldType('Currency')->getOptions(); @@ -254,12 +253,15 @@ class SupportgroupsViewCountries extends JViewLegacy */ protected function setDocument() { - $document = JFactory::getDocument(); - $document->setTitle(JText::_('COM_SUPPORTGROUPS_COUNTRIES')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/countries.css"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_COUNTRIES')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/countries.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -270,10 +272,10 @@ class SupportgroupsViewCountries extends JViewLegacy { if(strlen($var) > 50) { - // use the helper htmlEscape method instead and shorten the string + // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -294,7 +296,7 @@ class SupportgroupsViewCountries extends JViewLegacy 'a.codetwo' => JText::_('COM_SUPPORTGROUPS_COUNTRY_CODETWO_LABEL'), 'a.id' => JText::_('JGRID_HEADING_ID') ); - } + } protected function getTheWorldzoneSelections() { @@ -317,13 +319,13 @@ class SupportgroupsViewCountries extends JViewLegacy if ($results) { $results = array_unique($results); - $filter = array(); + $_filter = array(); foreach ($results as $worldzone) { // Now add the worldzone and its text to the options array - $filter[] = JHtml::_('select.option', $worldzone, $worldzone); + $_filter[] = JHtml::_('select.option', $worldzone, $worldzone); } - return $filter; + return $_filter; } return false; } diff --git a/admin/views/country/submitbutton.js b/admin/views/country/submitbutton.js index e052ecb..a4674e4 100644 --- a/admin/views/country/submitbutton.js +++ b/admin/views/country/submitbutton.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage submitbutton.js @author Llewellyn van der Merwe diff --git a/admin/views/country/tmpl/edit.php b/admin/views/country/tmpl/edit.php index 3cf1a2f..6494a77 100644 --- a/admin/views/country/tmpl/edit.php +++ b/admin/views/country/tmpl/edit.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage edit.php @author Llewellyn van der Merwe @@ -33,10 +33,33 @@ JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.keepalive'); $componentParams = JComponentHelper::getParams('com_supportgroups'); ?> - + + +
diff --git a/admin/views/country/view.html.php b/admin/views/country/view.html.php index d3eca6e..a57bcf8 100644 --- a/admin/views/country/view.html.php +++ b/admin/views/country/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 4 of this MVC + @build 25th October, 2017 + @created 5th March, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -40,41 +40,40 @@ class SupportgroupsViewCountry extends JViewLegacy */ public function display($tpl = null) { - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign the variables - $this->form = $this->get('Form'); - $this->item = $this->get('Item'); - $this->script = $this->get('Script'); - $this->state = $this->get('State'); - // get action permissions - $this->canDo = SupportgroupsHelper::getActions('country',$this->item); + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('country',$this->item); // get input $jinput = JFactory::getApplication()->input; - $this->ref = $jinput->get('ref', 0, 'word'); - $this->refid = $jinput->get('refid', 0, 'int'); - $this->referral = ''; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; if ($this->refid) - { - // return to the item that refered to this item - $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; - } - elseif($this->ref) - { - // return to the list view that refered to this item - $this->referral = '&ref='.(string)$this->ref; - } + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } // Get Linked view data - $this->vvyregions = $this->get('Vvyregions'); + $this->vvyregions = $this->get('Vvyregions'); // Set the toolbar $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } // Display the template parent::display($tpl); @@ -167,7 +166,7 @@ class SupportgroupsViewCountry extends JViewLegacy } } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -181,7 +180,7 @@ class SupportgroupsViewCountry extends JViewLegacy // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -193,35 +192,24 @@ class SupportgroupsViewCountry extends JViewLegacy protected function setDocument() { $isNew = ($this->item->id < 1); - $document = JFactory::getDocument(); - $document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_COUNTRY_NEW' : 'COM_SUPPORTGROUPS_COUNTRY_EDIT')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/country.css"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_COUNTRY_NEW' : 'COM_SUPPORTGROUPS_COUNTRY_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/country.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); - // Add the CSS for Footable. - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.core.min.css'); + // Add the CSS for Footable + $this->document->addStyleSheet('https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css'); + $this->document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable-v3/css/footable.standalone.min.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + // Add the JavaScript for Footable (adding all funtions) + $this->document->addScript(JURI::root() .'media/com_supportgroups/footable-v3/js/footable.min.js', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); - // Use the Metro Style - if (!isset($this->fooTableStyle) || 0 == $this->fooTableStyle) - { - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.metro.min.css'); - } - // Use the Legacy Style. - elseif (isset($this->fooTableStyle) && 1 == $this->fooTableStyle) - { - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.standalone.min.css'); - } - - // Add the JavaScript for Footable - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.sort.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.filter.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.paginate.js'); - - $footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('.footable').footable(); }); jQuery('.nav-tabs').on('click', 'li', function() { setTimeout(tableFix, 10); }); }); function tableFix() { jQuery('.footable').trigger('footable_resize'); }"; - $document->addScriptDeclaration($footable); + $footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('.footable').footable();});});"; + $this->document->addScriptDeclaration($footable); - $document->addScript(JURI::root() . $this->script); - $document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/country/submitbutton.js"); + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/country/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); JText::script('view not acceptable. Error'); } } diff --git a/admin/views/currencies/tmpl/default.php b/admin/views/currencies/tmpl/default.php index e73d029..c1d5cb5 100644 --- a/admin/views/currencies/tmpl/default.php +++ b/admin/views/currencies/tmpl/default.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage default.php @author Llewellyn van der Merwe diff --git a/admin/views/currencies/tmpl/default_batch_body.php b/admin/views/currencies/tmpl/default_batch_body.php index 7662510..e08053c 100644 --- a/admin/views/currencies/tmpl/default_batch_body.php +++ b/admin/views/currencies/tmpl/default_batch_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage default_batch_body.php @author Llewellyn van der Merwe diff --git a/admin/views/currencies/tmpl/default_batch_footer.php b/admin/views/currencies/tmpl/default_batch_footer.php index 754a90a..9769c9b 100644 --- a/admin/views/currencies/tmpl/default_batch_footer.php +++ b/admin/views/currencies/tmpl/default_batch_footer.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage default_batch_footer.php @author Llewellyn van der Merwe @@ -28,7 +28,7 @@ defined('_JEXEC') or die('Restricted access'); ?> - diff --git a/admin/views/currencies/tmpl/default_body.php b/admin/views/currencies/tmpl/default_body.php index df15218..b7eef33 100644 --- a/admin/views/currencies/tmpl/default_body.php +++ b/admin/views/currencies/tmpl/default_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage default_body.php @author Llewellyn van der Merwe diff --git a/admin/views/currencies/tmpl/default_foot.php b/admin/views/currencies/tmpl/default_foot.php index acf8b13..9537de1 100644 --- a/admin/views/currencies/tmpl/default_foot.php +++ b/admin/views/currencies/tmpl/default_foot.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage default_foot.php @author Llewellyn van der Merwe diff --git a/admin/views/currencies/tmpl/default_head.php b/admin/views/currencies/tmpl/default_head.php index e5d6cef..fbfc008 100644 --- a/admin/views/currencies/tmpl/default_head.php +++ b/admin/views/currencies/tmpl/default_head.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage default_head.php @author Llewellyn van der Merwe diff --git a/admin/views/currencies/tmpl/default_toolbar.php b/admin/views/currencies/tmpl/default_toolbar.php index c511c81..8b2b20a 100644 --- a/admin/views/currencies/tmpl/default_toolbar.php +++ b/admin/views/currencies/tmpl/default_toolbar.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage default_toolbar.php @author Llewellyn van der Merwe diff --git a/admin/views/currencies/view.html.php b/admin/views/currencies/view.html.php index 9bf94bf..9133627 100644 --- a/admin/views/currencies/view.html.php +++ b/admin/views/currencies/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -46,39 +46,38 @@ class SupportgroupsViewCurrencies extends JViewLegacy SupportgroupsHelper::addSubmenu('currencies'); } - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign data to the view - $this->items = $this->get('Items'); - $this->pagination = $this->get('Pagination'); - $this->state = $this->get('State'); - $this->user = JFactory::getUser(); - $this->listOrder = $this->escape($this->state->get('list.ordering')); - $this->listDirn = $this->escape($this->state->get('list.direction')); - $this->saveOrder = $this->listOrder == 'ordering'; - // get global action permissions - $this->canDo = SupportgroupsHelper::getActions('currency'); - $this->canEdit = $this->canDo->get('currency.edit'); - $this->canState = $this->canDo->get('currency.edit.state'); - $this->canCreate = $this->canDo->get('currency.create'); - $this->canDelete = $this->canDo->get('currency.delete'); - $this->canBatch = $this->canDo->get('core.batch'); + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('currency'); + $this->canEdit = $this->canDo->get('currency.edit'); + $this->canState = $this->canDo->get('currency.edit.state'); + $this->canCreate = $this->canDo->get('currency.create'); + $this->canDelete = $this->canDo->get('currency.delete'); + $this->canBatch = $this->canDo->get('core.batch'); // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); - // load the batch html - if ($this->canCreate && $this->canEdit && $this->canState) - { - $this->batchDisplay = JHtmlBatch_::render(); - } + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); } // Display the template @@ -95,96 +94,96 @@ class SupportgroupsViewCurrencies extends JViewLegacy { JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_CURRENCIES'), 'credit-2'); JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=currencies'); - JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); if ($this->canCreate) - { + { JToolBarHelper::addNew('currency.add'); } - // Only load if there are items - if (SupportgroupsHelper::checkArray($this->items)) + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) { - if ($this->canEdit) - { - JToolBarHelper::editList('currency.edit'); - } + if ($this->canEdit) + { + JToolBarHelper::editList('currency.edit'); + } - if ($this->canState) - { - JToolBarHelper::publishList('currencies.publish'); - JToolBarHelper::unpublishList('currencies.unpublish'); - JToolBarHelper::archiveList('currencies.archive'); + if ($this->canState) + { + JToolBarHelper::publishList('currencies.publish'); + JToolBarHelper::unpublishList('currencies.unpublish'); + JToolBarHelper::archiveList('currencies.archive'); - if ($this->canDo->get('core.admin')) - { - JToolBarHelper::checkin('currencies.checkin'); - } - } + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('currencies.checkin'); + } + } - // Add a batch button - if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) - { - // Get the toolbar object instance - $bar = JToolBar::getInstance('toolbar'); - // set the batch button name - $title = JText::_('JTOOLBAR_BATCH'); - // Instantiate a new JLayoutFile instance and render the batch button - $layout = new JLayoutFile('joomla.toolbar.batch'); - // add the button to the page - $dhtml = $layout->render(array('title' => $title)); - $bar->appendButton('Custom', $dhtml, 'batch'); - } + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } - if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) - { - JToolbarHelper::deleteList('', 'currencies.delete', 'JTOOLBAR_EMPTY_TRASH'); - } - elseif ($this->canState && $this->canDelete) - { - JToolbarHelper::trash('currencies.trash'); - } + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'currencies.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('currencies.trash'); + } if ($this->canDo->get('core.export') && $this->canDo->get('currency.export')) { JToolBarHelper::custom('currencies.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); } - } + } if ($this->canDo->get('core.import') && $this->canDo->get('currency.import')) { JToolBarHelper::custom('currencies.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); } - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('currencies'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('currencies'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } - // add the options comp button - if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) - { - JToolBarHelper::preferences('com_supportgroups'); - } + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } - if ($this->canState) - { + if ($this->canState) + { JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_PUBLISHED'), 'filter_published', JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) ); - // only load if batch allowed - if ($this->canBatch) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), - 'batch[published]', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) - ); - } + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } } JHtmlSidebar::addFilter( @@ -196,11 +195,11 @@ class SupportgroupsViewCurrencies extends JViewLegacy if ($this->canBatch && $this->canCreate && $this->canEdit) { JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), - 'batch[access]', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') ); - } + } } /** @@ -210,12 +209,15 @@ class SupportgroupsViewCurrencies extends JViewLegacy */ protected function setDocument() { - $document = JFactory::getDocument(); - $document->setTitle(JText::_('COM_SUPPORTGROUPS_CURRENCIES')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/currencies.css"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_CURRENCIES')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/currencies.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -226,10 +228,10 @@ class SupportgroupsViewCurrencies extends JViewLegacy { if(strlen($var) > 50) { - // use the helper htmlEscape method instead and shorten the string + // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -249,5 +251,5 @@ class SupportgroupsViewCurrencies extends JViewLegacy 'a.decimalplace' => JText::_('COM_SUPPORTGROUPS_CURRENCY_DECIMALPLACE_LABEL'), 'a.id' => JText::_('JGRID_HEADING_ID') ); - } + } } diff --git a/admin/views/currency/submitbutton.js b/admin/views/currency/submitbutton.js index 1ad0523..386fcbd 100644 --- a/admin/views/currency/submitbutton.js +++ b/admin/views/currency/submitbutton.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage submitbutton.js @author Llewellyn van der Merwe diff --git a/admin/views/currency/tmpl/edit.php b/admin/views/currency/tmpl/edit.php index 965bd21..79d2f29 100644 --- a/admin/views/currency/tmpl/edit.php +++ b/admin/views/currency/tmpl/edit.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage edit.php @author Llewellyn van der Merwe @@ -33,10 +33,33 @@ JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.keepalive'); $componentParams = JComponentHelper::getParams('com_supportgroups'); ?> - + + +
diff --git a/admin/views/currency/view.html.php b/admin/views/currency/view.html.php index 0a29f73..aef277a 100644 --- a/admin/views/currency/view.html.php +++ b/admin/views/currency/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 19 of this MVC + @build 25th October, 2017 + @created 8th July, 2015 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -40,38 +40,37 @@ class SupportgroupsViewCurrency extends JViewLegacy */ public function display($tpl = null) { - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign the variables - $this->form = $this->get('Form'); - $this->item = $this->get('Item'); - $this->script = $this->get('Script'); - $this->state = $this->get('State'); - // get action permissions - $this->canDo = SupportgroupsHelper::getActions('currency',$this->item); + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('currency',$this->item); // get input $jinput = JFactory::getApplication()->input; - $this->ref = $jinput->get('ref', 0, 'word'); - $this->refid = $jinput->get('refid', 0, 'int'); - $this->referral = ''; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; if ($this->refid) - { - // return to the item that refered to this item - $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; - } - elseif($this->ref) - { - // return to the list view that refered to this item - $this->referral = '&ref='.(string)$this->ref; - } + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } // Set the toolbar $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } // Display the template parent::display($tpl); @@ -164,7 +163,7 @@ class SupportgroupsViewCurrency extends JViewLegacy } } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -178,7 +177,7 @@ class SupportgroupsViewCurrency extends JViewLegacy // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -190,11 +189,14 @@ class SupportgroupsViewCurrency extends JViewLegacy protected function setDocument() { $isNew = ($this->item->id < 1); - $document = JFactory::getDocument(); - $document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_CURRENCY_NEW' : 'COM_SUPPORTGROUPS_CURRENCY_EDIT')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/currency.css"); - $document->addScript(JURI::root() . $this->script); - $document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/currency/submitbutton.js"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_CURRENCY_NEW' : 'COM_SUPPORTGROUPS_CURRENCY_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/currency.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/currency/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); JText::script('view not acceptable. Error'); } } diff --git a/media/uikit/fonts/index.html b/admin/views/facilities/index.html similarity index 100% rename from media/uikit/fonts/index.html rename to admin/views/facilities/index.html diff --git a/admin/views/locations/tmpl/default.php b/admin/views/facilities/tmpl/default.php similarity index 86% rename from admin/views/locations/tmpl/default.php rename to admin/views/facilities/tmpl/default.php index a6d88ad..b9f041f 100644 --- a/admin/views/locations/tmpl/default.php +++ b/admin/views/facilities/tmpl/default.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 @package Support Groups @subpackage default.php @author Llewellyn van der Merwe @@ -34,8 +34,8 @@ JHtml::_('formbehavior.chosen', 'select'); if ($this->saveOrder) { - $saveOrderingUrl = 'index.php?option=com_supportgroups&task=locations.saveOrderAjax&tmpl=component'; - JHtml::_('sortablelist.sortable', 'locationList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); + $saveOrderingUrl = 'index.php?option=com_supportgroups&task=facilities.saveOrderAjax&tmpl=component'; + JHtml::_('sortablelist.sortable', 'facilityList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); } ?> @@ -56,7 +56,7 @@ if ($this->saveOrder) Joomla.tableOrdering(order, dirn, ''); } -
+ sidebar)): ?>
sidebar; ?> @@ -72,7 +72,7 @@ if ($this->saveOrder)
loadTemplate('toolbar');?> -
+ get('area.edit.state')): ?> + saveOrder) + { + $iconClass = ' inactive'; + } + else + { + $iconClass = ' inactive tip-top" hasTooltip" title="' . JHtml::tooltipText('JORDERINGDISABLED'); + } + ?> + + + + saveOrder) : ?> + + + + ⋮ + + + get('area.edit')): ?> + checked_out) : ?> + + id); ?> + + □ + + + id); ?> + + + □ + + + get('area.edit')): ?> +
+ escape($item->name); ?> + checked_out): ?> + name, $item->checked_out_time, 'areas.', $canCheckin); ?> + +
+ +
escape($item->name); ?>
+ +
+ user->authorise('area_type.edit', 'com_supportgroups.area_type.' . (int)$item->area_type)): ?> + + +
escape($item->area_type_name); ?>
+ +
+ user->authorise('region.edit', 'com_supportgroups.region.' . (int)$item->region)): ?> + + +
escape($item->region_name); ?>
+ +
+ escape($item->details); ?> + + color; ?> + + get('area.edit.state')) : ?> + checked_out) : ?> + + published, $i, 'areas.', true, 'cb'); ?> + + published, $i, 'areas.', false, 'cb'); ?> + + + published, $i, 'areas.', true, 'cb'); ?> + + + published, $i, 'areas.', false, 'cb'); ?> + + + id; ?> +
pagination->getListFooter(); ?>
+ ', 'ordering', $this->listDirn, $this->listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + + + + ▾ + + ■ + + listDirn, $this->listOrder); ?> + + listDirn, $this->listOrder); ?> + + listDirn, $this->listOrder); ?> + + + + + + listDirn, $this->listOrder); ?> + + + + listDirn, $this->listOrder); ?> +
+
loadTemplate('head');?>loadTemplate('foot');?>loadTemplate('body');?> @@ -83,7 +83,7 @@ if ($this->saveOrder) 'bootstrap.renderModal', 'collapseModal', array( - 'title' => JText::_('COM_SUPPORTGROUPS_LOCATIONS_BATCH_OPTIONS'), + 'title' => JText::_('COM_SUPPORTGROUPS_FACILITIES_BATCH_OPTIONS'), 'footer' => $this->loadTemplate('batch_footer') ), $this->loadTemplate('batch_body') diff --git a/admin/views/facilities/tmpl/default_batch_body.php b/admin/views/facilities/tmpl/default_batch_body.php new file mode 100644 index 0000000..43295e1 --- /dev/null +++ b/admin/views/facilities/tmpl/default_batch_body.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + +

+batchDisplay; ?> \ No newline at end of file diff --git a/admin/views/facilities/tmpl/default_batch_footer.php b/admin/views/facilities/tmpl/default_batch_footer.php new file mode 100644 index 0000000..0febfb0 --- /dev/null +++ b/admin/views/facilities/tmpl/default_batch_footer.php @@ -0,0 +1,37 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + + + \ No newline at end of file diff --git a/admin/views/facilities/tmpl/default_body.php b/admin/views/facilities/tmpl/default_body.php new file mode 100644 index 0000000..d1304ca --- /dev/null +++ b/admin/views/facilities/tmpl/default_body.php @@ -0,0 +1,123 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +$edit = "index.php?option=com_supportgroups&view=facilities&task=facility.edit"; + +?> +items as $i => $item): ?> + user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0; + $userChkOut = JFactory::getUser($item->checked_out); + $canDo = SupportgroupsHelper::getActions('facility',$item,'facilities'); + ?> + + + + + + + + + + + \ No newline at end of file diff --git a/admin/views/facilities/tmpl/default_foot.php b/admin/views/facilities/tmpl/default_foot.php new file mode 100644 index 0000000..e37624b --- /dev/null +++ b/admin/views/facilities/tmpl/default_foot.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + + \ No newline at end of file diff --git a/admin/views/facilities/tmpl/default_head.php b/admin/views/facilities/tmpl/default_head.php new file mode 100644 index 0000000..c0d855d --- /dev/null +++ b/admin/views/facilities/tmpl/default_head.php @@ -0,0 +1,70 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + canEdit&& $this->canState): ?> + + + + + + + + + + + canState): ?> + + + + + + \ No newline at end of file diff --git a/admin/views/facilities/tmpl/default_toolbar.php b/admin/views/facilities/tmpl/default_toolbar.php new file mode 100644 index 0000000..3ca951b --- /dev/null +++ b/admin/views/facilities/tmpl/default_toolbar.php @@ -0,0 +1,59 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> +
+ +
+ + +
+
+ + pagination->getLimitBox(); ?> +
+
+ + +
+
+ + +
+
+
\ No newline at end of file diff --git a/media/uikit/index.html b/admin/views/facilities/tmpl/index.html similarity index 100% rename from media/uikit/index.html rename to admin/views/facilities/tmpl/index.html diff --git a/admin/views/facilities/view.html.php b/admin/views/facilities/view.html.php new file mode 100644 index 0000000..8c6849d --- /dev/null +++ b/admin/views/facilities/view.html.php @@ -0,0 +1,277 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Supportgroups View class for the Facilities + */ +class SupportgroupsViewFacilities extends JViewLegacy +{ + /** + * Facilities view display method + * @return void + */ + function display($tpl = null) + { + if ($this->getLayout() !== 'modal') + { + // Include helper submenu + SupportgroupsHelper::addSubmenu('facilities'); + } + + // Assign data to the view + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('facility'); + $this->canEdit = $this->canDo->get('facility.edit'); + $this->canState = $this->canDo->get('facility.edit.state'); + $this->canCreate = $this->canDo->get('facility.create'); + $this->canDelete = $this->canDo->get('facility.delete'); + $this->canBatch = $this->canDo->get('core.batch'); + + // We don't need toolbar in the modal window. + if ($this->getLayout() !== 'modal') + { + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_FACILITIES'), 'health'); + JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=facilities'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + + if ($this->canCreate) + { + JToolBarHelper::addNew('facility.add'); + } + + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) + { + if ($this->canEdit) + { + JToolBarHelper::editList('facility.edit'); + } + + if ($this->canState) + { + JToolBarHelper::publishList('facilities.publish'); + JToolBarHelper::unpublishList('facilities.unpublish'); + JToolBarHelper::archiveList('facilities.archive'); + + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('facilities.checkin'); + } + } + + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'facilities.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('facilities.trash'); + } + + if ($this->canDo->get('core.export') && $this->canDo->get('facility.export')) + { + JToolBarHelper::custom('facilities.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); + } + } + + if ($this->canDo->get('core.import') && $this->canDo->get('facility.import')) + { + JToolBarHelper::custom('facilities.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); + } + + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('facilities'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } + + if ($this->canState) + { + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_published', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) + ); + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } + } + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_ACCESS'), + 'filter_access', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + ); + } + + // Set Facility Type Name Selection + $this->facility_typeNameOptions = JFormHelper::loadFieldType('Facilitiestype')->getOptions(); + if ($this->facility_typeNameOptions) + { + // Facility Type Name Filter + JHtmlSidebar::addFilter( + '- Select '.JText::_('COM_SUPPORTGROUPS_FACILITY_FACILITY_TYPE_LABEL').' -', + 'filter_facility_type', + JHtml::_('select.options', $this->facility_typeNameOptions, 'value', 'text', $this->state->get('filter.facility_type')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + // Facility Type Name Batch Selection + JHtmlBatch_::addListSelection( + '- Keep Original '.JText::_('COM_SUPPORTGROUPS_FACILITY_FACILITY_TYPE_LABEL').' -', + 'batch[facility_type]', + JHtml::_('select.options', $this->facility_typeNameOptions, 'value', 'text') + ); + } + } + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_FACILITIES')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/facilities.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 50) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Returns an array of fields the table can be sorted by + * + * @return array Array containing the field name to sort by as the key and display text as value + */ + protected function getSortFields() + { + return array( + 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), + 'a.published' => JText::_('JSTATUS'), + 'a.name' => JText::_('COM_SUPPORTGROUPS_FACILITY_NAME_LABEL'), + 'g.name' => JText::_('COM_SUPPORTGROUPS_FACILITY_FACILITY_TYPE_LABEL'), + 'a.phone' => JText::_('COM_SUPPORTGROUPS_FACILITY_PHONE_LABEL'), + 'a.details' => JText::_('COM_SUPPORTGROUPS_FACILITY_DETAILS_LABEL'), + 'a.id' => JText::_('JGRID_HEADING_ID') + ); + } +} diff --git a/admin/views/location/submitbutton.js b/admin/views/facility/submitbutton.js similarity index 91% rename from admin/views/location/submitbutton.js rename to admin/views/facility/submitbutton.js index 858349a..618c1fc 100644 --- a/admin/views/location/submitbutton.js +++ b/admin/views/facility/submitbutton.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 @package Support Groups @subpackage submitbutton.js @author Llewellyn van der Merwe @@ -42,7 +42,7 @@ Joomla.submitbutton = function(task) Joomla.submitform(task); return true; } else { - alert(Joomla.JText._('location, some values are not acceptable.','Some values are unacceptable')); + alert(Joomla.JText._('facility, some values are not acceptable.','Some values are unacceptable')); return false; } } diff --git a/admin/views/facility/tmpl/edit.php b/admin/views/facility/tmpl/edit.php new file mode 100644 index 0000000..e653f63 --- /dev/null +++ b/admin/views/facility/tmpl/edit.php @@ -0,0 +1,168 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.formvalidation'); +JHtml::_('formbehavior.chosen', 'select'); +JHtml::_('behavior.keepalive'); +$componentParams = JComponentHelper::getParams('com_supportgroups'); +?> +
+ + + +
+ + 'settings')); ?> + + +
+
+ +
+
+ +
+
+
+
+ +
+
+ + + +
+
+
+
+ +
+
+ + + canDo->get('facility.delete') || $this->canDo->get('facility.edit.created_by') || $this->canDo->get('facility.edit.state') || $this->canDo->get('facility.edit.created')) : ?> + +
+
+ +
+
+ +
+
+ + + + canDo->get('core.admin')) : ?> + +
+
+
+
+ form->getFieldset('accesscontrol') as $field): ?> +
+ label; echo $field->input;?> +
+
+ +
+
+
+
+ + + + + +
+ + +
+
+
+ +
+ + + + + +get('api_key', null); if ($api_key): ?> + + diff --git a/media/uikit/js/components/index.html b/admin/views/facility/tmpl/index.html similarity index 100% rename from media/uikit/js/components/index.html rename to admin/views/facility/tmpl/index.html diff --git a/admin/views/clinic/view.html.php b/admin/views/facility/view.html.php similarity index 53% rename from admin/views/clinic/view.html.php rename to admin/views/facility/view.html.php index 5e0a94a..57ef77e 100644 --- a/admin/views/clinic/view.html.php +++ b/admin/views/facility/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 13 of this MVC + @build 25th October, 2017 + @created 6th March, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -30,9 +30,9 @@ defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.component.view'); /** - * Clinic View class + * Facility View class */ -class SupportgroupsViewClinic extends JViewLegacy +class SupportgroupsViewFacility extends JViewLegacy { /** * display method of View @@ -40,38 +40,37 @@ class SupportgroupsViewClinic extends JViewLegacy */ public function display($tpl = null) { - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign the variables - $this->form = $this->get('Form'); - $this->item = $this->get('Item'); - $this->script = $this->get('Script'); - $this->state = $this->get('State'); - // get action permissions - $this->canDo = SupportgroupsHelper::getActions('clinic',$this->item); + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('facility',$this->item); // get input $jinput = JFactory::getApplication()->input; - $this->ref = $jinput->get('ref', 0, 'word'); - $this->refid = $jinput->get('refid', 0, 'int'); - $this->referral = ''; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; if ($this->refid) - { - // return to the item that refered to this item - $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; - } - elseif($this->ref) - { - // return to the list view that refered to this item - $this->referral = '&ref='.(string)$this->ref; - } + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } // Set the toolbar $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } // Display the template parent::display($tpl); @@ -91,29 +90,29 @@ class SupportgroupsViewClinic extends JViewLegacy $userId = $user->id; $isNew = $this->item->id == 0; - JToolbarHelper::title( JText::_($isNew ? 'COM_SUPPORTGROUPS_CLINIC_NEW' : 'COM_SUPPORTGROUPS_CLINIC_EDIT'), 'pencil-2 article-add'); + JToolbarHelper::title( JText::_($isNew ? 'COM_SUPPORTGROUPS_FACILITY_NEW' : 'COM_SUPPORTGROUPS_FACILITY_EDIT'), 'pencil-2 article-add'); // Built the actions for new and existing records. if ($this->refid || $this->ref) { - if ($this->canDo->get('clinic.create') && $isNew) + if ($this->canDo->get('facility.create') && $isNew) { // We can create the record. - JToolBarHelper::save('clinic.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::save('facility.save', 'JTOOLBAR_SAVE'); } - elseif ($this->canDo->get('clinic.edit')) + elseif ($this->canDo->get('facility.edit')) { // We can save the record. - JToolBarHelper::save('clinic.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::save('facility.save', 'JTOOLBAR_SAVE'); } if ($isNew) { // Do not creat but cancel. - JToolBarHelper::cancel('clinic.cancel', 'JTOOLBAR_CANCEL'); + JToolBarHelper::cancel('facility.cancel', 'JTOOLBAR_CANCEL'); } else { // We can close it. - JToolBarHelper::cancel('clinic.cancel', 'JTOOLBAR_CLOSE'); + JToolBarHelper::cancel('facility.cancel', 'JTOOLBAR_CLOSE'); } } else @@ -121,50 +120,50 @@ class SupportgroupsViewClinic extends JViewLegacy if ($isNew) { // For new records, check the create permission. - if ($this->canDo->get('clinic.create')) + if ($this->canDo->get('facility.create')) { - JToolBarHelper::apply('clinic.apply', 'JTOOLBAR_APPLY'); - JToolBarHelper::save('clinic.save', 'JTOOLBAR_SAVE'); - JToolBarHelper::custom('clinic.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + JToolBarHelper::apply('facility.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('facility.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::custom('facility.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); }; - JToolBarHelper::cancel('clinic.cancel', 'JTOOLBAR_CANCEL'); + JToolBarHelper::cancel('facility.cancel', 'JTOOLBAR_CANCEL'); } else { - if ($this->canDo->get('clinic.edit')) + if ($this->canDo->get('facility.edit')) { // We can save the new record - JToolBarHelper::apply('clinic.apply', 'JTOOLBAR_APPLY'); - JToolBarHelper::save('clinic.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::apply('facility.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('facility.save', 'JTOOLBAR_SAVE'); // We can save this record, but check the create permission to see // if we can return to make a new one. - if ($this->canDo->get('clinic.create')) + if ($this->canDo->get('facility.create')) { - JToolBarHelper::custom('clinic.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + JToolBarHelper::custom('facility.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); } } - $canVersion = ($this->canDo->get('core.version') && $this->canDo->get('clinic.version')); - if ($this->state->params->get('save_history', 1) && $this->canDo->get('clinic.edit') && $canVersion) + $canVersion = ($this->canDo->get('core.version') && $this->canDo->get('facility.version')); + if ($this->state->params->get('save_history', 1) && $this->canDo->get('facility.edit') && $canVersion) { - JToolbarHelper::versions('com_supportgroups.clinic', $this->item->id); + JToolbarHelper::versions('com_supportgroups.facility', $this->item->id); } - if ($this->canDo->get('clinic.create')) + if ($this->canDo->get('facility.create')) { - JToolBarHelper::custom('clinic.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); + JToolBarHelper::custom('facility.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); } - JToolBarHelper::cancel('clinic.cancel', 'JTOOLBAR_CLOSE'); + JToolBarHelper::cancel('facility.cancel', 'JTOOLBAR_CLOSE'); } } JToolbarHelper::divider(); // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('clinic'); + $help_url = SupportgroupsHelper::getHelpUrl('facility'); if (SupportgroupsHelper::checkString($help_url)) { JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); } } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -178,7 +177,7 @@ class SupportgroupsViewClinic extends JViewLegacy // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -190,11 +189,14 @@ class SupportgroupsViewClinic extends JViewLegacy protected function setDocument() { $isNew = ($this->item->id < 1); - $document = JFactory::getDocument(); - $document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_CLINIC_NEW' : 'COM_SUPPORTGROUPS_CLINIC_EDIT')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/clinic.css"); - $document->addScript(JURI::root() . $this->script); - $document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/clinic/submitbutton.js"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_FACILITY_NEW' : 'COM_SUPPORTGROUPS_FACILITY_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/facility.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/facility/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); JText::script('view not acceptable. Error'); } } diff --git a/admin/views/facility_type/submitbutton.js b/admin/views/facility_type/submitbutton.js new file mode 100644 index 0000000..7bc0252 --- /dev/null +++ b/admin/views/facility_type/submitbutton.js @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 2 of this MVC + @build 25th October, 2017 + @created 1st April, 2016 + @package Support Groups + @subpackage submitbutton.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +Joomla.submitbutton = function(task) +{ + if (task == ''){ + return false; + } else { + var isValid=true; + var action = task.split('.'); + if (action[1] != 'cancel' && action[1] != 'close'){ + var forms = $$('form.form-validate'); + for (var i=0;i + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.formvalidation'); +JHtml::_('formbehavior.chosen', 'select'); +JHtml::_('behavior.keepalive'); +$componentParams = JComponentHelper::getParams('com_supportgroups'); +?> +
+
+ +
+ + 'details')); ?> + + +
+
+ +
+
+ +
+
+ + + canDo->get('facility_type.delete') || $this->canDo->get('facility_type.edit.created_by') || $this->canDo->get('facility_type.edit.state') || $this->canDo->get('facility_type.edit.created')) : ?> + +
+
+ +
+
+ +
+
+ + + + canDo->get('core.admin')) : ?> + +
+
+
+
+ form->getFieldset('accesscontrol') as $field): ?> +
+ label; echo $field->input;?> +
+
+ +
+
+
+
+ + + + + +
+ + +
+
+
+ + diff --git a/media/uikit/js/core/index.html b/admin/views/facility_type/tmpl/index.html similarity index 100% rename from media/uikit/js/core/index.html rename to admin/views/facility_type/tmpl/index.html diff --git a/admin/views/facility_type/view.html.php b/admin/views/facility_type/view.html.php new file mode 100644 index 0000000..fd1b091 --- /dev/null +++ b/admin/views/facility_type/view.html.php @@ -0,0 +1,202 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Facility_type View class + */ +class SupportgroupsViewFacility_type extends JViewLegacy +{ + /** + * display method of View + * @return void + */ + public function display($tpl = null) + { + // Assign the variables + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('facility_type',$this->item); + // get input + $jinput = JFactory::getApplication()->input; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; + if ($this->refid) + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } + + // Set the toolbar + $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JFactory::getApplication()->input->set('hidemainmenu', true); + $user = JFactory::getUser(); + $userId = $user->id; + $isNew = $this->item->id == 0; + + JToolbarHelper::title( JText::_($isNew ? 'COM_SUPPORTGROUPS_FACILITY_TYPE_NEW' : 'COM_SUPPORTGROUPS_FACILITY_TYPE_EDIT'), 'pencil-2 article-add'); + // Built the actions for new and existing records. + if ($this->refid || $this->ref) + { + if ($this->canDo->get('facility_type.create') && $isNew) + { + // We can create the record. + JToolBarHelper::save('facility_type.save', 'JTOOLBAR_SAVE'); + } + elseif ($this->canDo->get('facility_type.edit')) + { + // We can save the record. + JToolBarHelper::save('facility_type.save', 'JTOOLBAR_SAVE'); + } + if ($isNew) + { + // Do not creat but cancel. + JToolBarHelper::cancel('facility_type.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + // We can close it. + JToolBarHelper::cancel('facility_type.cancel', 'JTOOLBAR_CLOSE'); + } + } + else + { + if ($isNew) + { + // For new records, check the create permission. + if ($this->canDo->get('facility_type.create')) + { + JToolBarHelper::apply('facility_type.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('facility_type.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::custom('facility_type.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + }; + JToolBarHelper::cancel('facility_type.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + if ($this->canDo->get('facility_type.edit')) + { + // We can save the new record + JToolBarHelper::apply('facility_type.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('facility_type.save', 'JTOOLBAR_SAVE'); + // We can save this record, but check the create permission to see + // if we can return to make a new one. + if ($this->canDo->get('facility_type.create')) + { + JToolBarHelper::custom('facility_type.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + } + } + $canVersion = ($this->canDo->get('core.version') && $this->canDo->get('facility_type.version')); + if ($this->state->params->get('save_history', 1) && $this->canDo->get('facility_type.edit') && $canVersion) + { + JToolbarHelper::versions('com_supportgroups.facility_type', $this->item->id); + } + if ($this->canDo->get('facility_type.create')) + { + JToolBarHelper::custom('facility_type.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); + } + JToolBarHelper::cancel('facility_type.cancel', 'JTOOLBAR_CLOSE'); + } + } + JToolbarHelper::divider(); + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('facility_type'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 30) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + $isNew = ($this->item->id < 1); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_FACILITY_TYPE_NEW' : 'COM_SUPPORTGROUPS_FACILITY_TYPE_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/facility_type.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/facility_type/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + JText::script('view not acceptable. Error'); + } +} diff --git a/media/uikit/js/index.html b/admin/views/facility_types/index.html similarity index 100% rename from media/uikit/js/index.html rename to admin/views/facility_types/index.html diff --git a/admin/views/facility_types/tmpl/default.php b/admin/views/facility_types/tmpl/default.php new file mode 100644 index 0000000..d072748 --- /dev/null +++ b/admin/views/facility_types/tmpl/default.php @@ -0,0 +1,99 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// load tooltip behavior +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.multiselect'); +JHtml::_('dropdown.init'); +JHtml::_('formbehavior.chosen', 'select'); + +if ($this->saveOrder) +{ + $saveOrderingUrl = 'index.php?option=com_supportgroups&task=facility_types.saveOrderAjax&tmpl=component'; + JHtml::_('sortablelist.sortable', 'facility_typeList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); +} + +?> + +
+sidebar)): ?> +
+ sidebar; ?> +
+
+ +
+ +items)): ?> + loadTemplate('toolbar');?> +
+ +
+ + loadTemplate('toolbar');?> +
+ get('facility.edit.state')): ?> + saveOrder) + { + $iconClass = ' inactive'; + } + else + { + $iconClass = ' inactive tip-top" hasTooltip" title="' . JHtml::tooltipText('JORDERINGDISABLED'); + } + ?> + + + + saveOrder) : ?> + + + + ⋮ + + + get('facility.edit')): ?> + checked_out) : ?> + + id); ?> + + □ + + + id); ?> + + + □ + + + get('facility.edit')): ?> +
+ escape($item->name); ?> + checked_out): ?> + name, $item->checked_out_time, 'facilities.', $canCheckin); ?> + +
+ +
escape($item->name); ?>
+ +
+ user->authorise('facility_type.edit', 'com_supportgroups.facility_type.' . (int)$item->facility_type)): ?> + + +
escape($item->facility_type_name); ?>
+ +
+ escape($item->phone); ?> + + escape($item->details); ?> + + get('facility.edit.state')) : ?> + checked_out) : ?> + + published, $i, 'facilities.', true, 'cb'); ?> + + published, $i, 'facilities.', false, 'cb'); ?> + + + published, $i, 'facilities.', true, 'cb'); ?> + + + published, $i, 'facilities.', false, 'cb'); ?> + + + id; ?> +
pagination->getListFooter(); ?>
+ ', 'ordering', $this->listDirn, $this->listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + + + + ▾ + + ■ + + listDirn, $this->listOrder); ?> + + listDirn, $this->listOrder); ?> + + listDirn, $this->listOrder); ?> + + listDirn, $this->listOrder); ?> + + listDirn, $this->listOrder); ?> + + + + listDirn, $this->listOrder); ?> +
+ loadTemplate('head');?> + loadTemplate('foot');?> + loadTemplate('body');?> +
+ + canCreate && $this->canEdit) : ?> + JText::_('COM_SUPPORTGROUPS_FACILITY_TYPES_BATCH_OPTIONS'), + 'footer' => $this->loadTemplate('batch_footer') + ), + $this->loadTemplate('batch_body') + ); ?> + + + + +
+ + + + \ No newline at end of file diff --git a/admin/views/facility_types/tmpl/default_batch_body.php b/admin/views/facility_types/tmpl/default_batch_body.php new file mode 100644 index 0000000..a26ad06 --- /dev/null +++ b/admin/views/facility_types/tmpl/default_batch_body.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + +

+batchDisplay; ?> \ No newline at end of file diff --git a/admin/views/facility_types/tmpl/default_batch_footer.php b/admin/views/facility_types/tmpl/default_batch_footer.php new file mode 100644 index 0000000..7a5004c --- /dev/null +++ b/admin/views/facility_types/tmpl/default_batch_footer.php @@ -0,0 +1,37 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + + + \ No newline at end of file diff --git a/admin/views/locations/tmpl/default_body.php b/admin/views/facility_types/tmpl/default_body.php similarity index 77% rename from admin/views/locations/tmpl/default_body.php rename to admin/views/facility_types/tmpl/default_body.php index 84dfb98..06de8de 100644 --- a/admin/views/locations/tmpl/default_body.php +++ b/admin/views/facility_types/tmpl/default_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 2 of this MVC + @build 25th October, 2017 + @created 1st April, 2016 @package Support Groups @subpackage default_body.php @author Llewellyn van der Merwe @@ -26,18 +26,18 @@ // No direct access to this file defined('_JEXEC') or die('Restricted access'); -$edit = "index.php?option=com_supportgroups&view=locations&task=location.edit"; +$edit = "index.php?option=com_supportgroups&view=facility_types&task=facility_type.edit"; ?> items as $i => $item): ?> user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0; $userChkOut = JFactory::getUser($item->checked_out); - $canDo = SupportgroupsHelper::getActions('location',$item,'locations'); + $canDo = SupportgroupsHelper::getActions('facility_type',$item,'facility_types'); ?> - get('location.edit.state')): ?> + get('facility_type.edit.state')): ?> saveOrder) { @@ -60,7 +60,7 @@ $edit = "index.php?option=com_supportgroups&view=locations&task=location.edit"; - get('location.edit')): ?> + get('facility_type.edit')): ?> checked_out) : ?> id); ?> @@ -75,39 +75,30 @@ $edit = "index.php?option=com_supportgroups&view=locations&task=location.edit"; - get('location.edit')): ?> + get('facility_type.edit')): ?>
escape($item->name); ?> checked_out): ?> - name, $item->checked_out_time, 'locations.', $canCheckin); ?> + name, $item->checked_out_time, 'facility_types.', $canCheckin); ?>
escape($item->name); ?>
- - user->authorise('region.edit', 'com_supportgroups.region.' . (int)$item->region)): ?> - - -
escape($item->region_name); ?>
- - - get('location.edit.state')) : ?> + get('facility_type.edit.state')) : ?> checked_out) : ?> - published, $i, 'locations.', true, 'cb'); ?> + published, $i, 'facility_types.', true, 'cb'); ?> - published, $i, 'locations.', false, 'cb'); ?> + published, $i, 'facility_types.', false, 'cb'); ?> - published, $i, 'locations.', true, 'cb'); ?> + published, $i, 'facility_types.', true, 'cb'); ?> - published, $i, 'locations.', false, 'cb'); ?> + published, $i, 'facility_types.', false, 'cb'); ?> diff --git a/admin/views/facility_types/tmpl/default_foot.php b/admin/views/facility_types/tmpl/default_foot.php new file mode 100644 index 0000000..fa5556c --- /dev/null +++ b/admin/views/facility_types/tmpl/default_foot.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + pagination->getListFooter(); ?> + \ No newline at end of file diff --git a/admin/views/locations/tmpl/default_head.php b/admin/views/facility_types/tmpl/default_head.php similarity index 78% rename from admin/views/locations/tmpl/default_head.php rename to admin/views/facility_types/tmpl/default_head.php index 6da54f6..4b223e0 100644 --- a/admin/views/locations/tmpl/default_head.php +++ b/admin/views/facility_types/tmpl/default_head.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 2 of this MVC + @build 25th October, 2017 + @created 1st April, 2016 @package Support Groups @subpackage default_head.php @author Llewellyn van der Merwe @@ -44,21 +44,18 @@ defined('_JEXEC') or die('Restricted access'); - listDirn, $this->listOrder); ?> - - - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> canState): ?> - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> - + - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> \ No newline at end of file diff --git a/admin/views/facility_types/tmpl/default_toolbar.php b/admin/views/facility_types/tmpl/default_toolbar.php new file mode 100644 index 0000000..188f98e --- /dev/null +++ b/admin/views/facility_types/tmpl/default_toolbar.php @@ -0,0 +1,59 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> +
+ +
+ + +
+
+ + pagination->getLimitBox(); ?> +
+
+ + +
+
+ + +
+
+
\ No newline at end of file diff --git a/admin/views/facility_types/tmpl/index.html b/admin/views/facility_types/tmpl/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/admin/views/facility_types/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/facility_types/view.html.php b/admin/views/facility_types/view.html.php new file mode 100644 index 0000000..d2f4585 --- /dev/null +++ b/admin/views/facility_types/view.html.php @@ -0,0 +1,252 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Supportgroups View class for the Facility_types + */ +class SupportgroupsViewFacility_types extends JViewLegacy +{ + /** + * Facility_types view display method + * @return void + */ + function display($tpl = null) + { + if ($this->getLayout() !== 'modal') + { + // Include helper submenu + SupportgroupsHelper::addSubmenu('facility_types'); + } + + // Assign data to the view + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('facility_type'); + $this->canEdit = $this->canDo->get('facility_type.edit'); + $this->canState = $this->canDo->get('facility_type.edit.state'); + $this->canCreate = $this->canDo->get('facility_type.create'); + $this->canDelete = $this->canDo->get('facility_type.delete'); + $this->canBatch = $this->canDo->get('core.batch'); + + // We don't need toolbar in the modal window. + if ($this->getLayout() !== 'modal') + { + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_FACILITY_TYPES'), 'health'); + JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=facility_types'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + + if ($this->canCreate) + { + JToolBarHelper::addNew('facility_type.add'); + } + + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) + { + if ($this->canEdit) + { + JToolBarHelper::editList('facility_type.edit'); + } + + if ($this->canState) + { + JToolBarHelper::publishList('facility_types.publish'); + JToolBarHelper::unpublishList('facility_types.unpublish'); + JToolBarHelper::archiveList('facility_types.archive'); + + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('facility_types.checkin'); + } + } + + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'facility_types.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('facility_types.trash'); + } + + if ($this->canDo->get('core.export') && $this->canDo->get('facility_type.export')) + { + JToolBarHelper::custom('facility_types.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); + } + } + + if ($this->canDo->get('core.import') && $this->canDo->get('facility_type.import')) + { + JToolBarHelper::custom('facility_types.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); + } + + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('facility_types'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } + + if ($this->canState) + { + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_published', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) + ); + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } + } + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_ACCESS'), + 'filter_access', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + ); + } + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_FACILITY_TYPES')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/facility_types.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 50) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Returns an array of fields the table can be sorted by + * + * @return array Array containing the field name to sort by as the key and display text as value + */ + protected function getSortFields() + { + return array( + 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), + 'a.published' => JText::_('JSTATUS'), + 'a.name' => JText::_('COM_SUPPORTGROUPS_FACILITY_TYPE_NAME_LABEL'), + 'a.id' => JText::_('JGRID_HEADING_ID') + ); + } +} diff --git a/admin/views/help_document/submitbutton.js b/admin/views/help_document/submitbutton.js index cefd160..99d191b 100644 --- a/admin/views/help_document/submitbutton.js +++ b/admin/views/help_document/submitbutton.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage submitbutton.js @author Llewellyn van der Merwe diff --git a/admin/views/help_document/tmpl/edit.php b/admin/views/help_document/tmpl/edit.php index 11bc89a..6cb6fe8 100644 --- a/admin/views/help_document/tmpl/edit.php +++ b/admin/views/help_document/tmpl/edit.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 20 of this MVC + @build 13th April, 2018 + @created 13th July, 2015 @package Support Groups @subpackage edit.php @author Llewellyn van der Merwe @@ -33,10 +33,33 @@ JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.keepalive'); $componentParams = JComponentHelper::getParams('com_supportgroups'); ?> - + +
- + +
@@ -145,89 +145,87 @@ JHtml::_('script', 'system/core.js', false, true);
- - hasPackage && SupportgroupsHelper::checkArray($this->headerList) && SupportgroupsHelper::checkArray($this->headers)) : ?> -
- -
- -
- -
-
- headerList as $name => $title): ?> -
- -
- -
-
- -
- -
-
- - + + hasPackage && SupportgroupsHelper::checkArray($this->headerList) && SupportgroupsHelper::checkArray($this->headers)) : ?> +
+ +
+ +
+ +
+
+ headerList as $name => $title): ?> +
+ +
+ +
+
+ +
+ +
+
+ + 'upload')); ?> - - -
- -
- -
- -
-
-
-     (.csv .xls .ods) -
-
- - - -
- -
- -
- -
-
-
-     (.csv .xls .ods) -
-
- - - -
- -
- -
- -
-
-
-     (.csv .xls .ods) -
-
- - - - + + +
+ +
+ +
+ +
+
+
+     (.csv .xls .ods) +
+
+ + + +
+ +
+ +
+ +
+
+
+     (.csv .xls .ods) +
+
+ + + +
+ +
+ +
+ +
+
+
+     (.csv .xls .ods) +
+
+ + - - - + + + -
+
\ No newline at end of file diff --git a/admin/views/import/view.html.php b/admin/views/import/view.html.php index 2db71fd..d4756be 100644 --- a/admin/views/import/view.html.php +++ b/admin/views/import/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage view.html.php @@ -41,19 +41,13 @@ class SupportgroupsViewImport extends JViewLegacy protected $dataType; public function display($tpl = null) - { + { if ($this->getLayout() !== 'modal') { // Include helper submenu SupportgroupsHelper::addSubmenu('import'); } - // Check for errors. - if (count($errors = $this->get('Errors'))){ - JError::raiseError(500, implode('
', $errors)); - return false; - } - $paths = new stdClass; $paths->first = ''; $state = $this->get('state'); @@ -82,6 +76,12 @@ class SupportgroupsViewImport extends JViewLegacy // clear the data type $session->clear('dataType'); } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } // Display the template parent::display($tpl); @@ -101,10 +101,10 @@ class SupportgroupsViewImport extends JViewLegacy } // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('import'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } + $help_url = SupportgroupsHelper::getHelpUrl('import'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } } } diff --git a/admin/views/info_type/submitbutton.js b/admin/views/info_type/submitbutton.js new file mode 100644 index 0000000..46ea8af --- /dev/null +++ b/admin/views/info_type/submitbutton.js @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 3 of this MVC + @build 25th October, 2017 + @created 2nd April, 2016 + @package Support Groups + @subpackage submitbutton.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +Joomla.submitbutton = function(task) +{ + if (task == ''){ + return false; + } else { + var isValid=true; + var action = task.split('.'); + if (action[1] != 'cancel' && action[1] != 'close'){ + var forms = $$('form.form-validate'); + for (var i=0;i + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.formvalidation'); +JHtml::_('formbehavior.chosen', 'select'); +JHtml::_('behavior.keepalive'); +$componentParams = JComponentHelper::getParams('com_supportgroups'); +?> +
+
+ +
+ + 'details')); ?> + + +
+
+ +
+
+ +
+
+ + + canDo->get('info_type.delete') || $this->canDo->get('info_type.edit.created_by') || $this->canDo->get('info_type.edit.state') || $this->canDo->get('info_type.edit.created')) : ?> + +
+
+ +
+
+ +
+
+ + + + canDo->get('core.admin')) : ?> + +
+
+
+
+ form->getFieldset('accesscontrol') as $field): ?> +
+ label; echo $field->input;?> +
+
+ +
+
+
+
+ + + + + +
+ + +
+
+
+ +
diff --git a/admin/views/info_type/tmpl/index.html b/admin/views/info_type/tmpl/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/admin/views/info_type/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/info_type/view.html.php b/admin/views/info_type/view.html.php new file mode 100644 index 0000000..d1ed752 --- /dev/null +++ b/admin/views/info_type/view.html.php @@ -0,0 +1,202 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Info_type View class + */ +class SupportgroupsViewInfo_type extends JViewLegacy +{ + /** + * display method of View + * @return void + */ + public function display($tpl = null) + { + // Assign the variables + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('info_type',$this->item); + // get input + $jinput = JFactory::getApplication()->input; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; + if ($this->refid) + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } + + // Set the toolbar + $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JFactory::getApplication()->input->set('hidemainmenu', true); + $user = JFactory::getUser(); + $userId = $user->id; + $isNew = $this->item->id == 0; + + JToolbarHelper::title( JText::_($isNew ? 'COM_SUPPORTGROUPS_INFO_TYPE_NEW' : 'COM_SUPPORTGROUPS_INFO_TYPE_EDIT'), 'pencil-2 article-add'); + // Built the actions for new and existing records. + if ($this->refid || $this->ref) + { + if ($this->canDo->get('info_type.create') && $isNew) + { + // We can create the record. + JToolBarHelper::save('info_type.save', 'JTOOLBAR_SAVE'); + } + elseif ($this->canDo->get('info_type.edit')) + { + // We can save the record. + JToolBarHelper::save('info_type.save', 'JTOOLBAR_SAVE'); + } + if ($isNew) + { + // Do not creat but cancel. + JToolBarHelper::cancel('info_type.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + // We can close it. + JToolBarHelper::cancel('info_type.cancel', 'JTOOLBAR_CLOSE'); + } + } + else + { + if ($isNew) + { + // For new records, check the create permission. + if ($this->canDo->get('info_type.create')) + { + JToolBarHelper::apply('info_type.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('info_type.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::custom('info_type.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + }; + JToolBarHelper::cancel('info_type.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + if ($this->canDo->get('info_type.edit')) + { + // We can save the new record + JToolBarHelper::apply('info_type.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('info_type.save', 'JTOOLBAR_SAVE'); + // We can save this record, but check the create permission to see + // if we can return to make a new one. + if ($this->canDo->get('info_type.create')) + { + JToolBarHelper::custom('info_type.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + } + } + $canVersion = ($this->canDo->get('core.version') && $this->canDo->get('info_type.version')); + if ($this->state->params->get('save_history', 1) && $this->canDo->get('info_type.edit') && $canVersion) + { + JToolbarHelper::versions('com_supportgroups.info_type', $this->item->id); + } + if ($this->canDo->get('info_type.create')) + { + JToolBarHelper::custom('info_type.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); + } + JToolBarHelper::cancel('info_type.cancel', 'JTOOLBAR_CLOSE'); + } + } + JToolbarHelper::divider(); + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('info_type'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 30) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + $isNew = ($this->item->id < 1); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_INFO_TYPE_NEW' : 'COM_SUPPORTGROUPS_INFO_TYPE_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/info_type.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/info_type/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + JText::script('view not acceptable. Error'); + } +} diff --git a/admin/views/info_types/index.html b/admin/views/info_types/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/admin/views/info_types/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/info_types/tmpl/default.php b/admin/views/info_types/tmpl/default.php new file mode 100644 index 0000000..cd9daf7 --- /dev/null +++ b/admin/views/info_types/tmpl/default.php @@ -0,0 +1,99 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// load tooltip behavior +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.multiselect'); +JHtml::_('dropdown.init'); +JHtml::_('formbehavior.chosen', 'select'); + +if ($this->saveOrder) +{ + $saveOrderingUrl = 'index.php?option=com_supportgroups&task=info_types.saveOrderAjax&tmpl=component'; + JHtml::_('sortablelist.sortable', 'info_typeList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); +} + +?> + +
+sidebar)): ?> +
+ sidebar; ?> +
+
+ +
+ +items)): ?> + loadTemplate('toolbar');?> +
+ +
+ + loadTemplate('toolbar');?> + + loadTemplate('head');?> + loadTemplate('foot');?> + loadTemplate('body');?> +
+ + canCreate && $this->canEdit) : ?> + JText::_('COM_SUPPORTGROUPS_INFO_TYPES_BATCH_OPTIONS'), + 'footer' => $this->loadTemplate('batch_footer') + ), + $this->loadTemplate('batch_body') + ); ?> + + + + +
+ + + + \ No newline at end of file diff --git a/admin/views/info_types/tmpl/default_batch_body.php b/admin/views/info_types/tmpl/default_batch_body.php new file mode 100644 index 0000000..81f81e6 --- /dev/null +++ b/admin/views/info_types/tmpl/default_batch_body.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + +

+batchDisplay; ?> \ No newline at end of file diff --git a/admin/views/info_types/tmpl/default_batch_footer.php b/admin/views/info_types/tmpl/default_batch_footer.php new file mode 100644 index 0000000..082385a --- /dev/null +++ b/admin/views/info_types/tmpl/default_batch_footer.php @@ -0,0 +1,37 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + + + \ No newline at end of file diff --git a/admin/views/info_types/tmpl/default_body.php b/admin/views/info_types/tmpl/default_body.php new file mode 100644 index 0000000..1270939 --- /dev/null +++ b/admin/views/info_types/tmpl/default_body.php @@ -0,0 +1,108 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +$edit = "index.php?option=com_supportgroups&view=info_types&task=info_type.edit"; + +?> +items as $i => $item): ?> + user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0; + $userChkOut = JFactory::getUser($item->checked_out); + $canDo = SupportgroupsHelper::getActions('info_type',$item,'info_types'); + ?> + + + get('info_type.edit.state')): ?> + saveOrder) + { + $iconClass = ' inactive'; + } + else + { + $iconClass = ' inactive tip-top" hasTooltip" title="' . JHtml::tooltipText('JORDERINGDISABLED'); + } + ?> + + + + saveOrder) : ?> + + + + ⋮ + + + + get('info_type.edit')): ?> + checked_out) : ?> + + id); ?> + + □ + + + id); ?> + + + □ + + + + get('info_type.edit')): ?> +
+ escape($item->name); ?> + checked_out): ?> + name, $item->checked_out_time, 'info_types.', $canCheckin); ?> + +
+ +
escape($item->name); ?>
+ + + + get('info_type.edit.state')) : ?> + checked_out) : ?> + + published, $i, 'info_types.', true, 'cb'); ?> + + published, $i, 'info_types.', false, 'cb'); ?> + + + published, $i, 'info_types.', true, 'cb'); ?> + + + published, $i, 'info_types.', false, 'cb'); ?> + + + + id; ?> + + + \ No newline at end of file diff --git a/admin/views/info_types/tmpl/default_foot.php b/admin/views/info_types/tmpl/default_foot.php new file mode 100644 index 0000000..9dba096 --- /dev/null +++ b/admin/views/info_types/tmpl/default_foot.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + pagination->getListFooter(); ?> + \ No newline at end of file diff --git a/admin/views/info_types/tmpl/default_head.php b/admin/views/info_types/tmpl/default_head.php new file mode 100644 index 0000000..82fffa2 --- /dev/null +++ b/admin/views/info_types/tmpl/default_head.php @@ -0,0 +1,61 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + canEdit&& $this->canState): ?> + + ', 'ordering', $this->listDirn, $this->listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + + + + + + + ▾ + + + ■ + + + + listDirn, $this->listOrder); ?> + + canState): ?> + + listDirn, $this->listOrder); ?> + + + + + + + + listDirn, $this->listOrder); ?> + + \ No newline at end of file diff --git a/admin/views/info_types/tmpl/default_toolbar.php b/admin/views/info_types/tmpl/default_toolbar.php new file mode 100644 index 0000000..80d5b9e --- /dev/null +++ b/admin/views/info_types/tmpl/default_toolbar.php @@ -0,0 +1,59 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> +
+ +
+ + +
+
+ + pagination->getLimitBox(); ?> +
+
+ + +
+
+ + +
+
+
\ No newline at end of file diff --git a/admin/views/info_types/tmpl/index.html b/admin/views/info_types/tmpl/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/admin/views/info_types/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/info_types/view.html.php b/admin/views/info_types/view.html.php new file mode 100644 index 0000000..f5c948f --- /dev/null +++ b/admin/views/info_types/view.html.php @@ -0,0 +1,252 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Supportgroups View class for the Info_types + */ +class SupportgroupsViewInfo_types extends JViewLegacy +{ + /** + * Info_types view display method + * @return void + */ + function display($tpl = null) + { + if ($this->getLayout() !== 'modal') + { + // Include helper submenu + SupportgroupsHelper::addSubmenu('info_types'); + } + + // Assign data to the view + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('info_type'); + $this->canEdit = $this->canDo->get('info_type.edit'); + $this->canState = $this->canDo->get('info_type.edit.state'); + $this->canCreate = $this->canDo->get('info_type.create'); + $this->canDelete = $this->canDo->get('info_type.delete'); + $this->canBatch = $this->canDo->get('core.batch'); + + // We don't need toolbar in the modal window. + if ($this->getLayout() !== 'modal') + { + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_INFO_TYPES'), 'book'); + JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=info_types'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + + if ($this->canCreate) + { + JToolBarHelper::addNew('info_type.add'); + } + + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) + { + if ($this->canEdit) + { + JToolBarHelper::editList('info_type.edit'); + } + + if ($this->canState) + { + JToolBarHelper::publishList('info_types.publish'); + JToolBarHelper::unpublishList('info_types.unpublish'); + JToolBarHelper::archiveList('info_types.archive'); + + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('info_types.checkin'); + } + } + + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'info_types.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('info_types.trash'); + } + + if ($this->canDo->get('core.export') && $this->canDo->get('info_type.export')) + { + JToolBarHelper::custom('info_types.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); + } + } + + if ($this->canDo->get('core.import') && $this->canDo->get('info_type.import')) + { + JToolBarHelper::custom('info_types.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); + } + + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('info_types'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } + + if ($this->canState) + { + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_published', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) + ); + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } + } + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_ACCESS'), + 'filter_access', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + ); + } + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_INFO_TYPES')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/info_types.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 50) + { + // use the helper htmlEscape method instead and shorten the string + return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); + } + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset); + } + + /** + * Returns an array of fields the table can be sorted by + * + * @return array Array containing the field name to sort by as the key and display text as value + */ + protected function getSortFields() + { + return array( + 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), + 'a.published' => JText::_('JSTATUS'), + 'a.name' => JText::_('COM_SUPPORTGROUPS_INFO_TYPE_NAME_LABEL'), + 'a.id' => JText::_('JGRID_HEADING_ID') + ); + } +} diff --git a/admin/views/location/view.html.php b/admin/views/location/view.html.php deleted file mode 100644 index 2915ce8..0000000 --- a/admin/views/location/view.html.php +++ /dev/null @@ -1,227 +0,0 @@ - - @copyright Copyright (C) 2015. All Rights Reserved - @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html - - Support Groups - -/-----------------------------------------------------------------------------------------------------------------------------*/ - -// No direct access to this file -defined('_JEXEC') or die('Restricted access'); - -// import Joomla view library -jimport('joomla.application.component.view'); - -/** - * Location View class - */ -class SupportgroupsViewLocation extends JViewLegacy -{ - /** - * display method of View - * @return void - */ - public function display($tpl = null) - { - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - - // Assign the variables - $this->form = $this->get('Form'); - $this->item = $this->get('Item'); - $this->script = $this->get('Script'); - $this->state = $this->get('State'); - // get action permissions - $this->canDo = SupportgroupsHelper::getActions('location',$this->item); - // get input - $jinput = JFactory::getApplication()->input; - $this->ref = $jinput->get('ref', 0, 'word'); - $this->refid = $jinput->get('refid', 0, 'int'); - $this->referral = ''; - if ($this->refid) - { - // return to the item that refered to this item - $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; - } - elseif($this->ref) - { - // return to the list view that refered to this item - $this->referral = '&ref='.(string)$this->ref; - } - - // Get Linked view data - $this->vvwsupport_groups = $this->get('Vvwsupport_groups'); - - // Set the toolbar - $this->addToolBar(); - - // Display the template - parent::display($tpl); - - // Set the document - $this->setDocument(); - } - - - /** - * Setting the toolbar - */ - protected function addToolBar() - { - JFactory::getApplication()->input->set('hidemainmenu', true); - $user = JFactory::getUser(); - $userId = $user->id; - $isNew = $this->item->id == 0; - - JToolbarHelper::title( JText::_($isNew ? 'COM_SUPPORTGROUPS_LOCATION_NEW' : 'COM_SUPPORTGROUPS_LOCATION_EDIT'), 'pencil-2 article-add'); - // Built the actions for new and existing records. - if ($this->refid || $this->ref) - { - if ($this->canDo->get('location.create') && $isNew) - { - // We can create the record. - JToolBarHelper::save('location.save', 'JTOOLBAR_SAVE'); - } - elseif ($this->canDo->get('location.edit')) - { - // We can save the record. - JToolBarHelper::save('location.save', 'JTOOLBAR_SAVE'); - } - if ($isNew) - { - // Do not creat but cancel. - JToolBarHelper::cancel('location.cancel', 'JTOOLBAR_CANCEL'); - } - else - { - // We can close it. - JToolBarHelper::cancel('location.cancel', 'JTOOLBAR_CLOSE'); - } - } - else - { - if ($isNew) - { - // For new records, check the create permission. - if ($this->canDo->get('location.create')) - { - JToolBarHelper::apply('location.apply', 'JTOOLBAR_APPLY'); - JToolBarHelper::save('location.save', 'JTOOLBAR_SAVE'); - JToolBarHelper::custom('location.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); - }; - JToolBarHelper::cancel('location.cancel', 'JTOOLBAR_CANCEL'); - } - else - { - if ($this->canDo->get('location.edit')) - { - // We can save the new record - JToolBarHelper::apply('location.apply', 'JTOOLBAR_APPLY'); - JToolBarHelper::save('location.save', 'JTOOLBAR_SAVE'); - // We can save this record, but check the create permission to see - // if we can return to make a new one. - if ($this->canDo->get('location.create')) - { - JToolBarHelper::custom('location.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); - } - } - $canVersion = ($this->canDo->get('core.version') && $this->canDo->get('location.version')); - if ($this->state->params->get('save_history', 1) && $this->canDo->get('location.edit') && $canVersion) - { - JToolbarHelper::versions('com_supportgroups.location', $this->item->id); - } - if ($this->canDo->get('location.create')) - { - JToolBarHelper::custom('location.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); - } - JToolBarHelper::cancel('location.cancel', 'JTOOLBAR_CLOSE'); - } - } - JToolbarHelper::divider(); - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('location'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } - } - - /** - * Escapes a value for output in a view script. - * - * @param mixed $var The output to escape. - * - * @return mixed The escaped value. - */ - public function escape($var) - { - if(strlen($var) > 30) - { - // use the helper htmlEscape method instead and shorten the string - return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); - } - // use the helper htmlEscape method instead. - return SupportgroupsHelper::htmlEscape($var, $this->_charset); - } - - /** - * Method to set up the document properties - * - * @return void - */ - protected function setDocument() - { - $isNew = ($this->item->id < 1); - $document = JFactory::getDocument(); - $document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_LOCATION_NEW' : 'COM_SUPPORTGROUPS_LOCATION_EDIT')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/location.css"); - - // Add the CSS for Footable. - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.core.min.css'); - - // Use the Metro Style - if (!isset($this->fooTableStyle) || 0 == $this->fooTableStyle) - { - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.metro.min.css'); - } - // Use the Legacy Style. - elseif (isset($this->fooTableStyle) && 1 == $this->fooTableStyle) - { - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.standalone.min.css'); - } - - // Add the JavaScript for Footable - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.sort.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.filter.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.paginate.js'); - - $footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('.footable').footable(); }); jQuery('.nav-tabs').on('click', 'li', function() { setTimeout(tableFix, 10); }); }); function tableFix() { jQuery('.footable').trigger('footable_resize'); }"; - $document->addScriptDeclaration($footable); - - $document->addScript(JURI::root() . $this->script); - $document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/location/submitbutton.js"); - JText::script('view not acceptable. Error'); - } -} diff --git a/admin/views/locations/view.html.php b/admin/views/locations/view.html.php deleted file mode 100644 index f38be22..0000000 --- a/admin/views/locations/view.html.php +++ /dev/null @@ -1,273 +0,0 @@ - - @copyright Copyright (C) 2015. All Rights Reserved - @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html - - Support Groups - -/-----------------------------------------------------------------------------------------------------------------------------*/ - -// No direct access to this file -defined('_JEXEC') or die('Restricted access'); - -// import Joomla view library -jimport('joomla.application.component.view'); - -/** - * Supportgroups View class for the Locations - */ -class SupportgroupsViewLocations extends JViewLegacy -{ - /** - * Locations view display method - * @return void - */ - function display($tpl = null) - { - if ($this->getLayout() !== 'modal') - { - // Include helper submenu - SupportgroupsHelper::addSubmenu('locations'); - } - - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - - // Assign data to the view - $this->items = $this->get('Items'); - $this->pagination = $this->get('Pagination'); - $this->state = $this->get('State'); - $this->user = JFactory::getUser(); - $this->listOrder = $this->escape($this->state->get('list.ordering')); - $this->listDirn = $this->escape($this->state->get('list.direction')); - $this->saveOrder = $this->listOrder == 'ordering'; - // get global action permissions - $this->canDo = SupportgroupsHelper::getActions('location'); - $this->canEdit = $this->canDo->get('location.edit'); - $this->canState = $this->canDo->get('location.edit.state'); - $this->canCreate = $this->canDo->get('location.create'); - $this->canDelete = $this->canDo->get('location.delete'); - $this->canBatch = $this->canDo->get('core.batch'); - - // We don't need toolbar in the modal window. - if ($this->getLayout() !== 'modal') - { - $this->addToolbar(); - $this->sidebar = JHtmlSidebar::render(); - // load the batch html - if ($this->canCreate && $this->canEdit && $this->canState) - { - $this->batchDisplay = JHtmlBatch_::render(); - } - } - - // Display the template - parent::display($tpl); - - // Set the document - $this->setDocument(); - } - - /** - * Setting the toolbar - */ - protected function addToolBar() - { - JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_LOCATIONS'), 'home'); - JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=locations'); - JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); - - if ($this->canCreate) - { - JToolBarHelper::addNew('location.add'); - } - - // Only load if there are items - if (SupportgroupsHelper::checkArray($this->items)) - { - if ($this->canEdit) - { - JToolBarHelper::editList('location.edit'); - } - - if ($this->canState) - { - JToolBarHelper::publishList('locations.publish'); - JToolBarHelper::unpublishList('locations.unpublish'); - JToolBarHelper::archiveList('locations.archive'); - - if ($this->canDo->get('core.admin')) - { - JToolBarHelper::checkin('locations.checkin'); - } - } - - // Add a batch button - if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) - { - // Get the toolbar object instance - $bar = JToolBar::getInstance('toolbar'); - // set the batch button name - $title = JText::_('JTOOLBAR_BATCH'); - // Instantiate a new JLayoutFile instance and render the batch button - $layout = new JLayoutFile('joomla.toolbar.batch'); - // add the button to the page - $dhtml = $layout->render(array('title' => $title)); - $bar->appendButton('Custom', $dhtml, 'batch'); - } - - if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) - { - JToolbarHelper::deleteList('', 'locations.delete', 'JTOOLBAR_EMPTY_TRASH'); - } - elseif ($this->canState && $this->canDelete) - { - JToolbarHelper::trash('locations.trash'); - } - - if ($this->canDo->get('core.export') && $this->canDo->get('location.export')) - { - JToolBarHelper::custom('locations.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); - } - } - - if ($this->canDo->get('core.import') && $this->canDo->get('location.import')) - { - JToolBarHelper::custom('locations.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); - } - - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('locations'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } - - // add the options comp button - if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) - { - JToolBarHelper::preferences('com_supportgroups'); - } - - if ($this->canState) - { - JHtmlSidebar::addFilter( - JText::_('JOPTION_SELECT_PUBLISHED'), - 'filter_published', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) - ); - // only load if batch allowed - if ($this->canBatch) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), - 'batch[published]', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) - ); - } - } - - JHtmlSidebar::addFilter( - JText::_('JOPTION_SELECT_ACCESS'), - 'filter_access', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) - ); - - if ($this->canBatch && $this->canCreate && $this->canEdit) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), - 'batch[access]', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') - ); - } - - // Set Region Name Selection - $this->regionNameOptions = JFormHelper::loadFieldType('Regions')->getOptions(); - if ($this->regionNameOptions) - { - // Region Name Filter - JHtmlSidebar::addFilter( - '- Select '.JText::_('COM_SUPPORTGROUPS_LOCATION_REGION_LABEL').' -', - 'filter_region', - JHtml::_('select.options', $this->regionNameOptions, 'value', 'text', $this->state->get('filter.region')) - ); - - if ($this->canBatch && $this->canCreate && $this->canEdit) - { - // Region Name Batch Selection - JHtmlBatch_::addListSelection( - '- Keep Original '.JText::_('COM_SUPPORTGROUPS_LOCATION_REGION_LABEL').' -', - 'batch[region]', - JHtml::_('select.options', $this->regionNameOptions, 'value', 'text') - ); - } - } - } - - /** - * Method to set up the document properties - * - * @return void - */ - protected function setDocument() - { - $document = JFactory::getDocument(); - $document->setTitle(JText::_('COM_SUPPORTGROUPS_LOCATIONS')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/locations.css"); - } - - /** - * Escapes a value for output in a view script. - * - * @param mixed $var The output to escape. - * - * @return mixed The escaped value. - */ - public function escape($var) - { - if(strlen($var) > 50) - { - // use the helper htmlEscape method instead and shorten the string - return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); - } - // use the helper htmlEscape method instead. - return SupportgroupsHelper::htmlEscape($var, $this->_charset); - } - - /** - * Returns an array of fields the table can be sorted by - * - * @return array Array containing the field name to sort by as the key and display text as value - */ - protected function getSortFields() - { - return array( - 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), - 'a.published' => JText::_('JSTATUS'), - 'a.name' => JText::_('COM_SUPPORTGROUPS_LOCATION_NAME_LABEL'), - 'g.name' => JText::_('COM_SUPPORTGROUPS_LOCATION_REGION_LABEL'), - 'a.id' => JText::_('JGRID_HEADING_ID') - ); - } -} diff --git a/admin/views/payment/submitbutton.js b/admin/views/payment/submitbutton.js index e73ab84..ebb3ea1 100644 --- a/admin/views/payment/submitbutton.js +++ b/admin/views/payment/submitbutton.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage submitbutton.js @author Llewellyn van der Merwe diff --git a/admin/views/payment/tmpl/edit.php b/admin/views/payment/tmpl/edit.php index ac64364..6f390e2 100644 --- a/admin/views/payment/tmpl/edit.php +++ b/admin/views/payment/tmpl/edit.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage edit.php @author Llewellyn van der Merwe @@ -33,10 +33,11 @@ JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.keepalive'); $componentParams = JComponentHelper::getParams('com_supportgroups'); ?> - +
-
+ +
'details')); ?> @@ -89,5 +90,7 @@ $componentParams = JComponentHelper::getParams('com_supportgroups');
+
+
diff --git a/admin/views/payment/view.html.php b/admin/views/payment/view.html.php index 1aa7760..8e34dcc 100644 --- a/admin/views/payment/view.html.php +++ b/admin/views/payment/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -40,38 +40,37 @@ class SupportgroupsViewPayment extends JViewLegacy */ public function display($tpl = null) { - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign the variables - $this->form = $this->get('Form'); - $this->item = $this->get('Item'); - $this->script = $this->get('Script'); - $this->state = $this->get('State'); - // get action permissions - $this->canDo = SupportgroupsHelper::getActions('payment',$this->item); + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('payment',$this->item); // get input $jinput = JFactory::getApplication()->input; - $this->ref = $jinput->get('ref', 0, 'word'); - $this->refid = $jinput->get('refid', 0, 'int'); - $this->referral = ''; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; if ($this->refid) - { - // return to the item that refered to this item - $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; - } - elseif($this->ref) - { - // return to the list view that refered to this item - $this->referral = '&ref='.(string)$this->ref; - } + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } // Set the toolbar $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } // Display the template parent::display($tpl); @@ -164,7 +163,7 @@ class SupportgroupsViewPayment extends JViewLegacy } } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -178,7 +177,7 @@ class SupportgroupsViewPayment extends JViewLegacy // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -190,11 +189,14 @@ class SupportgroupsViewPayment extends JViewLegacy protected function setDocument() { $isNew = ($this->item->id < 1); - $document = JFactory::getDocument(); - $document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_PAYMENT_NEW' : 'COM_SUPPORTGROUPS_PAYMENT_EDIT')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/payment.css"); - $document->addScript(JURI::root() . $this->script); - $document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/payment/submitbutton.js"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_PAYMENT_NEW' : 'COM_SUPPORTGROUPS_PAYMENT_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/payment.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/payment/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); JText::script('view not acceptable. Error'); } } diff --git a/admin/views/payments/tmpl/default.php b/admin/views/payments/tmpl/default.php index 02c6368..9065267 100644 --- a/admin/views/payments/tmpl/default.php +++ b/admin/views/payments/tmpl/default.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage default.php @author Llewellyn van der Merwe diff --git a/admin/views/payments/tmpl/default_batch_body.php b/admin/views/payments/tmpl/default_batch_body.php index 7417498..76ac51f 100644 --- a/admin/views/payments/tmpl/default_batch_body.php +++ b/admin/views/payments/tmpl/default_batch_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage default_batch_body.php @author Llewellyn van der Merwe diff --git a/admin/views/payments/tmpl/default_batch_footer.php b/admin/views/payments/tmpl/default_batch_footer.php index 1c8a0dd..47143dd 100644 --- a/admin/views/payments/tmpl/default_batch_footer.php +++ b/admin/views/payments/tmpl/default_batch_footer.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage default_batch_footer.php @author Llewellyn van der Merwe @@ -28,7 +28,7 @@ defined('_JEXEC') or die('Restricted access'); ?> - diff --git a/admin/views/payments/tmpl/default_body.php b/admin/views/payments/tmpl/default_body.php index 58b1e53..ebd2d4b 100644 --- a/admin/views/payments/tmpl/default_body.php +++ b/admin/views/payments/tmpl/default_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage default_body.php @author Llewellyn van der Merwe diff --git a/admin/views/payments/tmpl/default_foot.php b/admin/views/payments/tmpl/default_foot.php index 8c58d8c..a05499b 100644 --- a/admin/views/payments/tmpl/default_foot.php +++ b/admin/views/payments/tmpl/default_foot.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage default_foot.php @author Llewellyn van der Merwe diff --git a/admin/views/payments/tmpl/default_head.php b/admin/views/payments/tmpl/default_head.php index e6a09bb..8cf9ff2 100644 --- a/admin/views/payments/tmpl/default_head.php +++ b/admin/views/payments/tmpl/default_head.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage default_head.php @author Llewellyn van der Merwe diff --git a/admin/views/payments/tmpl/default_toolbar.php b/admin/views/payments/tmpl/default_toolbar.php index bb588e2..34ae15a 100644 --- a/admin/views/payments/tmpl/default_toolbar.php +++ b/admin/views/payments/tmpl/default_toolbar.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage default_toolbar.php @author Llewellyn van der Merwe diff --git a/admin/views/payments/view.html.php b/admin/views/payments/view.html.php index 2c0618d..07e8587 100644 --- a/admin/views/payments/view.html.php +++ b/admin/views/payments/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 5 of this MVC + @build 27th April, 2016 + @created 6th March, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -46,39 +46,38 @@ class SupportgroupsViewPayments extends JViewLegacy SupportgroupsHelper::addSubmenu('payments'); } - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign data to the view - $this->items = $this->get('Items'); - $this->pagination = $this->get('Pagination'); - $this->state = $this->get('State'); - $this->user = JFactory::getUser(); - $this->listOrder = $this->escape($this->state->get('list.ordering')); - $this->listDirn = $this->escape($this->state->get('list.direction')); - $this->saveOrder = $this->listOrder == 'ordering'; - // get global action permissions - $this->canDo = SupportgroupsHelper::getActions('payment'); - $this->canEdit = $this->canDo->get('payment.edit'); - $this->canState = $this->canDo->get('payment.edit.state'); - $this->canCreate = $this->canDo->get('payment.create'); - $this->canDelete = $this->canDo->get('payment.delete'); - $this->canBatch = $this->canDo->get('core.batch'); + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('payment'); + $this->canEdit = $this->canDo->get('payment.edit'); + $this->canState = $this->canDo->get('payment.edit.state'); + $this->canCreate = $this->canDo->get('payment.create'); + $this->canDelete = $this->canDo->get('payment.delete'); + $this->canBatch = $this->canDo->get('core.batch'); // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); - // load the batch html - if ($this->canCreate && $this->canEdit && $this->canState) - { - $this->batchDisplay = JHtmlBatch_::render(); - } + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); } // Display the template @@ -95,96 +94,96 @@ class SupportgroupsViewPayments extends JViewLegacy { JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_PAYMENTS'), 'archive'); JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=payments'); - JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); if ($this->canCreate) - { + { JToolBarHelper::addNew('payment.add'); } - // Only load if there are items - if (SupportgroupsHelper::checkArray($this->items)) + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) { - if ($this->canEdit) - { - JToolBarHelper::editList('payment.edit'); - } + if ($this->canEdit) + { + JToolBarHelper::editList('payment.edit'); + } - if ($this->canState) - { - JToolBarHelper::publishList('payments.publish'); - JToolBarHelper::unpublishList('payments.unpublish'); - JToolBarHelper::archiveList('payments.archive'); + if ($this->canState) + { + JToolBarHelper::publishList('payments.publish'); + JToolBarHelper::unpublishList('payments.unpublish'); + JToolBarHelper::archiveList('payments.archive'); - if ($this->canDo->get('core.admin')) - { - JToolBarHelper::checkin('payments.checkin'); - } - } + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('payments.checkin'); + } + } - // Add a batch button - if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) - { - // Get the toolbar object instance - $bar = JToolBar::getInstance('toolbar'); - // set the batch button name - $title = JText::_('JTOOLBAR_BATCH'); - // Instantiate a new JLayoutFile instance and render the batch button - $layout = new JLayoutFile('joomla.toolbar.batch'); - // add the button to the page - $dhtml = $layout->render(array('title' => $title)); - $bar->appendButton('Custom', $dhtml, 'batch'); - } + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } - if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) - { - JToolbarHelper::deleteList('', 'payments.delete', 'JTOOLBAR_EMPTY_TRASH'); - } - elseif ($this->canState && $this->canDelete) - { - JToolbarHelper::trash('payments.trash'); - } + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'payments.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('payments.trash'); + } if ($this->canDo->get('core.export') && $this->canDo->get('payment.export')) { JToolBarHelper::custom('payments.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); } - } + } if ($this->canDo->get('core.import') && $this->canDo->get('payment.import')) { JToolBarHelper::custom('payments.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); } - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('payments'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('payments'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } - // add the options comp button - if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) - { - JToolBarHelper::preferences('com_supportgroups'); - } + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } - if ($this->canState) - { + if ($this->canState) + { JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_PUBLISHED'), 'filter_published', JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) ); - // only load if batch allowed - if ($this->canBatch) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), - 'batch[published]', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) - ); - } + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } } JHtmlSidebar::addFilter( @@ -196,11 +195,11 @@ class SupportgroupsViewPayments extends JViewLegacy if ($this->canBatch && $this->canCreate && $this->canEdit) { JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), - 'batch[access]', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') ); - } + } // Set Support Group Name Selection $this->support_groupNameOptions = JFormHelper::loadFieldType('Supportgroups')->getOptions(); @@ -254,12 +253,15 @@ class SupportgroupsViewPayments extends JViewLegacy */ protected function setDocument() { - $document = JFactory::getDocument(); - $document->setTitle(JText::_('COM_SUPPORTGROUPS_PAYMENTS')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/payments.css"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_PAYMENTS')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/payments.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -270,10 +272,10 @@ class SupportgroupsViewPayments extends JViewLegacy { if(strlen($var) > 50) { - // use the helper htmlEscape method instead and shorten the string + // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -292,7 +294,7 @@ class SupportgroupsViewPayments extends JViewLegacy 'a.amount' => JText::_('COM_SUPPORTGROUPS_PAYMENT_AMOUNT_LABEL'), 'a.id' => JText::_('JGRID_HEADING_ID') ); - } + } protected function getTheYearSelections() { @@ -317,15 +319,15 @@ class SupportgroupsViewPayments extends JViewLegacy // get model $model = $this->getModel(); $results = array_unique($results); - $filter = array(); + $_filter = array(); foreach ($results as $year) { // Translate the year selection $text = $model->selectionTranslation($year,'year'); // Now add the year and its text to the options array - $filter[] = JHtml::_('select.option', $year, JText::_($text)); + $_filter[] = JHtml::_('select.option', $year, JText::_($text)); } - return $filter; + return $_filter; } return false; } diff --git a/admin/views/region/submitbutton.js b/admin/views/region/submitbutton.js index f0b1c72..6d0512e 100644 --- a/admin/views/region/submitbutton.js +++ b/admin/views/region/submitbutton.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage submitbutton.js @author Llewellyn van der Merwe diff --git a/admin/views/region/tmpl/edit.php b/admin/views/region/tmpl/edit.php index 62ca1b1..8a139c8 100644 --- a/admin/views/region/tmpl/edit.php +++ b/admin/views/region/tmpl/edit.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage edit.php @author Llewellyn van der Merwe @@ -33,34 +33,43 @@ JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.keepalive'); $componentParams = JComponentHelper::getParams('com_supportgroups'); ?> - + +
+
diff --git a/admin/views/region/view.html.php b/admin/views/region/view.html.php index bf619ac..2444fd9 100644 --- a/admin/views/region/view.html.php +++ b/admin/views/region/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -40,41 +40,37 @@ class SupportgroupsViewRegion extends JViewLegacy */ public function display($tpl = null) { - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign the variables - $this->form = $this->get('Form'); - $this->item = $this->get('Item'); - $this->script = $this->get('Script'); - $this->state = $this->get('State'); - // get action permissions - $this->canDo = SupportgroupsHelper::getActions('region',$this->item); + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('region',$this->item); // get input $jinput = JFactory::getApplication()->input; - $this->ref = $jinput->get('ref', 0, 'word'); - $this->refid = $jinput->get('refid', 0, 'int'); - $this->referral = ''; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; if ($this->refid) - { - // return to the item that refered to this item - $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; - } - elseif($this->ref) - { - // return to the list view that refered to this item - $this->referral = '&ref='.(string)$this->ref; - } - - // Get Linked view data - $this->vvxlocations = $this->get('Vvxlocations'); + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } // Set the toolbar $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } // Display the template parent::display($tpl); @@ -167,7 +163,7 @@ class SupportgroupsViewRegion extends JViewLegacy } } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -181,7 +177,7 @@ class SupportgroupsViewRegion extends JViewLegacy // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -193,35 +189,14 @@ class SupportgroupsViewRegion extends JViewLegacy protected function setDocument() { $isNew = ($this->item->id < 1); - $document = JFactory::getDocument(); - $document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_REGION_NEW' : 'COM_SUPPORTGROUPS_REGION_EDIT')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/region.css"); - - // Add the CSS for Footable. - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.core.min.css'); - - // Use the Metro Style - if (!isset($this->fooTableStyle) || 0 == $this->fooTableStyle) - { - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.metro.min.css'); - } - // Use the Legacy Style. - elseif (isset($this->fooTableStyle) && 1 == $this->fooTableStyle) - { - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.standalone.min.css'); - } - - // Add the JavaScript for Footable - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.sort.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.filter.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.paginate.js'); - - $footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('.footable').footable(); }); jQuery('.nav-tabs').on('click', 'li', function() { setTimeout(tableFix, 10); }); }); function tableFix() { jQuery('.footable').trigger('footable_resize'); }"; - $document->addScriptDeclaration($footable); - - $document->addScript(JURI::root() . $this->script); - $document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/region/submitbutton.js"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_REGION_NEW' : 'COM_SUPPORTGROUPS_REGION_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/region.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/region/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); JText::script('view not acceptable. Error'); } } diff --git a/admin/views/regions/tmpl/default.php b/admin/views/regions/tmpl/default.php index 4a8c81f..f9812e2 100644 --- a/admin/views/regions/tmpl/default.php +++ b/admin/views/regions/tmpl/default.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage default.php @author Llewellyn van der Merwe diff --git a/admin/views/regions/tmpl/default_batch_body.php b/admin/views/regions/tmpl/default_batch_body.php index eec6e3f..218fd43 100644 --- a/admin/views/regions/tmpl/default_batch_body.php +++ b/admin/views/regions/tmpl/default_batch_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage default_batch_body.php @author Llewellyn van der Merwe diff --git a/admin/views/regions/tmpl/default_batch_footer.php b/admin/views/regions/tmpl/default_batch_footer.php index 3717774..8921f0e 100644 --- a/admin/views/regions/tmpl/default_batch_footer.php +++ b/admin/views/regions/tmpl/default_batch_footer.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage default_batch_footer.php @author Llewellyn van der Merwe @@ -28,7 +28,7 @@ defined('_JEXEC') or die('Restricted access'); ?> - diff --git a/admin/views/regions/tmpl/default_body.php b/admin/views/regions/tmpl/default_body.php index 9a6d6f5..59a6129 100644 --- a/admin/views/regions/tmpl/default_body.php +++ b/admin/views/regions/tmpl/default_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage default_body.php @author Llewellyn van der Merwe diff --git a/admin/views/regions/tmpl/default_foot.php b/admin/views/regions/tmpl/default_foot.php index a1195e8..43564eb 100644 --- a/admin/views/regions/tmpl/default_foot.php +++ b/admin/views/regions/tmpl/default_foot.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage default_foot.php @author Llewellyn van der Merwe diff --git a/admin/views/regions/tmpl/default_head.php b/admin/views/regions/tmpl/default_head.php index 2122aae..676a8fd 100644 --- a/admin/views/regions/tmpl/default_head.php +++ b/admin/views/regions/tmpl/default_head.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage default_head.php @author Llewellyn van der Merwe diff --git a/admin/views/regions/tmpl/default_toolbar.php b/admin/views/regions/tmpl/default_toolbar.php index 822bc66..33df26f 100644 --- a/admin/views/regions/tmpl/default_toolbar.php +++ b/admin/views/regions/tmpl/default_toolbar.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage default_toolbar.php @author Llewellyn van der Merwe diff --git a/admin/views/regions/view.html.php b/admin/views/regions/view.html.php index 57c0126..baf2e4a 100644 --- a/admin/views/regions/view.html.php +++ b/admin/views/regions/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 11 of this MVC + @build 25th October, 2017 + @created 15th May, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -46,39 +46,38 @@ class SupportgroupsViewRegions extends JViewLegacy SupportgroupsHelper::addSubmenu('regions'); } - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign data to the view - $this->items = $this->get('Items'); - $this->pagination = $this->get('Pagination'); - $this->state = $this->get('State'); - $this->user = JFactory::getUser(); - $this->listOrder = $this->escape($this->state->get('list.ordering')); - $this->listDirn = $this->escape($this->state->get('list.direction')); - $this->saveOrder = $this->listOrder == 'ordering'; - // get global action permissions - $this->canDo = SupportgroupsHelper::getActions('region'); - $this->canEdit = $this->canDo->get('region.edit'); - $this->canState = $this->canDo->get('region.edit.state'); - $this->canCreate = $this->canDo->get('region.create'); - $this->canDelete = $this->canDo->get('region.delete'); - $this->canBatch = $this->canDo->get('core.batch'); + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('region'); + $this->canEdit = $this->canDo->get('region.edit'); + $this->canState = $this->canDo->get('region.edit.state'); + $this->canCreate = $this->canDo->get('region.create'); + $this->canDelete = $this->canDo->get('region.delete'); + $this->canBatch = $this->canDo->get('core.batch'); // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); - // load the batch html - if ($this->canCreate && $this->canEdit && $this->canState) - { - $this->batchDisplay = JHtmlBatch_::render(); - } + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); } // Display the template @@ -95,96 +94,96 @@ class SupportgroupsViewRegions extends JViewLegacy { JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_REGIONS'), 'location'); JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=regions'); - JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); if ($this->canCreate) - { + { JToolBarHelper::addNew('region.add'); } - // Only load if there are items - if (SupportgroupsHelper::checkArray($this->items)) + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) { - if ($this->canEdit) - { - JToolBarHelper::editList('region.edit'); - } + if ($this->canEdit) + { + JToolBarHelper::editList('region.edit'); + } - if ($this->canState) - { - JToolBarHelper::publishList('regions.publish'); - JToolBarHelper::unpublishList('regions.unpublish'); - JToolBarHelper::archiveList('regions.archive'); + if ($this->canState) + { + JToolBarHelper::publishList('regions.publish'); + JToolBarHelper::unpublishList('regions.unpublish'); + JToolBarHelper::archiveList('regions.archive'); - if ($this->canDo->get('core.admin')) - { - JToolBarHelper::checkin('regions.checkin'); - } - } + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('regions.checkin'); + } + } - // Add a batch button - if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) - { - // Get the toolbar object instance - $bar = JToolBar::getInstance('toolbar'); - // set the batch button name - $title = JText::_('JTOOLBAR_BATCH'); - // Instantiate a new JLayoutFile instance and render the batch button - $layout = new JLayoutFile('joomla.toolbar.batch'); - // add the button to the page - $dhtml = $layout->render(array('title' => $title)); - $bar->appendButton('Custom', $dhtml, 'batch'); - } + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } - if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) - { - JToolbarHelper::deleteList('', 'regions.delete', 'JTOOLBAR_EMPTY_TRASH'); - } - elseif ($this->canState && $this->canDelete) - { - JToolbarHelper::trash('regions.trash'); - } + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'regions.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('regions.trash'); + } if ($this->canDo->get('core.export') && $this->canDo->get('region.export')) { JToolBarHelper::custom('regions.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); } - } + } if ($this->canDo->get('core.import') && $this->canDo->get('region.import')) { JToolBarHelper::custom('regions.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); } - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('regions'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('regions'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } - // add the options comp button - if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) - { - JToolBarHelper::preferences('com_supportgroups'); - } + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } - if ($this->canState) - { + if ($this->canState) + { JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_PUBLISHED'), 'filter_published', JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) ); - // only load if batch allowed - if ($this->canBatch) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), - 'batch[published]', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) - ); - } + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } } JHtmlSidebar::addFilter( @@ -196,11 +195,11 @@ class SupportgroupsViewRegions extends JViewLegacy if ($this->canBatch && $this->canCreate && $this->canEdit) { JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), - 'batch[access]', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') ); - } + } // Set Country Name Selection $this->countryNameOptions = JFormHelper::loadFieldType('Countries')->getOptions(); @@ -232,12 +231,15 @@ class SupportgroupsViewRegions extends JViewLegacy */ protected function setDocument() { - $document = JFactory::getDocument(); - $document->setTitle(JText::_('COM_SUPPORTGROUPS_REGIONS')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/regions.css"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_REGIONS')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/regions.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -248,10 +250,10 @@ class SupportgroupsViewRegions extends JViewLegacy { if(strlen($var) > 50) { - // use the helper htmlEscape method instead and shorten the string + // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -269,5 +271,5 @@ class SupportgroupsViewRegions extends JViewLegacy 'g.name' => JText::_('COM_SUPPORTGROUPS_REGION_COUNTRY_LABEL'), 'a.id' => JText::_('JGRID_HEADING_ID') ); - } + } } diff --git a/admin/views/support_group/submitbutton.js b/admin/views/support_group/submitbutton.js index bc017d7..1555d7f 100644 --- a/admin/views/support_group/submitbutton.js +++ b/admin/views/support_group/submitbutton.js @@ -9,9 +9,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage submitbutton.js @author Llewellyn van der Merwe diff --git a/admin/views/support_group/tmpl/edit.php b/admin/views/support_group/tmpl/edit.php index 4c2ce5e..80546d0 100644 --- a/admin/views/support_group/tmpl/edit.php +++ b/admin/views/support_group/tmpl/edit.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage edit.php @author Llewellyn van der Merwe @@ -33,10 +33,33 @@ JHtml::_('formbehavior.chosen', 'select'); JHtml::_('behavior.keepalive'); $componentParams = JComponentHelper::getParams('com_supportgroups'); ?> - + + +
+ + + +get('api_key', null); if ($api_key): ?> + + diff --git a/admin/views/support_group/view.html.php b/admin/views/support_group/view.html.php index 37066c8..cd4eaea 100644 --- a/admin/views/support_group/view.html.php +++ b/admin/views/support_group/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -40,41 +40,40 @@ class SupportgroupsViewSupport_group extends JViewLegacy */ public function display($tpl = null) { - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign the variables - $this->form = $this->get('Form'); - $this->item = $this->get('Item'); - $this->script = $this->get('Script'); - $this->state = $this->get('State'); - // get action permissions - $this->canDo = SupportgroupsHelper::getActions('support_group',$this->item); + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = SupportgroupsHelper::getActions('support_group',$this->item); // get input $jinput = JFactory::getApplication()->input; - $this->ref = $jinput->get('ref', 0, 'word'); - $this->refid = $jinput->get('refid', 0, 'int'); - $this->referral = ''; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; if ($this->refid) - { - // return to the item that refered to this item - $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; - } - elseif($this->ref) - { - // return to the list view that refered to this item - $this->referral = '&ref='.(string)$this->ref; - } + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } // Get Linked view data - $this->vvvpayments = $this->get('Vvvpayments'); + $this->vvvpayments = $this->get('Vvvpayments'); // Set the toolbar $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } // Display the template parent::display($tpl); @@ -167,7 +166,7 @@ class SupportgroupsViewSupport_group extends JViewLegacy } } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -181,7 +180,7 @@ class SupportgroupsViewSupport_group extends JViewLegacy // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true, 30); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -193,35 +192,26 @@ class SupportgroupsViewSupport_group extends JViewLegacy protected function setDocument() { $isNew = ($this->item->id < 1); - $document = JFactory::getDocument(); - $document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_SUPPORT_GROUP_NEW' : 'COM_SUPPORTGROUPS_SUPPORT_GROUP_EDIT')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/support_group.css"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_($isNew ? 'COM_SUPPORTGROUPS_SUPPORT_GROUP_NEW' : 'COM_SUPPORTGROUPS_SUPPORT_GROUP_EDIT')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/support_group.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + // Add Ajax Token + $this->document->addScriptDeclaration("var token = '".JSession::getFormToken()."';"); - // Add the CSS for Footable. - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.core.min.css'); + // Add the CSS for Footable + $this->document->addStyleSheet('https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css'); + $this->document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable-v3/css/footable.standalone.min.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + // Add the JavaScript for Footable (adding all funtions) + $this->document->addScript(JURI::root() .'media/com_supportgroups/footable-v3/js/footable.min.js', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); - // Use the Metro Style - if (!isset($this->fooTableStyle) || 0 == $this->fooTableStyle) - { - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.metro.min.css'); - } - // Use the Legacy Style. - elseif (isset($this->fooTableStyle) && 1 == $this->fooTableStyle) - { - $document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable/css/footable.standalone.min.css'); - } - - // Add the JavaScript for Footable - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.sort.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.filter.js'); - $document->addScript(JURI::root() .'media/com_supportgroups/footable/js/footable.paginate.js'); - - $footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('.footable').footable(); }); jQuery('.nav-tabs').on('click', 'li', function() { setTimeout(tableFix, 10); }); }); function tableFix() { jQuery('.footable').trigger('footable_resize'); }"; - $document->addScriptDeclaration($footable); + $footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('.footable').footable();});});"; + $this->document->addScriptDeclaration($footable); - $document->addScript(JURI::root() . $this->script); - $document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/support_group/submitbutton.js"); + $this->document->addScript(JURI::root() . $this->script, (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + $this->document->addScript(JURI::root() . "administrator/components/com_supportgroups/views/support_group/submitbutton.js", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); JText::script('view not acceptable. Error'); } } diff --git a/admin/views/support_groups/tmpl/default.php b/admin/views/support_groups/tmpl/default.php index 6b77d94..6dce0d5 100644 --- a/admin/views/support_groups/tmpl/default.php +++ b/admin/views/support_groups/tmpl/default.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default.php @author Llewellyn van der Merwe diff --git a/admin/views/support_groups/tmpl/default_batch_body.php b/admin/views/support_groups/tmpl/default_batch_body.php index 17759f1..3b04da5 100644 --- a/admin/views/support_groups/tmpl/default_batch_body.php +++ b/admin/views/support_groups/tmpl/default_batch_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default_batch_body.php @author Llewellyn van der Merwe diff --git a/admin/views/support_groups/tmpl/default_batch_footer.php b/admin/views/support_groups/tmpl/default_batch_footer.php index effba12..fc1773a 100644 --- a/admin/views/support_groups/tmpl/default_batch_footer.php +++ b/admin/views/support_groups/tmpl/default_batch_footer.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default_batch_footer.php @author Llewellyn van der Merwe @@ -28,7 +28,7 @@ defined('_JEXEC') or die('Restricted access'); ?> - diff --git a/admin/views/support_groups/tmpl/default_body.php b/admin/views/support_groups/tmpl/default_body.php index ebb38f5..74eff34 100644 --- a/admin/views/support_groups/tmpl/default_body.php +++ b/admin/views/support_groups/tmpl/default_body.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default_body.php @author Llewellyn van der Merwe @@ -90,21 +90,21 @@ $edit = "index.php?option=com_supportgroups&view=support_groups&task=support_gro escape($item->phone); ?> - user->authorise('location.edit', 'com_supportgroups.location.' . (int)$item->location)): ?> + user->authorise('area.edit', 'com_supportgroups.area.' . (int)$item->area)): ?> -
escape($item->location_name); ?>
+
escape($item->area_name); ?>
- user->authorise('clinic.edit', 'com_supportgroups.clinic.' . (int)$item->clinic)): ?> + user->authorise('facility.edit', 'com_supportgroups.facility.' . (int)$item->facility)): ?> -
escape($item->clinic_name); ?>
+
escape($item->facility_name); ?>
diff --git a/admin/views/support_groups/tmpl/default_foot.php b/admin/views/support_groups/tmpl/default_foot.php index 13fe521..00eeb5f 100644 --- a/admin/views/support_groups/tmpl/default_foot.php +++ b/admin/views/support_groups/tmpl/default_foot.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default_foot.php @author Llewellyn van der Merwe diff --git a/admin/views/support_groups/tmpl/default_head.php b/admin/views/support_groups/tmpl/default_head.php index c6c80cf..0d9e4a0 100644 --- a/admin/views/support_groups/tmpl/default_head.php +++ b/admin/views/support_groups/tmpl/default_head.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default_head.php @author Llewellyn van der Merwe @@ -50,10 +50,10 @@ defined('_JEXEC') or die('Restricted access'); listDirn, $this->listOrder); ?> - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> listDirn, $this->listOrder); ?> diff --git a/admin/views/support_groups/tmpl/default_toolbar.php b/admin/views/support_groups/tmpl/default_toolbar.php index e310856..c97c2a0 100644 --- a/admin/views/support_groups/tmpl/default_toolbar.php +++ b/admin/views/support_groups/tmpl/default_toolbar.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage default_toolbar.php @author Llewellyn van der Merwe diff --git a/admin/views/support_groups/view.html.php b/admin/views/support_groups/view.html.php index 6685119..c0e7e65 100644 --- a/admin/views/support_groups/view.html.php +++ b/admin/views/support_groups/view.html.php @@ -10,9 +10,9 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 36 of this MVC + @build 25th October, 2017 + @created 4th March, 2016 @package Support Groups @subpackage view.html.php @author Llewellyn van der Merwe @@ -46,39 +46,38 @@ class SupportgroupsViewSupport_groups extends JViewLegacy SupportgroupsHelper::addSubmenu('support_groups'); } - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - } - // Assign data to the view - $this->items = $this->get('Items'); - $this->pagination = $this->get('Pagination'); - $this->state = $this->get('State'); - $this->user = JFactory::getUser(); - $this->listOrder = $this->escape($this->state->get('list.ordering')); - $this->listDirn = $this->escape($this->state->get('list.direction')); - $this->saveOrder = $this->listOrder == 'ordering'; - // get global action permissions - $this->canDo = SupportgroupsHelper::getActions('support_group'); - $this->canEdit = $this->canDo->get('support_group.edit'); - $this->canState = $this->canDo->get('support_group.edit.state'); - $this->canCreate = $this->canDo->get('support_group.create'); - $this->canDelete = $this->canDo->get('support_group.delete'); - $this->canBatch = $this->canDo->get('core.batch'); + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = SupportgroupsHelper::getActions('support_group'); + $this->canEdit = $this->canDo->get('support_group.edit'); + $this->canState = $this->canDo->get('support_group.edit.state'); + $this->canCreate = $this->canDo->get('support_group.create'); + $this->canDelete = $this->canDo->get('support_group.delete'); + $this->canBatch = $this->canDo->get('core.batch'); // We don't need toolbar in the modal window. if ($this->getLayout() !== 'modal') { $this->addToolbar(); $this->sidebar = JHtmlSidebar::render(); - // load the batch html - if ($this->canCreate && $this->canEdit && $this->canState) - { - $this->batchDisplay = JHtmlBatch_::render(); - } + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); } // Display the template @@ -95,96 +94,101 @@ class SupportgroupsViewSupport_groups extends JViewLegacy { JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUPS'), 'eye-open'); JHtmlSidebar::setAction('index.php?option=com_supportgroups&view=support_groups'); - JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); if ($this->canCreate) - { + { JToolBarHelper::addNew('support_group.add'); } - // Only load if there are items - if (SupportgroupsHelper::checkArray($this->items)) + // Only load if there are items + if (SupportgroupsHelper::checkArray($this->items)) { - if ($this->canEdit) - { - JToolBarHelper::editList('support_group.edit'); - } + if ($this->canEdit) + { + JToolBarHelper::editList('support_group.edit'); + } - if ($this->canState) - { - JToolBarHelper::publishList('support_groups.publish'); - JToolBarHelper::unpublishList('support_groups.unpublish'); - JToolBarHelper::archiveList('support_groups.archive'); + if ($this->canState) + { + JToolBarHelper::publishList('support_groups.publish'); + JToolBarHelper::unpublishList('support_groups.unpublish'); + JToolBarHelper::archiveList('support_groups.archive'); - if ($this->canDo->get('core.admin')) - { - JToolBarHelper::checkin('support_groups.checkin'); - } - } + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('support_groups.checkin'); + } + } - // Add a batch button - if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) - { - // Get the toolbar object instance - $bar = JToolBar::getInstance('toolbar'); - // set the batch button name - $title = JText::_('JTOOLBAR_BATCH'); - // Instantiate a new JLayoutFile instance and render the batch button - $layout = new JLayoutFile('joomla.toolbar.batch'); - // add the button to the page - $dhtml = $layout->render(array('title' => $title)); - $bar->appendButton('Custom', $dhtml, 'batch'); - } + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + if ($this->user->authorise('support_group.smart_export', 'com_supportgroups')) + { + // add Smart Export button. + JToolBarHelper::custom('support_groups.smartExport', 'download', '', 'COM_SUPPORTGROUPS_SMART_EXPORT', false); + } - if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) - { - JToolbarHelper::deleteList('', 'support_groups.delete', 'JTOOLBAR_EMPTY_TRASH'); - } - elseif ($this->canState && $this->canDelete) - { - JToolbarHelper::trash('support_groups.trash'); - } + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'support_groups.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('support_groups.trash'); + } if ($this->canDo->get('core.export') && $this->canDo->get('support_group.export')) { JToolBarHelper::custom('support_groups.exportData', 'download', '', 'COM_SUPPORTGROUPS_EXPORT_DATA', true); } - } + } if ($this->canDo->get('core.import') && $this->canDo->get('support_group.import')) { JToolBarHelper::custom('support_groups.importData', 'upload', '', 'COM_SUPPORTGROUPS_IMPORT_DATA', false); } - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('support_groups'); - if (SupportgroupsHelper::checkString($help_url)) - { - JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('support_groups'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } - // add the options comp button - if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) - { - JToolBarHelper::preferences('com_supportgroups'); - } + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_supportgroups'); + } - if ($this->canState) - { + if ($this->canState) + { JHtmlSidebar::addFilter( JText::_('JOPTION_SELECT_PUBLISHED'), 'filter_published', JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) ); - // only load if batch allowed - if ($this->canBatch) - { - JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), - 'batch[published]', - JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) - ); - } + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } } JHtmlSidebar::addFilter( @@ -196,52 +200,52 @@ class SupportgroupsViewSupport_groups extends JViewLegacy if ($this->canBatch && $this->canCreate && $this->canEdit) { JHtmlBatch_::addListSelection( - JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), - 'batch[access]', - JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + JText::_('COM_SUPPORTGROUPS_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') ); - } + } - // Set Location Name Selection - $this->locationNameOptions = JFormHelper::loadFieldType('Locations')->getOptions(); - if ($this->locationNameOptions) + // Set Area Name Selection + $this->areaNameOptions = JFormHelper::loadFieldType('Areas')->getOptions(); + if ($this->areaNameOptions) { - // Location Name Filter + // Area Name Filter JHtmlSidebar::addFilter( - '- Select '.JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_LOCATION_LABEL').' -', - 'filter_location', - JHtml::_('select.options', $this->locationNameOptions, 'value', 'text', $this->state->get('filter.location')) + '- Select '.JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_AREA_LABEL').' -', + 'filter_area', + JHtml::_('select.options', $this->areaNameOptions, 'value', 'text', $this->state->get('filter.area')) ); if ($this->canBatch && $this->canCreate && $this->canEdit) { - // Location Name Batch Selection + // Area Name Batch Selection JHtmlBatch_::addListSelection( - '- Keep Original '.JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_LOCATION_LABEL').' -', - 'batch[location]', - JHtml::_('select.options', $this->locationNameOptions, 'value', 'text') + '- Keep Original '.JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_AREA_LABEL').' -', + 'batch[area]', + JHtml::_('select.options', $this->areaNameOptions, 'value', 'text') ); } } - // Set Clinic Name Selection - $this->clinicNameOptions = JFormHelper::loadFieldType('Clinics')->getOptions(); - if ($this->clinicNameOptions) + // Set Facility Name Selection + $this->facilityNameOptions = JFormHelper::loadFieldType('Facilities')->getOptions(); + if ($this->facilityNameOptions) { - // Clinic Name Filter + // Facility Name Filter JHtmlSidebar::addFilter( - '- Select '.JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_CLINIC_LABEL').' -', - 'filter_clinic', - JHtml::_('select.options', $this->clinicNameOptions, 'value', 'text', $this->state->get('filter.clinic')) + '- Select '.JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_FACILITY_LABEL').' -', + 'filter_facility', + JHtml::_('select.options', $this->facilityNameOptions, 'value', 'text', $this->state->get('filter.facility')) ); if ($this->canBatch && $this->canCreate && $this->canEdit) { - // Clinic Name Batch Selection + // Facility Name Batch Selection JHtmlBatch_::addListSelection( - '- Keep Original '.JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_CLINIC_LABEL').' -', - 'batch[clinic]', - JHtml::_('select.options', $this->clinicNameOptions, 'value', 'text') + '- Keep Original '.JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_FACILITY_LABEL').' -', + 'batch[facility]', + JHtml::_('select.options', $this->facilityNameOptions, 'value', 'text') ); } } @@ -254,12 +258,15 @@ class SupportgroupsViewSupport_groups extends JViewLegacy */ protected function setDocument() { - $document = JFactory::getDocument(); - $document->setTitle(JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUPS')); - $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/support_groups.css"); + if (!isset($this->document)) + { + $this->document = JFactory::getDocument(); + } + $this->document->setTitle(JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUPS')); + $this->document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/support_groups.css", (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); } - /** + /** * Escapes a value for output in a view script. * * @param mixed $var The output to escape. @@ -270,10 +277,10 @@ class SupportgroupsViewSupport_groups extends JViewLegacy { if(strlen($var) > 50) { - // use the helper htmlEscape method instead and shorten the string + // use the helper htmlEscape method instead and shorten the string return SupportgroupsHelper::htmlEscape($var, $this->_charset, true); } - // use the helper htmlEscape method instead. + // use the helper htmlEscape method instead. return SupportgroupsHelper::htmlEscape($var, $this->_charset); } @@ -289,11 +296,11 @@ class SupportgroupsViewSupport_groups extends JViewLegacy 'a.published' => JText::_('JSTATUS'), 'a.name' => JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_NAME_LABEL'), 'a.phone' => JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_PHONE_LABEL'), - 'g.name' => JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_LOCATION_LABEL'), - 'h.name' => JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_CLINIC_LABEL'), + 'g.name' => JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_AREA_LABEL'), + 'h.name' => JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_FACILITY_LABEL'), 'a.male' => JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_MALE_LABEL'), 'a.female' => JText::_('COM_SUPPORTGROUPS_SUPPORT_GROUP_FEMALE_LABEL'), 'a.id' => JText::_('JGRID_HEADING_ID') ); - } + } } diff --git a/admin/views/supportgroups/tmpl/default.php b/admin/views/supportgroups/tmpl/default.php index 34da695..e19d857 100644 --- a/admin/views/supportgroups/tmpl/default.php +++ b/admin/views/supportgroups/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage default.php @@ -30,18 +30,52 @@ JHtml::_('behavior.tooltip'); ?>
-
- 'main')); ?> - - loadTemplate('main');?> - - -
-
- 'vdm')); ?> - - loadTemplate('vdm');?> - - +
+ 'cpanel')); ?> + + +
+
+ 'main')); ?> + + loadTemplate('main');?> + + +
+
+ 'vdm')); ?> + + loadTemplate('vdm');?> + + +
+
+ + + +
+
+ 'vast_development_method_one')); ?> + + loadTemplate('vast_development_method_notice_board');?> + + +
+
+ + + +
+
+ 'readme_one')); ?> + + loadTemplate('readme_information');?> + + +
+
+ + +
\ No newline at end of file diff --git a/admin/views/supportgroups/tmpl/default_main.php b/admin/views/supportgroups/tmpl/default_main.php index 36894a7..73c4e8e 100644 --- a/admin/views/supportgroups/tmpl/default_main.php +++ b/admin/views/supportgroups/tmpl/default_main.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage default_main.php @@ -27,16 +27,18 @@ defined('_JEXEC') or die('Restricted access'); ?> -icons['main'])) :?> +icons['main']) && is_array($this->icons['main'])) :?> icons['main'] as $icon): ?> - - -
+ + +
+ +

\ No newline at end of file diff --git a/admin/views/clinics/tmpl/default_foot.php b/admin/views/supportgroups/tmpl/default_readme_information.php similarity index 90% rename from admin/views/clinics/tmpl/default_foot.php rename to admin/views/supportgroups/tmpl/default_readme_information.php index a1195e8..5be2d00 100644 --- a/admin/views/clinics/tmpl/default_foot.php +++ b/admin/views/supportgroups/tmpl/default_readme_information.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups - @subpackage default_foot.php + @subpackage default_readme_information.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -26,7 +26,5 @@ // No direct access to this file defined('_JEXEC') or die('Restricted access'); -?> - - pagination->getListFooter(); ?> - \ No newline at end of file +?> +readme; ?> diff --git a/admin/views/locations/tmpl/default_foot.php b/admin/views/supportgroups/tmpl/default_vast_development_method_notice_board.php similarity index 90% rename from admin/views/locations/tmpl/default_foot.php rename to admin/views/supportgroups/tmpl/default_vast_development_method_notice_board.php index a1195e8..fca574a 100644 --- a/admin/views/locations/tmpl/default_foot.php +++ b/admin/views/supportgroups/tmpl/default_vast_development_method_notice_board.php @@ -10,11 +10,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups - @subpackage default_foot.php + @subpackage default_vast_development_method_notice_board.php @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html @@ -26,7 +26,5 @@ // No direct access to this file defined('_JEXEC') or die('Restricted access'); -?> - - pagination->getListFooter(); ?> - \ No newline at end of file +?> +noticeboard; ?> diff --git a/admin/views/supportgroups/tmpl/default_vdm.php b/admin/views/supportgroups/tmpl/default_vdm.php index 606af34..4c532ac 100644 --- a/admin/views/supportgroups/tmpl/default_vdm.php +++ b/admin/views/supportgroups/tmpl/default_vdm.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage default_vdm.php @@ -26,30 +26,27 @@ // No direct access to this file defined('_JEXEC') or die('Restricted access'); -$manifest = SupportgroupsHelper::manifest(); -JHtml::_('bootstrap.loadCss'); - ?> -<?php echo JText::_('COM_SUPPORTGROUPS'); ?> +<?php echo JText::_('COM_SUPPORTGROUPS'); ?>
contributors)): ?> -contributors) > 1): ?> -

- -

- -
    - contributors as $contributor): ?> -
  • :
  • - -
-
+ contributors) > 1): ?> +

+ +

+ +
    + contributors as $contributor): ?> +
  • :
  • + +
+
\ No newline at end of file diff --git a/admin/views/supportgroups/view.html.php b/admin/views/supportgroups/view.html.php index 699472b..deb7d5a 100644 --- a/admin/views/supportgroups/view.html.php +++ b/admin/views/supportgroups/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage view.html.php @@ -40,18 +40,23 @@ class SupportgroupsViewSupportgroups extends JViewLegacy */ function display($tpl = null) { - // Check for errors. - if (count($errors = $this->get('Errors'))) - { - JError::raiseError(500, implode('
', $errors)); - return false; - }; // Assign data to the view $this->icons = $this->get('Icons'); - $this->contributors = SupportgroupsHelper::getContributors(); - + $this->contributors = SupportgroupsHelper::getContributors(); + $this->noticeboard = $this->get('Noticeboard'); + $this->readme = $this->get('Readme'); + + // get the manifest details of the component + $this->manifest = SupportgroupsHelper::manifest(); + // Set the toolbar $this->addToolBar(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } // Display the template parent::display($tpl); @@ -68,15 +73,15 @@ class SupportgroupsViewSupportgroups extends JViewLegacy $canDo = SupportgroupsHelper::getActions('supportgroups'); JToolBarHelper::title(JText::_('COM_SUPPORTGROUPS_DASHBOARD'), 'grid-2'); - // set help url for this view if found - $help_url = SupportgroupsHelper::getHelpUrl('supportgroups'); - if (SupportgroupsHelper::checkString($help_url)) - { + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('supportgroups'); + if (SupportgroupsHelper::checkString($help_url)) + { JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); - } + } if ($canDo->get('core.admin') || $canDo->get('core.options')) - { + { JToolBarHelper::preferences('com_supportgroups'); } } @@ -84,15 +89,19 @@ class SupportgroupsViewSupportgroups extends JViewLegacy /** * Method to set up the document properties * - * * @return void */ protected function setDocument() { $document = JFactory::getDocument(); - + + // add dashboard style sheets $document->addStyleSheet(JURI::root() . "administrator/components/com_supportgroups/assets/css/dashboard.css"); - + + // set page title $document->setTitle(JText::_('COM_SUPPORTGROUPS_DASHBOARD')); + + // add manifest to page JavaScript + $document->addScriptDeclaration("var manifest = jQuery.parseJSON('" . json_encode($this->manifest) . "');", "text/javascript"); } } diff --git a/media/footable-v3/LICENSE-GPLv3 b/media/footable-v3/LICENSE-GPLv3 new file mode 100644 index 0000000..0daf0bb --- /dev/null +++ b/media/footable-v3/LICENSE-GPLv3 @@ -0,0 +1,14 @@ +Copyright (c) 2015 Steven Usher & Brad Vincent + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . \ No newline at end of file diff --git a/media/footable-v3/css/footable.bootstrap.css b/media/footable-v3/css/footable.bootstrap.css new file mode 100644 index 0000000..56b4fe3 --- /dev/null +++ b/media/footable-v3/css/footable.bootstrap.css @@ -0,0 +1,266 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.0.6 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +table.footable, +table.footable-details { + position: relative; + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} +table.footable-details { + margin-bottom: 0; +} +table > tbody > tr > td > span.footable-toggle { + margin-right: 8px; + opacity: 0.3; +} +table > tbody > tr > td > span.footable-toggle.last-column { + margin-left: 8px; + float: right; +} +table.table-condensed > tbody > tr > td > span.footable-toggle { + margin-right: 5px; +} +table.footable-details > tbody > tr > th:nth-child(1) { + min-width: 40px; + width: 120px; +} +table.footable-details > tbody > tr > td:nth-child(2) { + word-break: break-all; +} + +table.footable-details > thead > tr:first-child > th, +table.footable-details > thead > tr:first-child > td, +table.footable-details > tbody > tr:first-child > th, +table.footable-details > tbody > tr:first-child > td, +table.footable-details > tfoot > tr:first-child > th, +table.footable-details > tfoot > tr:first-child > td { + border-top-width: 0; +} +table.footable-details.table-bordered > thead > tr:first-child > th, +table.footable-details.table-bordered > thead > tr:first-child > td, +table.footable-details.table-bordered > tbody > tr:first-child > th, +table.footable-details.table-bordered > tbody > tr:first-child > td, +table.footable-details.table-bordered > tfoot > tr:first-child > th, +table.footable-details.table-bordered > tfoot > tr:first-child > td { + border-top-width: 1px; +} + +div.footable-loader { + vertical-align: middle; + text-align: center; + height: 300px; + position: relative; +} +div.footable-loader > span.fooicon { + display: inline-block; + opacity: 0.3; + font-size: 30px; + line-height: 32px; + width: 32px; + height: 32px; + margin-top: -16px; + margin-left: -16px; + position: absolute; + top: 50%; + left: 50%; + -webkit-animation: fooicon-spin-r 2s infinite linear; + animation: fooicon-spin-r 2s infinite linear; +} +table.footable > tbody > tr.footable-empty > td { + vertical-align: middle; + text-align: center; + font-size: 30px; +} +table.footable > tbody > tr > td, +table.footable > tbody > tr > th { + display: none; +} +table.footable > tbody > tr.footable-empty > td, +table.footable > tbody > tr.footable-empty > th, +table.footable > tbody > tr.footable-detail-row > td, +table.footable > tbody > tr.footable-detail-row > th { + display: table-cell; +} +@-webkit-keyframes fooicon-spin-r { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fooicon-spin-r { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.fooicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings' !important; + font-style: normal; + font-weight: 400; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.fooicon:before, +.fooicon:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.fooicon-loader:before { + content: "\e030"; +} +.fooicon-plus:before { + content: "\2b"; +} +.fooicon-minus:before { + content: "\2212"; +} +.fooicon-search:before { + content: "\e003"; +} +.fooicon-remove:before { + content: "\e014"; +} +.fooicon-sort:before { + content: "\e150"; +} +.fooicon-sort-asc:before { + content: "\e155"; +} +.fooicon-sort-desc:before { + content: "\e156"; +} +.fooicon-pencil:before { + content: "\270f"; +} +.fooicon-trash:before { + content: "\e020"; +} +.fooicon-eye-close:before { + content: "\e106"; +} +.fooicon-flash:before { + content: "\e162"; +} +.fooicon-cog:before { + content: "\e019"; +} +table.footable > thead > tr.footable-filtering > th { + border-bottom-width: 1px; + font-weight: normal; +} +table.footable > thead > tr.footable-filtering > th, +table.footable.footable-filtering-right > thead > tr.footable-filtering > th { + text-align: right; +} +table.footable.footable-filtering-left > thead > tr.footable-filtering > th { + text-align: left; +} +table.footable.footable-filtering-center > thead > tr.footable-filtering > th { + text-align: center; +} +table.footable > thead > tr.footable-filtering > th div.form-group { + margin-bottom: 0; +} +table.footable > thead > tr.footable-filtering > th div.form-group+div.form-group { + margin-top: 5px; +} +table.footable > thead > tr.footable-filtering > th div.input-group { + width: 100%; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox { + margin: 0; + display: block; + position: relative; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox > label { + display: block; + padding-left: 20px; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox input[type="checkbox"] { + position: absolute; + margin-left: -20px; +} +@media (min-width: 768px) { + table.footable > thead > tr.footable-filtering > th div.input-group { + width: auto; + } + table.footable > thead > tr.footable-filtering > th div.form-group { + margin-left: 2px; + margin-right: 2px; + } + table.footable > thead > tr.footable-filtering > th div.form-group+div.form-group { + margin-top: 0; + } +} +td.footable-sortable, +th.footable-sortable { + position: relative; + padding-right: 30px; + cursor: pointer; +} +td.footable-sortable > span.fooicon, +th.footable-sortable > span.fooicon { + position: absolute; + right: 6px; + top: 50%; + margin-top: -7px; + opacity: 0; + transition: opacity 0.3s ease-in; +} +td.footable-sortable:hover > span.fooicon, +th.footable-sortable:hover > span.fooicon { + opacity: 1; +} +td.footable-sortable.footable-asc > span.fooicon, +th.footable-sortable.footable-asc > span.fooicon, +td.footable-sortable.footable-desc > span.fooicon, +th.footable-sortable.footable-desc > span.fooicon { + opacity: 1; +} +table.footable > tfoot > tr.footable-paging > td > ul.pagination { + margin: 10px 0 0 0; +} +table.footable > tfoot > tr.footable-paging > td > span.label { + display: inline-block; + margin: 0 0 10px 0; + padding: 4px 10px; +} +table.footable > tfoot > tr.footable-paging > td, +table.footable-paging-center > tfoot > tr.footable-paging > td { + text-align: center; +} +table.footable-paging-left > tfoot > tr.footable-paging > td { + text-align: left; +} +table.footable-paging-right > tfoot > tr.footable-paging > td { + text-align: right; +} +ul.pagination > li.footable-page { + display: none; +} +ul.pagination > li.footable-page.visible { + display: inline; +} \ No newline at end of file diff --git a/media/footable-v3/css/footable.bootstrap.min.css b/media/footable-v3/css/footable.bootstrap.min.css new file mode 100644 index 0000000..c297e48 --- /dev/null +++ b/media/footable-v3/css/footable.bootstrap.min.css @@ -0,0 +1 @@ +table.footable-details,table.footable>thead>tr.footable-filtering>th div.form-group{margin-bottom:0}table.footable,table.footable-details{position:relative;width:100%;border-spacing:0;border-collapse:collapse}table>tbody>tr>td>span.footable-toggle{margin-right:8px;opacity:.3}table>tbody>tr>td>span.footable-toggle.last-column{margin-left:8px;float:right}table.table-condensed>tbody>tr>td>span.footable-toggle{margin-right:5px}table.footable-details>tbody>tr>th:nth-child(1){min-width:40px;width:120px}table.footable-details>tbody>tr>td:nth-child(2){word-break:break-all}table.footable-details>tbody>tr:first-child>td,table.footable-details>tbody>tr:first-child>th,table.footable-details>tfoot>tr:first-child>td,table.footable-details>tfoot>tr:first-child>th,table.footable-details>thead>tr:first-child>td,table.footable-details>thead>tr:first-child>th{border-top-width:0}table.footable-details.table-bordered>tbody>tr:first-child>td,table.footable-details.table-bordered>tbody>tr:first-child>th,table.footable-details.table-bordered>tfoot>tr:first-child>td,table.footable-details.table-bordered>tfoot>tr:first-child>th,table.footable-details.table-bordered>thead>tr:first-child>td,table.footable-details.table-bordered>thead>tr:first-child>th{border-top-width:1px}div.footable-loader{vertical-align:middle;text-align:center;height:300px;position:relative}div.footable-loader>span.fooicon{display:inline-block;opacity:.3;font-size:30px;line-height:32px;width:32px;height:32px;margin-top:-16px;margin-left:-16px;position:absolute;top:50%;left:50%;-webkit-animation:fooicon-spin-r 2s infinite linear;animation:fooicon-spin-r 2s infinite linear}table.footable>tbody>tr.footable-empty>td{vertical-align:middle;text-align:center;font-size:30px}table.footable>tbody>tr>td,table.footable>tbody>tr>th{display:none}table.footable>tbody>tr.footable-detail-row>td,table.footable>tbody>tr.footable-detail-row>th,table.footable>tbody>tr.footable-empty>td,table.footable>tbody>tr.footable-empty>th{display:table-cell}@-webkit-keyframes fooicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fooicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fooicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings'!important;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fooicon:after,.fooicon:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fooicon-loader:before{content:"\e030"}.fooicon-plus:before{content:"\2b"}.fooicon-minus:before{content:"\2212"}.fooicon-search:before{content:"\e003"}.fooicon-remove:before{content:"\e014"}.fooicon-sort:before{content:"\e150"}.fooicon-sort-asc:before{content:"\e155"}.fooicon-sort-desc:before{content:"\e156"}.fooicon-pencil:before{content:"\270f"}.fooicon-trash:before{content:"\e020"}.fooicon-eye-close:before{content:"\e106"}.fooicon-flash:before{content:"\e162"}.fooicon-cog:before{content:"\e019"}table.footable>thead>tr.footable-filtering>th{border-bottom-width:1px;font-weight:400}table.footable.footable-filtering-right>thead>tr.footable-filtering>th,table.footable>thead>tr.footable-filtering>th{text-align:right}table.footable.footable-filtering-left>thead>tr.footable-filtering>th{text-align:left}table.footable-paging-center>tfoot>tr.footable-paging>td,table.footable.footable-filtering-center>thead>tr.footable-filtering>th,table.footable>tfoot>tr.footable-paging>td{text-align:center}table.footable>thead>tr.footable-filtering>th div.form-group+div.form-group{margin-top:5px}table.footable>thead>tr.footable-filtering>th div.input-group{width:100%}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox{margin:0;display:block;position:relative}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox>label{display:block;padding-left:20px}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox input[type=checkbox]{position:absolute;margin-left:-20px}@media (min-width:768px){table.footable>thead>tr.footable-filtering>th div.input-group{width:auto}table.footable>thead>tr.footable-filtering>th div.form-group{margin-left:2px;margin-right:2px}table.footable>thead>tr.footable-filtering>th div.form-group+div.form-group{margin-top:0}}td.footable-sortable,th.footable-sortable{position:relative;padding-right:30px;cursor:pointer}td.footable-sortable>span.fooicon,th.footable-sortable>span.fooicon{position:absolute;right:6px;top:50%;margin-top:-7px;opacity:0;transition:opacity .3s ease-in}td.footable-sortable.footable-asc>span.fooicon,td.footable-sortable.footable-desc>span.fooicon,td.footable-sortable:hover>span.fooicon,th.footable-sortable.footable-asc>span.fooicon,th.footable-sortable.footable-desc>span.fooicon,th.footable-sortable:hover>span.fooicon{opacity:1}table.footable>tfoot>tr.footable-paging>td>ul.pagination{margin:10px 0 0}table.footable>tfoot>tr.footable-paging>td>span.label{display:inline-block;margin:0 0 10px;padding:4px 10px}table.footable-paging-left>tfoot>tr.footable-paging>td{text-align:left}table.footable-paging-right>tfoot>tr.footable-paging>td{text-align:right}ul.pagination>li.footable-page{display:none}ul.pagination>li.footable-page.visible{display:inline} \ No newline at end of file diff --git a/media/footable-v3/css/footable.core.bootstrap.css b/media/footable-v3/css/footable.core.bootstrap.css new file mode 100644 index 0000000..30be581 --- /dev/null +++ b/media/footable-v3/css/footable.core.bootstrap.css @@ -0,0 +1,175 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +table.footable, +table.footable-details { + position: relative; + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} +table.footable-details { + margin-bottom: 0; +} +table.footable-hide-fouc { + display: none; +} +table > tbody > tr > td > span.footable-toggle { + margin-right: 8px; + opacity: 0.3; +} +table > tbody > tr > td > span.footable-toggle.last-column { + margin-left: 8px; + float: right; +} +table.table-condensed > tbody > tr > td > span.footable-toggle { + margin-right: 5px; +} +table.footable-details > tbody > tr > th:nth-child(1) { + min-width: 40px; + width: 120px; +} +table.footable-details > tbody > tr > td:nth-child(2) { + word-break: break-all; +} + +table.footable-details > thead > tr:first-child > th, +table.footable-details > thead > tr:first-child > td, +table.footable-details > tbody > tr:first-child > th, +table.footable-details > tbody > tr:first-child > td, +table.footable-details > tfoot > tr:first-child > th, +table.footable-details > tfoot > tr:first-child > td { + border-top-width: 0; +} +table.footable-details.table-bordered > thead > tr:first-child > th, +table.footable-details.table-bordered > thead > tr:first-child > td, +table.footable-details.table-bordered > tbody > tr:first-child > th, +table.footable-details.table-bordered > tbody > tr:first-child > td, +table.footable-details.table-bordered > tfoot > tr:first-child > th, +table.footable-details.table-bordered > tfoot > tr:first-child > td { + border-top-width: 1px; +} + +div.footable-loader { + vertical-align: middle; + text-align: center; + height: 300px; + position: relative; +} +div.footable-loader > span.fooicon { + display: inline-block; + opacity: 0.3; + font-size: 30px; + line-height: 32px; + width: 32px; + height: 32px; + margin-top: -16px; + margin-left: -16px; + position: absolute; + top: 50%; + left: 50%; + -webkit-animation: fooicon-spin-r 2s infinite linear; + animation: fooicon-spin-r 2s infinite linear; +} +table.footable > tbody > tr.footable-empty > td { + vertical-align: middle; + text-align: center; + font-size: 30px; +} +table.footable > tbody > tr > td, +table.footable > tbody > tr > th { + display: none; +} +table.footable > tbody > tr.footable-empty > td, +table.footable > tbody > tr.footable-empty > th, +table.footable > tbody > tr.footable-detail-row > td, +table.footable > tbody > tr.footable-detail-row > th { + display: table-cell; +} +@-webkit-keyframes fooicon-spin-r { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fooicon-spin-r { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.fooicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings' !important; + font-style: normal; + font-weight: 400; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.fooicon:before, +.fooicon:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.fooicon-loader:before { + content: "\e030"; +} +.fooicon-plus:before { + content: "\2b"; +} +.fooicon-minus:before { + content: "\2212"; +} +.fooicon-search:before { + content: "\e003"; +} +.fooicon-remove:before { + content: "\e014"; +} +.fooicon-sort:before { + content: "\e150"; +} +.fooicon-sort-asc:before { + content: "\e155"; +} +.fooicon-sort-desc:before { + content: "\e156"; +} +.fooicon-pencil:before { + content: "\270f"; +} +.fooicon-trash:before { + content: "\e020"; +} +.fooicon-eye-close:before { + content: "\e106"; +} +.fooicon-flash:before { + content: "\e162"; +} +.fooicon-cog:before { + content: "\e019"; +} +.fooicon-stats:before { + content: "\e185"; +} diff --git a/media/footable-v3/css/footable.core.bootstrap.min.css b/media/footable-v3/css/footable.core.bootstrap.min.css new file mode 100644 index 0000000..771e966 --- /dev/null +++ b/media/footable-v3/css/footable.core.bootstrap.min.css @@ -0,0 +1 @@ +table.footable,table.footable-details{position:relative;width:100%;border-spacing:0;border-collapse:collapse}table.footable-details{margin-bottom:0}table.footable-hide-fouc{display:none}table>tbody>tr>td>span.footable-toggle{margin-right:8px;opacity:.3}table>tbody>tr>td>span.footable-toggle.last-column{margin-left:8px;float:right}table.table-condensed>tbody>tr>td>span.footable-toggle{margin-right:5px}table.footable-details>tbody>tr>th:nth-child(1){min-width:40px;width:120px}table.footable-details>tbody>tr>td:nth-child(2){word-break:break-all}table.footable-details>tbody>tr:first-child>td,table.footable-details>tbody>tr:first-child>th,table.footable-details>tfoot>tr:first-child>td,table.footable-details>tfoot>tr:first-child>th,table.footable-details>thead>tr:first-child>td,table.footable-details>thead>tr:first-child>th{border-top-width:0}table.footable-details.table-bordered>tbody>tr:first-child>td,table.footable-details.table-bordered>tbody>tr:first-child>th,table.footable-details.table-bordered>tfoot>tr:first-child>td,table.footable-details.table-bordered>tfoot>tr:first-child>th,table.footable-details.table-bordered>thead>tr:first-child>td,table.footable-details.table-bordered>thead>tr:first-child>th{border-top-width:1px}div.footable-loader{vertical-align:middle;text-align:center;height:300px;position:relative}div.footable-loader>span.fooicon{display:inline-block;opacity:.3;font-size:30px;line-height:32px;width:32px;height:32px;margin-top:-16px;margin-left:-16px;position:absolute;top:50%;left:50%;-webkit-animation:fooicon-spin-r 2s infinite linear;animation:fooicon-spin-r 2s infinite linear}table.footable>tbody>tr.footable-empty>td{vertical-align:middle;text-align:center;font-size:30px}table.footable>tbody>tr>td,table.footable>tbody>tr>th{display:none}table.footable>tbody>tr.footable-detail-row>td,table.footable>tbody>tr.footable-detail-row>th,table.footable>tbody>tr.footable-empty>td,table.footable>tbody>tr.footable-empty>th{display:table-cell}@-webkit-keyframes fooicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fooicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fooicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings'!important;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fooicon:after,.fooicon:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fooicon-loader:before{content:"\e030"}.fooicon-plus:before{content:"\2b"}.fooicon-minus:before{content:"\2212"}.fooicon-search:before{content:"\e003"}.fooicon-remove:before{content:"\e014"}.fooicon-sort:before{content:"\e150"}.fooicon-sort-asc:before{content:"\e155"}.fooicon-sort-desc:before{content:"\e156"}.fooicon-pencil:before{content:"\270f"}.fooicon-trash:before{content:"\e020"}.fooicon-eye-close:before{content:"\e106"}.fooicon-flash:before{content:"\e162"}.fooicon-cog:before{content:"\e019"}.fooicon-stats:before{content:"\e185"} \ No newline at end of file diff --git a/media/footable-v3/css/footable.core.standalone.css b/media/footable-v3/css/footable.core.standalone.css new file mode 100644 index 0000000..679543a --- /dev/null +++ b/media/footable-v3/css/footable.core.standalone.css @@ -0,0 +1,675 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +/* globals - instead we house them under the .footable.table class as the root of FooTable is always the table itself. */ +.footable.table, .footable.table *, +.footable-details.table, .footable-details.table * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.footable.table th, +.footable-details.table th { + text-align: left; +} +/* tables */ +.footable.table, +.footable-details.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.footable.table > caption + thead > tr:first-child > th, +.footable.table > colgroup + thead > tr:first-child > th, +.footable.table > thead:first-child > tr:first-child > th, +.footable.table > caption + thead > tr:first-child > td, +.footable.table > colgroup + thead > tr:first-child > td, +.footable.table > thead:first-child > tr:first-child > td, +.footable-details.table > caption + thead > tr:first-child > th, +.footable-details.table > colgroup + thead > tr:first-child > th, +.footable-details.table > thead:first-child > tr:first-child > th, +.footable-details.table > caption + thead > tr:first-child > td, +.footable-details.table > colgroup + thead > tr:first-child > td, +.footable-details.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.footable.table > thead > tr > th, +.footable.table > tbody > tr > th, +.footable.table > tfoot > tr > th, +.footable.table > thead > tr > td, +.footable.table > tbody > tr > td, +.footable.table > tfoot > tr > td, +.footable-details.table > thead > tr > th, +.footable-details.table > tbody > tr > th, +.footable-details.table > tfoot > tr > th, +.footable-details.table > thead > tr > td, +.footable-details.table > tbody > tr > td, +.footable-details.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.footable.table > thead > tr > th, +.footable.table > thead > tr > td, +.footable-details.table > thead > tr > th, +.footable-details.table > thead > tr > td { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.footable.table-condensed > thead > tr > th, +.footable.table-condensed > tbody > tr > th, +.footable.table-condensed > tfoot > tr > th, +.footable.table-condensed > thead > tr > td, +.footable.table-condensed > tbody > tr > td, +.footable.table-condensed > tfoot > tr > td, +.footable-details.table-condensed > thead > tr > th, +.footable-details.table-condensed > tbody > tr > th, +.footable-details.table-condensed > tfoot > tr > th, +.footable-details.table-condensed > thead > tr > td, +.footable-details.table-condensed > tbody > tr > td, +.footable-details.table-condensed > tfoot > tr > td { + padding: 5px; +} +.footable.table-bordered, +.footable-details.table-bordered { + border: 1px solid #ddd; +} +.footable.table-bordered > thead > tr > th, +.footable.table-bordered > tbody > tr > th, +.footable.table-bordered > tfoot > tr > th, +.footable.table-bordered > thead > tr > td, +.footable.table-bordered > tbody > tr > td, +.footable.table-bordered > tfoot > tr > td, +.footable-details.table-bordered > thead > tr > th, +.footable-details.table-bordered > tbody > tr > th, +.footable-details.table-bordered > tfoot > tr > th, +.footable-details.table-bordered > thead > tr > td, +.footable-details.table-bordered > tbody > tr > td, +.footable-details.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.footable.table-bordered > thead > tr > th, +.footable.table-bordered > thead > tr > td, +.footable-details.table-bordered > thead > tr > th, +.footable-details.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.footable.table-striped > tbody > tr:nth-child(odd), +.footable-details.table-striped > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; +} +.footable.table-hover > tbody > tr:hover, +.footable-details.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +/* buttons */ +.footable .btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: 400; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-appearance: button; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; + overflow: visible; + text-transform: none; +} +.footable .btn:hover, +.footable .btn:focus, +.footable .btn.focus { + color: #333; + text-decoration: none; +} +.footable .btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.footable .btn-default:hover, +.footable .btn-default:focus, +.footable .btn-default.focus, +.footable .btn-default:active, +.footable .btn-default.active, +.footable .open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.footable .btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.footable .btn-primary:hover, +.footable .btn-primary:focus, +.footable .btn-primary.focus, +.footable .btn-primary:active, +.footable .btn-primary.active, +.footable .open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +/* button groups */ +.footable .btn-group, .footable .btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.footable .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.footable .btn-group > .btn:first-child { + margin-left: 0; +} +.footable .btn-group-vertical > .btn, +.footable .btn-group > .btn { + position: relative; + float: left; +} +.footable .btn-group-xs > .btn, +.footable .btn-xs { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.footable .btn-group-sm > .btn, +.footable .btn-sm { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.footable .btn-group-lg > .btn, +.footable .btn-lg { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +/* caret */ +.footable .caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.footable .btn .caret { + margin-left: 0; +} +/* form-group */ +.form-group { + margin-bottom: 15px; +} +/* form-control */ +.footable .form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + margin: 0; + font-family: inherit; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +/* input-group */ +.footable .input-group { + position: relative; + display: table; + border-collapse: separate; +} +.footable .input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.footable .input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.footable .input-group-addon, +.footable .input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.footable .input-group-addon, +.footable .input-group-btn, +.footable .input-group .form-control { + display: table-cell; +} +.footable .input-group-btn > .btn + .btn, +.footable .input-group-btn:last-child > .btn, +.footable .input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.footable .input-group-btn > .btn { + position: relative; +} +.footable .input-group-btn > .btn:hover, +.footable .input-group-btn > .btn:focus, +.footable .input-group-btn > .btn:active { + z-index: 2; +} +.footable .input-group .form-control:first-child, +.footable .input-group-addon:first-child, +.footable .input-group-btn:first-child > .btn, +.footable .input-group-btn:first-child > .btn-group > .btn, +.footable .input-group-btn:first-child > .dropdown-toggle, +.footable .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.footable .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.footable .input-group .form-control:last-child, +.footable .input-group-addon:last-child, +.footable .input-group-btn:last-child > .btn, +.footable .input-group-btn:last-child > .btn-group > .btn, +.footable .input-group-btn:last-child > .dropdown-toggle, +.footable .input-group-btn:first-child > .btn:not(:first-child), +.footable .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +/* checkboxes & radios */ +.footable .radio, +.footable .checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.footable .radio label, +.footable .checkbox label { + max-width: 100%; + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + cursor: pointer; +} +.footable .radio input[type=radio], +.footable .radio-inline input[type=radio], +.footable .checkbox input[type=checkbox], +.footable .checkbox-inline input[type=checkbox] { + position: absolute; + margin: 4px 0 0 -20px; + line-height: normal; +} +/* dropdown-menu */ +.footable .dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.footable .open > .dropdown-menu { + display: block; +} +.footable .dropdown-menu-right { + right: 0; + left: auto; +} +.footable .dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.footable .dropdown-menu > li > a:hover, +.footable .dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +/* pagination */ +.footable .pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.footable .pagination > li { + display: inline; +} +.footable .pagination > li:first-child > a, +.footable .pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.footable .pagination > li > a, +.footable .pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.footable .pagination > li > a:hover, +.footable .pagination > li > span:hover, +.footable .pagination > li > a:focus, +.footable .pagination > li > span:focus { + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.footable .pagination > .active > a, +.footable .pagination > .active > span, +.footable .pagination > .active > a:hover, +.footable .pagination > .active > span:hover, +.footable .pagination > .active > a:focus, +.footable .pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.footable .pagination > .disabled > span, +.footable .pagination > .disabled > span:hover, +.footable .pagination > .disabled > span:focus, +.footable .pagination > .disabled > a, +.footable .pagination > .disabled > a:hover, +.footable .pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +/* labels */ +.footable .label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +.footable .label-default { + background-color: #777; +} +/* wells */ +.footable-loader.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05); + box-shadow: inset 0 1px 1px rgba(0,0,0,.05); +} +/* screen reader only */ +.footable .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} +/* form-inline */ +@media (min-width: 768px) { + .footable .form-inline .form-group { + display:inline-block; + margin-bottom: 0; + vertical-align: middle + } + + .footable .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + + .footable .form-inline .input-group { + display: inline-table; + vertical-align: middle + } + + .footable .form-inline .input-group .input-group-addon, + .footable .form-inline .input-group .input-group-btn, + .footable .form-inline .input-group .form-control { + width: auto + } + + .footable .form-inline .input-group>.form-control { + width: 100% + } +} +table.footable, +table.footable-details { + position: relative; + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} +table.footable-details { + margin-bottom: 0; +} +table.footable-hide-fouc { + display: none; +} +table > tbody > tr > td > span.footable-toggle { + margin-right: 8px; + opacity: 0.3; +} +table > tbody > tr > td > span.footable-toggle.last-column { + margin-left: 8px; + float: right; +} +table.table-condensed > tbody > tr > td > span.footable-toggle { + margin-right: 5px; +} +table.footable-details > tbody > tr > th:nth-child(1) { + min-width: 40px; + width: 120px; +} +table.footable-details > tbody > tr > td:nth-child(2) { + word-break: break-all; +} + +table.footable-details > thead > tr:first-child > th, +table.footable-details > thead > tr:first-child > td, +table.footable-details > tbody > tr:first-child > th, +table.footable-details > tbody > tr:first-child > td, +table.footable-details > tfoot > tr:first-child > th, +table.footable-details > tfoot > tr:first-child > td { + border-top-width: 0; +} +table.footable-details.table-bordered > thead > tr:first-child > th, +table.footable-details.table-bordered > thead > tr:first-child > td, +table.footable-details.table-bordered > tbody > tr:first-child > th, +table.footable-details.table-bordered > tbody > tr:first-child > td, +table.footable-details.table-bordered > tfoot > tr:first-child > th, +table.footable-details.table-bordered > tfoot > tr:first-child > td { + border-top-width: 1px; +} + +div.footable-loader { + vertical-align: middle; + text-align: center; + height: 300px; + position: relative; +} +div.footable-loader > span.fooicon { + display: inline-block; + opacity: 0.3; + font-size: 30px; + line-height: 32px; + width: 32px; + height: 32px; + margin-top: -16px; + margin-left: -16px; + position: absolute; + top: 50%; + left: 50%; + -webkit-animation: fooicon-spin-r 2s infinite linear; + animation: fooicon-spin-r 2s infinite linear; +} +table.footable > tbody > tr.footable-empty > td { + vertical-align: middle; + text-align: center; + font-size: 30px; +} +table.footable > tbody > tr > td, +table.footable > tbody > tr > th { + display: none; +} +table.footable > tbody > tr.footable-empty > td, +table.footable > tbody > tr.footable-empty > th, +table.footable > tbody > tr.footable-detail-row > td, +table.footable > tbody > tr.footable-detail-row > th { + display: table-cell; +} +@-webkit-keyframes fooicon-spin-r { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fooicon-spin-r { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.fooicon { + display: inline-block; + font-size: inherit; + font-family: FontAwesome !important; + font-style: normal; + font-weight: 400; + line-height: 1; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transform: translate(0, 0); +} +.fooicon:before, +.fooicon:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.fooicon-loader:before { + content: "\f01e"; +} +.fooicon-plus:before { + content: "\f067"; +} +.fooicon-minus:before { + content: "\f068"; +} +.fooicon-search:before { + content: "\f002"; +} +.fooicon-remove:before { + content: "\f00d"; +} +.fooicon-sort:before { + content: "\f0dc"; +} +.fooicon-sort-asc:before { + content: "\f160"; +} +.fooicon-sort-desc:before { + content: "\f161"; +} +.fooicon-pencil:before { + content: "\f040"; +} +.fooicon-trash:before { + content: "\f1f8"; +} +.fooicon-eye-close:before { + content: "\f070"; +} +.fooicon-flash:before { + content: "\f0e7"; +} +.fooicon-cog:before { + content: "\f013"; +} +.fooicon-stats:before { + content: "\f080"; +} diff --git a/media/footable-v3/css/footable.core.standalone.min.css b/media/footable-v3/css/footable.core.standalone.min.css new file mode 100644 index 0000000..ca4cdc6 --- /dev/null +++ b/media/footable-v3/css/footable.core.standalone.min.css @@ -0,0 +1 @@ +.footable .btn,.footable .caret{display:inline-block;vertical-align:middle}.footable-details.table,.footable-details.table *,.footable.table,.footable.table *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.footable-details.table th,.footable.table th{text-align:left}.footable-details.table,.footable.table{width:100%;max-width:100%;margin-bottom:20px}.footable-details.table>caption+thead>tr:first-child>td,.footable-details.table>caption+thead>tr:first-child>th,.footable-details.table>colgroup+thead>tr:first-child>td,.footable-details.table>colgroup+thead>tr:first-child>th,.footable-details.table>thead:first-child>tr:first-child>td,.footable-details.table>thead:first-child>tr:first-child>th,.footable.table>caption+thead>tr:first-child>td,.footable.table>caption+thead>tr:first-child>th,.footable.table>colgroup+thead>tr:first-child>td,.footable.table>colgroup+thead>tr:first-child>th,.footable.table>thead:first-child>tr:first-child>td,.footable.table>thead:first-child>tr:first-child>th{border-top:0}.footable-details.table>tbody>tr>td,.footable-details.table>tbody>tr>th,.footable-details.table>tfoot>tr>td,.footable-details.table>tfoot>tr>th,.footable-details.table>thead>tr>td,.footable-details.table>thead>tr>th,.footable.table>tbody>tr>td,.footable.table>tbody>tr>th,.footable.table>tfoot>tr>td,.footable.table>tfoot>tr>th,.footable.table>thead>tr>td,.footable.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.footable-details.table>thead>tr>td,.footable-details.table>thead>tr>th,.footable.table>thead>tr>td,.footable.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.footable-details.table-condensed>tbody>tr>td,.footable-details.table-condensed>tbody>tr>th,.footable-details.table-condensed>tfoot>tr>td,.footable-details.table-condensed>tfoot>tr>th,.footable-details.table-condensed>thead>tr>td,.footable-details.table-condensed>thead>tr>th,.footable.table-condensed>tbody>tr>td,.footable.table-condensed>tbody>tr>th,.footable.table-condensed>tfoot>tr>td,.footable.table-condensed>tfoot>tr>th,.footable.table-condensed>thead>tr>td,.footable.table-condensed>thead>tr>th{padding:5px}.footable-details.table-bordered,.footable-details.table-bordered>tbody>tr>td,.footable-details.table-bordered>tbody>tr>th,.footable-details.table-bordered>tfoot>tr>td,.footable-details.table-bordered>tfoot>tr>th,.footable-details.table-bordered>thead>tr>td,.footable-details.table-bordered>thead>tr>th,.footable.table-bordered,.footable.table-bordered>tbody>tr>td,.footable.table-bordered>tbody>tr>th,.footable.table-bordered>tfoot>tr>td,.footable.table-bordered>tfoot>tr>th,.footable.table-bordered>thead>tr>td,.footable.table-bordered>thead>tr>th{border:1px solid #ddd}.footable-details.table-bordered>thead>tr>td,.footable-details.table-bordered>thead>tr>th,.footable.table-bordered>thead>tr>td,.footable.table-bordered>thead>tr>th{border-bottom-width:2px}.footable-details.table-striped>tbody>tr:nth-child(odd),.footable.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.footable-details.table-hover>tbody>tr:hover,.footable.table-hover>tbody>tr:hover{background-color:#f5f5f5}.footable .btn{padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-appearance:button;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px;overflow:visible;text-transform:none}.footable .btn.focus,.footable .btn:focus,.footable .btn:hover{color:#333;text-decoration:none}.footable .btn-default{color:#333;background-color:#fff;border-color:#ccc}.footable .btn-default.active,.footable .btn-default.focus,.footable .btn-default:active,.footable .btn-default:focus,.footable .btn-default:hover,.footable .open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.footable .btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.footable .btn-primary.active,.footable .btn-primary.focus,.footable .btn-primary:active,.footable .btn-primary:focus,.footable .btn-primary:hover,.footable .open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.footable .btn-group,.footable .btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.footable .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.footable .btn-group>.btn:first-child{margin-left:0}.footable .btn-group-vertical>.btn,.footable .btn-group>.btn{position:relative;float:left}.footable .btn-group-xs>.btn,.footable .btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.footable .btn-group-sm>.btn,.footable .btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.footable .btn-group-lg>.btn,.footable .btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.footable .caret{width:0;height:0;margin-left:2px;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.footable .btn .caret{margin-left:0}.form-group{margin-bottom:15px}.footable .form-control{display:block;width:100%;height:34px;padding:6px 12px;margin:0;font-family:inherit;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.footable .input-group{position:relative;display:table;border-collapse:separate}.footable .input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.footable .input-group-btn{position:relative;font-size:0}.footable .input-group-addon,.footable .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.footable .input-group .form-control,.footable .input-group-addon,.footable .input-group-btn{display:table-cell}.footable .input-group-btn:last-child>.btn,.footable .input-group-btn:last-child>.btn-group,.footable .input-group-btn>.btn+.btn{margin-left:-1px}.footable .input-group-btn>.btn{position:relative}.footable .input-group-btn>.btn:active,.footable .input-group-btn>.btn:focus,.footable .input-group-btn>.btn:hover{z-index:2}.footable .input-group .form-control:first-child,.footable .input-group-addon:first-child,.footable .input-group-btn:first-child>.btn,.footable .input-group-btn:first-child>.btn-group>.btn,.footable .input-group-btn:first-child>.dropdown-toggle,.footable .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.footable .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.footable .input-group .form-control:last-child,.footable .input-group-addon:last-child,.footable .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.footable .input-group-btn:first-child>.btn:not(:first-child),.footable .input-group-btn:last-child>.btn,.footable .input-group-btn:last-child>.btn-group>.btn,.footable .input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.footable .checkbox,.footable .radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.footable .checkbox label,.footable .radio label{max-width:100%;min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.footable .checkbox input[type=checkbox],.footable .checkbox-inline input[type=checkbox],.footable .radio input[type=radio],.footable .radio-inline input[type=radio]{position:absolute;margin:4px 0 0 -20px;line-height:normal}.footable .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.footable .open>.dropdown-menu{display:block}.footable .dropdown-menu-right{right:0;left:auto}.footable .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.footable .dropdown-menu>li>a:focus,.footable .dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.footable .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.footable .pagination>li{display:inline}.footable .pagination>li:first-child>a,.footable .pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.footable .pagination>li>a,.footable .pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.footable .pagination>li>a:focus,.footable .pagination>li>a:hover,.footable .pagination>li>span:focus,.footable .pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.footable .pagination>.active>a,.footable .pagination>.active>a:focus,.footable .pagination>.active>a:hover,.footable .pagination>.active>span,.footable .pagination>.active>span:focus,.footable .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.footable .pagination>.disabled>a,.footable .pagination>.disabled>a:focus,.footable .pagination>.disabled>a:hover,.footable .pagination>.disabled>span,.footable .pagination>.disabled>span:focus,.footable .pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.footable .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.footable .label-default{background-color:#777}.footable-loader.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.footable .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (min-width:768px){.footable .form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.footable .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.footable .form-inline .input-group{display:inline-table;vertical-align:middle}.footable .form-inline .input-group .form-control,.footable .form-inline .input-group .input-group-addon,.footable .form-inline .input-group .input-group-btn{width:auto}.footable .form-inline .input-group>.form-control{width:100%}}table.footable,table.footable-details{position:relative;width:100%;border-spacing:0;border-collapse:collapse}table.footable-details{margin-bottom:0}table.footable-hide-fouc{display:none}table>tbody>tr>td>span.footable-toggle{margin-right:8px;opacity:.3}table>tbody>tr>td>span.footable-toggle.last-column{margin-left:8px;float:right}table.table-condensed>tbody>tr>td>span.footable-toggle{margin-right:5px}table.footable-details>tbody>tr>th:nth-child(1){min-width:40px;width:120px}table.footable-details>tbody>tr>td:nth-child(2){word-break:break-all}table.footable-details>tbody>tr:first-child>td,table.footable-details>tbody>tr:first-child>th,table.footable-details>tfoot>tr:first-child>td,table.footable-details>tfoot>tr:first-child>th,table.footable-details>thead>tr:first-child>td,table.footable-details>thead>tr:first-child>th{border-top-width:0}table.footable-details.table-bordered>tbody>tr:first-child>td,table.footable-details.table-bordered>tbody>tr:first-child>th,table.footable-details.table-bordered>tfoot>tr:first-child>td,table.footable-details.table-bordered>tfoot>tr:first-child>th,table.footable-details.table-bordered>thead>tr:first-child>td,table.footable-details.table-bordered>thead>tr:first-child>th{border-top-width:1px}div.footable-loader{vertical-align:middle;text-align:center;height:300px;position:relative}div.footable-loader>span.fooicon{display:inline-block;opacity:.3;font-size:30px;line-height:32px;width:32px;height:32px;margin-top:-16px;margin-left:-16px;position:absolute;top:50%;left:50%;-webkit-animation:fooicon-spin-r 2s infinite linear;animation:fooicon-spin-r 2s infinite linear}table.footable>tbody>tr.footable-empty>td{vertical-align:middle;text-align:center;font-size:30px}table.footable>tbody>tr>td,table.footable>tbody>tr>th{display:none}table.footable>tbody>tr.footable-detail-row>td,table.footable>tbody>tr.footable-detail-row>th,table.footable>tbody>tr.footable-empty>td,table.footable>tbody>tr.footable-empty>th{display:table-cell}@-webkit-keyframes fooicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fooicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fooicon{display:inline-block;font-size:inherit;font-family:FontAwesome!important;font-style:normal;font-weight:400;line-height:1;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0,0)}.fooicon:after,.fooicon:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fooicon-loader:before{content:"\f01e"}.fooicon-plus:before{content:"\f067"}.fooicon-minus:before{content:"\f068"}.fooicon-search:before{content:"\f002"}.fooicon-remove:before{content:"\f00d"}.fooicon-sort:before{content:"\f0dc"}.fooicon-sort-asc:before{content:"\f160"}.fooicon-sort-desc:before{content:"\f161"}.fooicon-pencil:before{content:"\f040"}.fooicon-trash:before{content:"\f1f8"}.fooicon-eye-close:before{content:"\f070"}.fooicon-flash:before{content:"\f0e7"}.fooicon-cog:before{content:"\f013"}.fooicon-stats:before{content:"\f080"} \ No newline at end of file diff --git a/media/footable-v3/css/footable.editing.css b/media/footable-v3/css/footable.editing.css new file mode 100644 index 0000000..e99197c --- /dev/null +++ b/media/footable-v3/css/footable.editing.css @@ -0,0 +1,50 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +td.footable-editing { + width: 90px; + max-width: 90px; +} +table.footable-editing-no-edit td.footable-editing, +table.footable-editing-no-delete td.footable-editing, +table.footable-editing-no-view td.footable-editing { + width: 70px; + max-width: 70px; +} +table.footable-editing-no-edit.footable-editing-no-delete td.footable-editing, +table.footable-editing-no-edit.footable-editing-no-view td.footable-editing, +table.footable-editing-no-delete.footable-editing-no-view td.footable-editing { + width: 50px; + max-width: 50px; +} +table.footable-editing-no-edit.footable-editing-no-delete.footable-editing-no-view td.footable-editing, +table.footable-editing-no-edit.footable-editing-no-delete.footable-editing-no-view th.footable-editing { + width: 0; + max-width: 0; + display: none !important; +} +table.footable-editing-right td.footable-editing, +table.footable-editing-right tr.footable-editing { + text-align: right; +} +table.footable-editing-left td.footable-editing, +table.footable-editing-left tr.footable-editing { + text-align: left; +} +table.footable-editing button.footable-add, +table.footable-editing button.footable-hide, +table.footable-editing-show button.footable-show, +table.footable-editing.footable-editing-always-show button.footable-show, +table.footable-editing.footable-editing-always-show button.footable-hide, +table.footable-editing.footable-editing-always-show.footable-editing-no-add tr.footable-editing { + display: none; +} +table.footable-editing.footable-editing-show button.footable-add, +table.footable-editing.footable-editing-show button.footable-hide, +table.footable-editing.footable-editing-always-show button.footable-add { + display: inline-block; +} diff --git a/media/footable-v3/css/footable.editing.min.css b/media/footable-v3/css/footable.editing.min.css new file mode 100644 index 0000000..5bce15b --- /dev/null +++ b/media/footable-v3/css/footable.editing.min.css @@ -0,0 +1 @@ +td.footable-editing{width:90px;max-width:90px}table.footable-editing-no-delete td.footable-editing,table.footable-editing-no-edit td.footable-editing,table.footable-editing-no-view td.footable-editing{width:70px;max-width:70px}table.footable-editing-no-delete.footable-editing-no-view td.footable-editing,table.footable-editing-no-edit.footable-editing-no-delete td.footable-editing,table.footable-editing-no-edit.footable-editing-no-view td.footable-editing{width:50px;max-width:50px}table.footable-editing-no-edit.footable-editing-no-delete.footable-editing-no-view td.footable-editing,table.footable-editing-no-edit.footable-editing-no-delete.footable-editing-no-view th.footable-editing{width:0;max-width:0;display:none!important}table.footable-editing-right td.footable-editing,table.footable-editing-right tr.footable-editing{text-align:right}table.footable-editing-left td.footable-editing,table.footable-editing-left tr.footable-editing{text-align:left}table.footable-editing button.footable-add,table.footable-editing button.footable-hide,table.footable-editing-show button.footable-show,table.footable-editing.footable-editing-always-show button.footable-hide,table.footable-editing.footable-editing-always-show button.footable-show,table.footable-editing.footable-editing-always-show.footable-editing-no-add tr.footable-editing{display:none}table.footable-editing.footable-editing-always-show button.footable-add,table.footable-editing.footable-editing-show button.footable-add,table.footable-editing.footable-editing-show button.footable-hide{display:inline-block} \ No newline at end of file diff --git a/media/footable-v3/css/footable.filtering.css b/media/footable-v3/css/footable.filtering.css new file mode 100644 index 0000000..4f18006 --- /dev/null +++ b/media/footable-v3/css/footable.filtering.css @@ -0,0 +1,55 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +table.footable > thead > tr.footable-filtering > th { + border-bottom-width: 1px; + font-weight: normal; +} +table.footable > thead > tr.footable-filtering > th, +table.footable.footable-filtering-right > thead > tr.footable-filtering > th { + text-align: right; +} +table.footable.footable-filtering-left > thead > tr.footable-filtering > th { + text-align: left; +} +table.footable.footable-filtering-center > thead > tr.footable-filtering > th { + text-align: center; +} +table.footable > thead > tr.footable-filtering > th div.form-group { + margin-bottom: 0; +} +table.footable > thead > tr.footable-filtering > th div.form-group+div.form-group { + margin-top: 5px; +} +table.footable > thead > tr.footable-filtering > th div.input-group { + width: 100%; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox { + margin: 0; + display: block; + position: relative; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox > label { + display: block; + padding-left: 20px; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox input[type="checkbox"] { + position: absolute; + margin-left: -20px; +} +@media (min-width: 768px) { + table.footable > thead > tr.footable-filtering > th div.input-group { + width: auto; + } + table.footable > thead > tr.footable-filtering > th div.form-group { + margin-left: 2px; + margin-right: 2px; + } + table.footable > thead > tr.footable-filtering > th div.form-group+div.form-group { + margin-top: 0; + } +} \ No newline at end of file diff --git a/media/footable-v3/css/footable.filtering.min.css b/media/footable-v3/css/footable.filtering.min.css new file mode 100644 index 0000000..cd74997 --- /dev/null +++ b/media/footable-v3/css/footable.filtering.min.css @@ -0,0 +1 @@ +table.footable>thead>tr.footable-filtering>th{border-bottom-width:1px;font-weight:400}table.footable.footable-filtering-right>thead>tr.footable-filtering>th,table.footable>thead>tr.footable-filtering>th{text-align:right}table.footable.footable-filtering-left>thead>tr.footable-filtering>th{text-align:left}table.footable.footable-filtering-center>thead>tr.footable-filtering>th{text-align:center}table.footable>thead>tr.footable-filtering>th div.form-group{margin-bottom:0}table.footable>thead>tr.footable-filtering>th div.form-group+div.form-group{margin-top:5px}table.footable>thead>tr.footable-filtering>th div.input-group{width:100%}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox{margin:0;display:block;position:relative}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox>label{display:block;padding-left:20px}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox input[type=checkbox]{position:absolute;margin-left:-20px}@media (min-width:768px){table.footable>thead>tr.footable-filtering>th div.input-group{width:auto}table.footable>thead>tr.footable-filtering>th div.form-group{margin-left:2px;margin-right:2px}table.footable>thead>tr.footable-filtering>th div.form-group+div.form-group{margin-top:0}} \ No newline at end of file diff --git a/media/footable-v3/css/footable.paging.css b/media/footable-v3/css/footable.paging.css new file mode 100644 index 0000000..f3e111d --- /dev/null +++ b/media/footable-v3/css/footable.paging.css @@ -0,0 +1,31 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +table.footable > tfoot > tr.footable-paging > td > ul.pagination { + margin: 10px 0 0 0; +} +table.footable > tfoot > tr.footable-paging > td > span.label { + display: inline-block; + margin: 0 0 10px 0; + padding: 4px 10px; +} +table.footable > tfoot > tr.footable-paging > td, +table.footable-paging-center > tfoot > tr.footable-paging > td { + text-align: center; +} +table.footable-paging-left > tfoot > tr.footable-paging > td { + text-align: left; +} +table.footable-paging-right > tfoot > tr.footable-paging > td { + text-align: right; +} +ul.pagination > li.footable-page { + display: none; +} +ul.pagination > li.footable-page.visible { + display: inline; +} \ No newline at end of file diff --git a/media/footable-v3/css/footable.paging.min.css b/media/footable-v3/css/footable.paging.min.css new file mode 100644 index 0000000..2b43136 --- /dev/null +++ b/media/footable-v3/css/footable.paging.min.css @@ -0,0 +1 @@ +table.footable>tfoot>tr.footable-paging>td>ul.pagination{margin:10px 0 0}table.footable>tfoot>tr.footable-paging>td>span.label{display:inline-block;margin:0 0 10px;padding:4px 10px}table.footable-paging-center>tfoot>tr.footable-paging>td,table.footable>tfoot>tr.footable-paging>td{text-align:center}table.footable-paging-left>tfoot>tr.footable-paging>td{text-align:left}table.footable-paging-right>tfoot>tr.footable-paging>td{text-align:right}ul.pagination>li.footable-page{display:none}ul.pagination>li.footable-page.visible{display:inline} \ No newline at end of file diff --git a/media/footable-v3/css/footable.sorting.css b/media/footable-v3/css/footable.sorting.css new file mode 100644 index 0000000..8dce90d --- /dev/null +++ b/media/footable-v3/css/footable.sorting.css @@ -0,0 +1,46 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +table.footable > thead > tr > td.footable-sortable, +table.footable > thead > tr > th.footable-sortable, +table.footable > tbody > tr > td.footable-sortable, +table.footable > tbody > tr > th.footable-sortable, +table.footable > tfoot > tr > td.footable-sortable, +table.footable > tfoot > tr > th.footable-sortable { + position: relative; + padding-right: 30px; + cursor: pointer; +} +td.footable-sortable > span.fooicon, +th.footable-sortable > span.fooicon { + position: absolute; + right: 6px; + top: 50%; + margin-top: -7px; + opacity: 0; + transition: opacity 0.3s ease-in; +} +td.footable-sortable:hover > span.fooicon, +th.footable-sortable:hover > span.fooicon { + opacity: 1; +} +td.footable-sortable.footable-asc > span.fooicon, +th.footable-sortable.footable-asc > span.fooicon, +td.footable-sortable.footable-desc > span.fooicon, +th.footable-sortable.footable-desc > span.fooicon { + opacity: 1; +} +/* hides the sort icons when sorting is not allowed */ +table.footable-sorting-disabled td.footable-sortable.footable-asc > span.fooicon, +table.footable-sorting-disabled td.footable-sortable.footable-desc > span.fooicon, +table.footable-sorting-disabled td.footable-sortable:hover > span.fooicon, +table.footable-sorting-disabled th.footable-sortable.footable-asc > span.fooicon, +table.footable-sorting-disabled th.footable-sortable.footable-desc > span.fooicon, +table.footable-sorting-disabled th.footable-sortable:hover > span.fooicon { + opacity: 0; + visibility: hidden; +} \ No newline at end of file diff --git a/media/footable-v3/css/footable.sorting.min.css b/media/footable-v3/css/footable.sorting.min.css new file mode 100644 index 0000000..1592c94 --- /dev/null +++ b/media/footable-v3/css/footable.sorting.min.css @@ -0,0 +1 @@ +table.footable>tbody>tr>td.footable-sortable,table.footable>tbody>tr>th.footable-sortable,table.footable>tfoot>tr>td.footable-sortable,table.footable>tfoot>tr>th.footable-sortable,table.footable>thead>tr>td.footable-sortable,table.footable>thead>tr>th.footable-sortable{position:relative;padding-right:30px;cursor:pointer}td.footable-sortable>span.fooicon,th.footable-sortable>span.fooicon{position:absolute;right:6px;top:50%;margin-top:-7px;opacity:0;transition:opacity .3s ease-in}td.footable-sortable.footable-asc>span.fooicon,td.footable-sortable.footable-desc>span.fooicon,td.footable-sortable:hover>span.fooicon,th.footable-sortable.footable-asc>span.fooicon,th.footable-sortable.footable-desc>span.fooicon,th.footable-sortable:hover>span.fooicon{opacity:1}table.footable-sorting-disabled td.footable-sortable.footable-asc>span.fooicon,table.footable-sorting-disabled td.footable-sortable.footable-desc>span.fooicon,table.footable-sorting-disabled td.footable-sortable:hover>span.fooicon,table.footable-sorting-disabled th.footable-sortable.footable-asc>span.fooicon,table.footable-sorting-disabled th.footable-sortable.footable-desc>span.fooicon,table.footable-sorting-disabled th.footable-sortable:hover>span.fooicon{opacity:0;visibility:hidden} \ No newline at end of file diff --git a/media/footable-v3/css/footable.standalone.css b/media/footable-v3/css/footable.standalone.css new file mode 100644 index 0000000..15be741 --- /dev/null +++ b/media/footable-v3/css/footable.standalone.css @@ -0,0 +1,727 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.0.6 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +/* globals - instead we house them under the .footable.table class as the root of FooTable is always the table itself. */ +.footable.table, .footable.table *, +.footable-details.table, .footable-details.table * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.footable.table th, +.footable-details.table th { + text-align: left; +} +/* tables */ +.footable.table, +.footable-details.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.footable.table > caption + thead > tr:first-child > th, +.footable.table > colgroup + thead > tr:first-child > th, +.footable.table > thead:first-child > tr:first-child > th, +.footable.table > caption + thead > tr:first-child > td, +.footable.table > colgroup + thead > tr:first-child > td, +.footable.table > thead:first-child > tr:first-child > td, +.footable-details.table > caption + thead > tr:first-child > th, +.footable-details.table > colgroup + thead > tr:first-child > th, +.footable-details.table > thead:first-child > tr:first-child > th, +.footable-details.table > caption + thead > tr:first-child > td, +.footable-details.table > colgroup + thead > tr:first-child > td, +.footable-details.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.footable.table > thead > tr > th, +.footable.table > tbody > tr > th, +.footable.table > tfoot > tr > th, +.footable.table > thead > tr > td, +.footable.table > tbody > tr > td, +.footable.table > tfoot > tr > td, +.footable-details.table > thead > tr > th, +.footable-details.table > tbody > tr > th, +.footable-details.table > tfoot > tr > th, +.footable-details.table > thead > tr > td, +.footable-details.table > tbody > tr > td, +.footable-details.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.footable.table > thead > tr > th, +.footable.table > thead > tr > td, +.footable-details.table > thead > tr > th, +.footable-details.table > thead > tr > td { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.footable.table-condensed > thead > tr > th, +.footable.table-condensed > tbody > tr > th, +.footable.table-condensed > tfoot > tr > th, +.footable.table-condensed > thead > tr > td, +.footable.table-condensed > tbody > tr > td, +.footable.table-condensed > tfoot > tr > td, +.footable-details.table-condensed > thead > tr > th, +.footable-details.table-condensed > tbody > tr > th, +.footable-details.table-condensed > tfoot > tr > th, +.footable-details.table-condensed > thead > tr > td, +.footable-details.table-condensed > tbody > tr > td, +.footable-details.table-condensed > tfoot > tr > td { + padding: 5px; +} +.footable.table-bordered, +.footable-details.table-bordered { + border: 1px solid #ddd; +} +.footable.table-bordered > thead > tr > th, +.footable.table-bordered > tbody > tr > th, +.footable.table-bordered > tfoot > tr > th, +.footable.table-bordered > thead > tr > td, +.footable.table-bordered > tbody > tr > td, +.footable.table-bordered > tfoot > tr > td, +.footable-details.table-bordered > thead > tr > th, +.footable-details.table-bordered > tbody > tr > th, +.footable-details.table-bordered > tfoot > tr > th, +.footable-details.table-bordered > thead > tr > td, +.footable-details.table-bordered > tbody > tr > td, +.footable-details.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.footable.table-bordered > thead > tr > th, +.footable.table-bordered > thead > tr > td, +.footable-details.table-bordered > thead > tr > th, +.footable-details.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.footable.table-striped > tbody > tr:nth-child(odd), +.footable-details.table-striped > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; +} +.footable.table-hover > tbody > tr:hover, +.footable-details.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +/* buttons */ +.footable .btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: 400; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-appearance: button; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; + overflow: visible; + text-transform: none; +} +.footable .btn:hover, +.footable .btn:focus, +.footable .btn.focus { + color: #333; + text-decoration: none; +} +.footable .btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.footable .btn-default:hover, +.footable .btn-default:focus, +.footable .btn-default.focus, +.footable .btn-default:active, +.footable .btn-default.active, +.footable .open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.footable .btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.footable .btn-primary:hover, +.footable .btn-primary:focus, +.footable .btn-primary.focus, +.footable .btn-primary:active, +.footable .btn-primary.active, +.footable .open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +/* caret */ +.footable .caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.footable .btn .caret { + margin-left: 0; +} +/* form-group */ +.form-group { + margin-bottom: 15px; +} +/* form-control */ +.footable .form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + margin: 0; + font-family: inherit; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +/* input-group */ +.footable .input-group { + position: relative; + display: table; + border-collapse: separate; +} +.footable .input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.footable .input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.footable .input-group-addon, +.footable .input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.footable .input-group-addon, +.footable .input-group-btn, +.footable .input-group .form-control { + display: table-cell; +} +.footable .input-group-btn > .btn + .btn, +.footable .input-group-btn:last-child > .btn, +.footable .input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.footable .input-group-btn > .btn { + position: relative; +} +.footable .input-group-btn > .btn:hover, +.footable .input-group-btn > .btn:focus, +.footable .input-group-btn > .btn:active { + z-index: 2; +} +.footable .input-group .form-control:first-child, +.footable .input-group-addon:first-child, +.footable .input-group-btn:first-child > .btn, +.footable .input-group-btn:first-child > .btn-group > .btn, +.footable .input-group-btn:first-child > .dropdown-toggle, +.footable .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.footable .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.footable .input-group .form-control:last-child, +.footable .input-group-addon:last-child, +.footable .input-group-btn:last-child > .btn, +.footable .input-group-btn:last-child > .btn-group > .btn, +.footable .input-group-btn:last-child > .dropdown-toggle, +.footable .input-group-btn:first-child > .btn:not(:first-child), +.footable .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +/* checkboxes & radios */ +.footable .radio, +.footable .checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.footable .radio label, +.footable .checkbox label { + max-width: 100%; + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + cursor: pointer; +} +.footable .radio input[type=radio], +.footable .radio-inline input[type=radio], +.footable .checkbox input[type=checkbox], +.footable .checkbox-inline input[type=checkbox] { + position: absolute; + margin: 4px 0 0 -20px; + line-height: normal; +} +/* dropdown-menu */ +.footable .dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.footable .open > .dropdown-menu { + display: block; +} +.footable .dropdown-menu-right { + right: 0; + left: auto; +} +.footable .dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: 400; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.footable .dropdown-menu > li > a:hover, +.footable .dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +/* pagination */ +.footable .pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.footable .pagination > li { + display: inline; +} +.footable .pagination > li:first-child > a, +.footable .pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.footable .pagination > li > a, +.footable .pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.footable .pagination > li > a:hover, +.footable .pagination > li > span:hover, +.footable .pagination > li > a:focus, +.footable .pagination > li > span:focus { + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.footable .pagination > .active > a, +.footable .pagination > .active > span, +.footable .pagination > .active > a:hover, +.footable .pagination > .active > span:hover, +.footable .pagination > .active > a:focus, +.footable .pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.footable .pagination > .disabled > span, +.footable .pagination > .disabled > span:hover, +.footable .pagination > .disabled > span:focus, +.footable .pagination > .disabled > a, +.footable .pagination > .disabled > a:hover, +.footable .pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +/* labels */ +.footable .label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +.footable .label-default { + background-color: #777; +} +/* wells */ +.footable-loader.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05); + box-shadow: inset 0 1px 1px rgba(0,0,0,.05); +} +/* screen reader only */ +.footable .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} +/* form-inline */ +@media (min-width: 768px) { + .footable .form-inline .form-group { + display:inline-block; + margin-bottom: 0; + vertical-align: middle + } + + .footable .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + + .footable .form-inline .input-group { + display: inline-table; + vertical-align: middle + } + + .footable .form-inline .input-group .input-group-addon, + .footable .form-inline .input-group .input-group-btn, + .footable .form-inline .input-group .form-control { + width: auto + } + + .footable .form-inline .input-group>.form-control { + width: 100% + } +} +table.footable, +table.footable-details { + position: relative; + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} +table.footable-details { + margin-bottom: 0; +} +table > tbody > tr > td > span.footable-toggle { + margin-right: 8px; + opacity: 0.3; +} +table > tbody > tr > td > span.footable-toggle.last-column { + margin-left: 8px; + float: right; +} +table.table-condensed > tbody > tr > td > span.footable-toggle { + margin-right: 5px; +} +table.footable-details > tbody > tr > th:nth-child(1) { + min-width: 40px; + width: 120px; +} +table.footable-details > tbody > tr > td:nth-child(2) { + word-break: break-all; +} + +table.footable-details > thead > tr:first-child > th, +table.footable-details > thead > tr:first-child > td, +table.footable-details > tbody > tr:first-child > th, +table.footable-details > tbody > tr:first-child > td, +table.footable-details > tfoot > tr:first-child > th, +table.footable-details > tfoot > tr:first-child > td { + border-top-width: 0; +} +table.footable-details.table-bordered > thead > tr:first-child > th, +table.footable-details.table-bordered > thead > tr:first-child > td, +table.footable-details.table-bordered > tbody > tr:first-child > th, +table.footable-details.table-bordered > tbody > tr:first-child > td, +table.footable-details.table-bordered > tfoot > tr:first-child > th, +table.footable-details.table-bordered > tfoot > tr:first-child > td { + border-top-width: 1px; +} + +div.footable-loader { + vertical-align: middle; + text-align: center; + height: 300px; + position: relative; +} +div.footable-loader > span.fooicon { + display: inline-block; + opacity: 0.3; + font-size: 30px; + line-height: 32px; + width: 32px; + height: 32px; + margin-top: -16px; + margin-left: -16px; + position: absolute; + top: 50%; + left: 50%; + -webkit-animation: fooicon-spin-r 2s infinite linear; + animation: fooicon-spin-r 2s infinite linear; +} +table.footable > tbody > tr.footable-empty > td { + vertical-align: middle; + text-align: center; + font-size: 30px; +} +table.footable > tbody > tr > td, +table.footable > tbody > tr > th { + display: none; +} +table.footable > tbody > tr.footable-empty > td, +table.footable > tbody > tr.footable-empty > th, +table.footable > tbody > tr.footable-detail-row > td, +table.footable > tbody > tr.footable-detail-row > th { + display: table-cell; +} +@-webkit-keyframes fooicon-spin-r { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fooicon-spin-r { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.fooicon { + display: inline-block; + font-size: inherit; + font-family: FontAwesome !important; + font-style: normal; + font-weight: 400; + line-height: 1; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transform: translate(0, 0); +} +.fooicon:before, +.fooicon:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.fooicon-loader:before { + content: "\f01e"; +} +.fooicon-plus:before { + content: "\f067"; +} +.fooicon-minus:before { + content: "\f068"; +} +.fooicon-search:before { + content: "\f002"; +} +.fooicon-remove:before { + content: "\f00d"; +} +.fooicon-sort:before { + content: "\f0dc"; +} +.fooicon-sort-asc:before { + content: "\f160"; +} +.fooicon-sort-desc:before { + content: "\f161"; +} +.fooicon-pencil:before { + content: "\f040"; +} +.fooicon-trash:before { + content: "\f1f8"; +} +.fooicon-eye-close:before { + content: "\f070"; +} +.fooicon-flash:before { + content: "\f0e7"; +} +.fooicon-cog:before { + content: "\f013"; +} +table.footable > thead > tr.footable-filtering > th { + border-bottom-width: 1px; + font-weight: normal; +} +table.footable > thead > tr.footable-filtering > th, +table.footable.footable-filtering-right > thead > tr.footable-filtering > th { + text-align: right; +} +table.footable.footable-filtering-left > thead > tr.footable-filtering > th { + text-align: left; +} +table.footable.footable-filtering-center > thead > tr.footable-filtering > th { + text-align: center; +} +table.footable > thead > tr.footable-filtering > th div.form-group { + margin-bottom: 0; +} +table.footable > thead > tr.footable-filtering > th div.form-group+div.form-group { + margin-top: 5px; +} +table.footable > thead > tr.footable-filtering > th div.input-group { + width: 100%; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox { + margin: 0; + display: block; + position: relative; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox > label { + display: block; + padding-left: 20px; +} +table.footable > thead > tr.footable-filtering > th ul.dropdown-menu > li > a.checkbox input[type="checkbox"] { + position: absolute; + margin-left: -20px; +} +@media (min-width: 768px) { + table.footable > thead > tr.footable-filtering > th div.input-group { + width: auto; + } + table.footable > thead > tr.footable-filtering > th div.form-group { + margin-left: 2px; + margin-right: 2px; + } + table.footable > thead > tr.footable-filtering > th div.form-group+div.form-group { + margin-top: 0; + } +} +td.footable-sortable, +th.footable-sortable { + position: relative; + padding-right: 30px; + cursor: pointer; +} +td.footable-sortable > span.fooicon, +th.footable-sortable > span.fooicon { + position: absolute; + right: 6px; + top: 50%; + margin-top: -7px; + opacity: 0; + transition: opacity 0.3s ease-in; +} +td.footable-sortable:hover > span.fooicon, +th.footable-sortable:hover > span.fooicon { + opacity: 1; +} +td.footable-sortable.footable-asc > span.fooicon, +th.footable-sortable.footable-asc > span.fooicon, +td.footable-sortable.footable-desc > span.fooicon, +th.footable-sortable.footable-desc > span.fooicon { + opacity: 1; +} +table.footable > tfoot > tr.footable-paging > td > ul.pagination { + margin: 10px 0 0 0; +} +table.footable > tfoot > tr.footable-paging > td > span.label { + display: inline-block; + margin: 0 0 10px 0; + padding: 4px 10px; +} +table.footable > tfoot > tr.footable-paging > td, +table.footable-paging-center > tfoot > tr.footable-paging > td { + text-align: center; +} +table.footable-paging-left > tfoot > tr.footable-paging > td { + text-align: left; +} +table.footable-paging-right > tfoot > tr.footable-paging > td { + text-align: right; +} +ul.pagination > li.footable-page { + display: none; +} +ul.pagination > li.footable-page.visible { + display: inline; +} \ No newline at end of file diff --git a/media/footable-v3/css/footable.standalone.min.css b/media/footable-v3/css/footable.standalone.min.css new file mode 100644 index 0000000..615f08a --- /dev/null +++ b/media/footable-v3/css/footable.standalone.min.css @@ -0,0 +1 @@ +.footable .btn,.footable .caret{display:inline-block;vertical-align:middle}.footable-details.table,.footable-details.table *,.footable.table,.footable.table *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.footable-details.table th,.footable.table th{text-align:left}.footable-details.table,.footable.table{width:100%;max-width:100%;margin-bottom:20px}.footable-details.table>caption+thead>tr:first-child>td,.footable-details.table>caption+thead>tr:first-child>th,.footable-details.table>colgroup+thead>tr:first-child>td,.footable-details.table>colgroup+thead>tr:first-child>th,.footable-details.table>thead:first-child>tr:first-child>td,.footable-details.table>thead:first-child>tr:first-child>th,.footable.table>caption+thead>tr:first-child>td,.footable.table>caption+thead>tr:first-child>th,.footable.table>colgroup+thead>tr:first-child>td,.footable.table>colgroup+thead>tr:first-child>th,.footable.table>thead:first-child>tr:first-child>td,.footable.table>thead:first-child>tr:first-child>th{border-top:0}.footable-details.table>tbody>tr>td,.footable-details.table>tbody>tr>th,.footable-details.table>tfoot>tr>td,.footable-details.table>tfoot>tr>th,.footable-details.table>thead>tr>td,.footable-details.table>thead>tr>th,.footable.table>tbody>tr>td,.footable.table>tbody>tr>th,.footable.table>tfoot>tr>td,.footable.table>tfoot>tr>th,.footable.table>thead>tr>td,.footable.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.footable-details.table>thead>tr>td,.footable-details.table>thead>tr>th,.footable.table>thead>tr>td,.footable.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.footable-details.table-condensed>tbody>tr>td,.footable-details.table-condensed>tbody>tr>th,.footable-details.table-condensed>tfoot>tr>td,.footable-details.table-condensed>tfoot>tr>th,.footable-details.table-condensed>thead>tr>td,.footable-details.table-condensed>thead>tr>th,.footable.table-condensed>tbody>tr>td,.footable.table-condensed>tbody>tr>th,.footable.table-condensed>tfoot>tr>td,.footable.table-condensed>tfoot>tr>th,.footable.table-condensed>thead>tr>td,.footable.table-condensed>thead>tr>th{padding:5px}.footable .btn,.footable .form-control{padding:6px 12px;font-size:14px;background-image:none;line-height:1.42857143}.footable-details.table-bordered,.footable-details.table-bordered>tbody>tr>td,.footable-details.table-bordered>tbody>tr>th,.footable-details.table-bordered>tfoot>tr>td,.footable-details.table-bordered>tfoot>tr>th,.footable-details.table-bordered>thead>tr>td,.footable-details.table-bordered>thead>tr>th,.footable.table-bordered,.footable.table-bordered>tbody>tr>td,.footable.table-bordered>tbody>tr>th,.footable.table-bordered>tfoot>tr>td,.footable.table-bordered>tfoot>tr>th,.footable.table-bordered>thead>tr>td,.footable.table-bordered>thead>tr>th{border:1px solid #ddd}.footable-details.table-bordered>thead>tr>td,.footable-details.table-bordered>thead>tr>th,.footable.table-bordered>thead>tr>td,.footable.table-bordered>thead>tr>th{border-bottom-width:2px}.footable-details.table-striped>tbody>tr:nth-child(odd),.footable.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.footable-details.table-hover>tbody>tr:hover,.footable.table-hover>tbody>tr:hover{background-color:#f5f5f5}.footable .btn{margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-appearance:button;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;overflow:visible;text-transform:none}.footable .btn.focus,.footable .btn:focus,.footable .btn:hover{color:#333;text-decoration:none}.footable .btn-default{color:#333;background-color:#fff;border-color:#ccc}.footable .btn-default.active,.footable .btn-default.focus,.footable .btn-default:active,.footable .btn-default:focus,.footable .btn-default:hover,.footable .open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.footable .btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.footable .btn-primary.active,.footable .btn-primary.focus,.footable .btn-primary:active,.footable .btn-primary:focus,.footable .btn-primary:hover,.footable .open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.footable .caret{width:0;height:0;margin-left:2px;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.footable .btn .caret{margin-left:0}.form-group{margin-bottom:15px}.footable .form-control{display:block;width:100%;height:34px;margin:0;font-family:inherit;color:#555;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.footable .input-group{position:relative;display:table;border-collapse:separate}.footable .input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.footable .input-group-btn{position:relative;font-size:0}.footable .input-group-addon,.footable .input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.footable .input-group .form-control,.footable .input-group-addon,.footable .input-group-btn{display:table-cell}.footable .input-group-btn:last-child>.btn,.footable .input-group-btn:last-child>.btn-group,.footable .input-group-btn>.btn+.btn{margin-left:-1px}.footable .input-group-btn>.btn{position:relative}.footable .input-group-btn>.btn:active,.footable .input-group-btn>.btn:focus,.footable .input-group-btn>.btn:hover{z-index:2}.footable .input-group .form-control:first-child,.footable .input-group-addon:first-child,.footable .input-group-btn:first-child>.btn,.footable .input-group-btn:first-child>.btn-group>.btn,.footable .input-group-btn:first-child>.dropdown-toggle,.footable .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.footable .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.footable .input-group .form-control:last-child,.footable .input-group-addon:last-child,.footable .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.footable .input-group-btn:first-child>.btn:not(:first-child),.footable .input-group-btn:last-child>.btn,.footable .input-group-btn:last-child>.btn-group>.btn,.footable .input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.footable .checkbox,.footable .radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.footable .checkbox label,.footable .radio label{max-width:100%;min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.footable .checkbox input[type=checkbox],.footable .checkbox-inline input[type=checkbox],.footable .radio input[type=radio],.footable .radio-inline input[type=radio]{position:absolute;margin:4px 0 0 -20px;line-height:normal}.footable .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.footable .open>.dropdown-menu{display:block}.footable .dropdown-menu-right{right:0;left:auto}.footable .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.footable .dropdown-menu>li>a:focus,.footable .dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.footable .pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.footable .pagination>li{display:inline}.footable .pagination>li:first-child>a,.footable .pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.footable .pagination>li>a,.footable .pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.footable .pagination>li>a:focus,.footable .pagination>li>a:hover,.footable .pagination>li>span:focus,.footable .pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.footable .pagination>.active>a,.footable .pagination>.active>a:focus,.footable .pagination>.active>a:hover,.footable .pagination>.active>span,.footable .pagination>.active>span:focus,.footable .pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.footable .pagination>.disabled>a,.footable .pagination>.disabled>a:focus,.footable .pagination>.disabled>a:hover,.footable .pagination>.disabled>span,.footable .pagination>.disabled>span:focus,.footable .pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.footable .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.footable .label-default{background-color:#777}.footable-loader.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.footable .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}table.footable-details,table.footable>thead>tr.footable-filtering>th div.form-group{margin-bottom:0}@media (min-width:768px){.footable .form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.footable .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.footable .form-inline .input-group{display:inline-table;vertical-align:middle}.footable .form-inline .input-group .form-control,.footable .form-inline .input-group .input-group-addon,.footable .form-inline .input-group .input-group-btn{width:auto}.footable .form-inline .input-group>.form-control{width:100%}}table.footable,table.footable-details{position:relative;width:100%;border-spacing:0;border-collapse:collapse}table>tbody>tr>td>span.footable-toggle{margin-right:8px;opacity:.3}table>tbody>tr>td>span.footable-toggle.last-column{margin-left:8px;float:right}table.table-condensed>tbody>tr>td>span.footable-toggle{margin-right:5px}table.footable-details>tbody>tr>th:nth-child(1){min-width:40px;width:120px}table.footable-details>tbody>tr>td:nth-child(2){word-break:break-all}table.footable-details>tbody>tr:first-child>td,table.footable-details>tbody>tr:first-child>th,table.footable-details>tfoot>tr:first-child>td,table.footable-details>tfoot>tr:first-child>th,table.footable-details>thead>tr:first-child>td,table.footable-details>thead>tr:first-child>th{border-top-width:0}table.footable-details.table-bordered>tbody>tr:first-child>td,table.footable-details.table-bordered>tbody>tr:first-child>th,table.footable-details.table-bordered>tfoot>tr:first-child>td,table.footable-details.table-bordered>tfoot>tr:first-child>th,table.footable-details.table-bordered>thead>tr:first-child>td,table.footable-details.table-bordered>thead>tr:first-child>th{border-top-width:1px}div.footable-loader{vertical-align:middle;text-align:center;height:300px;position:relative}div.footable-loader>span.fooicon{display:inline-block;opacity:.3;font-size:30px;line-height:32px;width:32px;height:32px;margin-top:-16px;margin-left:-16px;position:absolute;top:50%;left:50%;-webkit-animation:fooicon-spin-r 2s infinite linear;animation:fooicon-spin-r 2s infinite linear}table.footable>tbody>tr.footable-empty>td{vertical-align:middle;text-align:center;font-size:30px}table.footable>tbody>tr>td,table.footable>tbody>tr>th{display:none}table.footable>tbody>tr.footable-detail-row>td,table.footable>tbody>tr.footable-detail-row>th,table.footable>tbody>tr.footable-empty>td,table.footable>tbody>tr.footable-empty>th{display:table-cell}@-webkit-keyframes fooicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fooicon-spin-r{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fooicon{display:inline-block;font-size:inherit;font-family:FontAwesome!important;font-style:normal;font-weight:400;line-height:1;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0,0)}.fooicon:after,.fooicon:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fooicon-loader:before{content:"\f01e"}.fooicon-plus:before{content:"\f067"}.fooicon-minus:before{content:"\f068"}.fooicon-search:before{content:"\f002"}.fooicon-remove:before{content:"\f00d"}.fooicon-sort:before{content:"\f0dc"}.fooicon-sort-asc:before{content:"\f160"}.fooicon-sort-desc:before{content:"\f161"}.fooicon-pencil:before{content:"\f040"}.fooicon-trash:before{content:"\f1f8"}.fooicon-eye-close:before{content:"\f070"}.fooicon-flash:before{content:"\f0e7"}.fooicon-cog:before{content:"\f013"}table.footable>thead>tr.footable-filtering>th{border-bottom-width:1px;font-weight:400}table.footable.footable-filtering-right>thead>tr.footable-filtering>th,table.footable>thead>tr.footable-filtering>th{text-align:right}table.footable.footable-filtering-left>thead>tr.footable-filtering>th{text-align:left}table.footable-paging-center>tfoot>tr.footable-paging>td,table.footable.footable-filtering-center>thead>tr.footable-filtering>th,table.footable>tfoot>tr.footable-paging>td{text-align:center}table.footable>thead>tr.footable-filtering>th div.form-group+div.form-group{margin-top:5px}table.footable>thead>tr.footable-filtering>th div.input-group{width:100%}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox{margin:0;display:block;position:relative}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox>label{display:block;padding-left:20px}table.footable>thead>tr.footable-filtering>th ul.dropdown-menu>li>a.checkbox input[type=checkbox]{position:absolute;margin-left:-20px}@media (min-width:768px){table.footable>thead>tr.footable-filtering>th div.input-group{width:auto}table.footable>thead>tr.footable-filtering>th div.form-group{margin-left:2px;margin-right:2px}table.footable>thead>tr.footable-filtering>th div.form-group+div.form-group{margin-top:0}}td.footable-sortable,th.footable-sortable{position:relative;padding-right:30px;cursor:pointer}td.footable-sortable>span.fooicon,th.footable-sortable>span.fooicon{position:absolute;right:6px;top:50%;margin-top:-7px;opacity:0;transition:opacity .3s ease-in}td.footable-sortable.footable-asc>span.fooicon,td.footable-sortable.footable-desc>span.fooicon,td.footable-sortable:hover>span.fooicon,th.footable-sortable.footable-asc>span.fooicon,th.footable-sortable.footable-desc>span.fooicon,th.footable-sortable:hover>span.fooicon{opacity:1}table.footable>tfoot>tr.footable-paging>td>ul.pagination{margin:10px 0 0}table.footable>tfoot>tr.footable-paging>td>span.label{display:inline-block;margin:0 0 10px;padding:4px 10px}table.footable-paging-left>tfoot>tr.footable-paging>td{text-align:left}table.footable-paging-right>tfoot>tr.footable-paging>td{text-align:right}ul.pagination>li.footable-page{display:none}ul.pagination>li.footable-page.visible{display:inline} \ No newline at end of file diff --git a/media/footable-v3/css/index.html b/media/footable-v3/css/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/footable-v3/css/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/footable-v3/index.html b/media/footable-v3/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/footable-v3/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/footable-v3/js/footable.core.js b/media/footable-v3/js/footable.core.js new file mode 100644 index 0000000..7bab629 --- /dev/null +++ b/media/footable-v3/js/footable.core.js @@ -0,0 +1,3507 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +(function($, F){ + // add in console we use in case it's missing + window.console = window.console || { log:function(){}, error:function(){} }; + + /** + * The jQuery plugin initializer. + * @function jQuery.fn.footable + * @param {(object|FooTable.Defaults)} [options] - The options to initialize the plugin with. + * @param {function} [ready] - A callback function to execute for each initialized plugin. + * @returns {jQuery} + */ + $.fn.footable = function (options, ready) { + options = options || {}; + // make sure we only work with tables + return this.filter('table').each(function (i, tbl) { + F.init(tbl, options, ready); + }); + }; + + var debug_defaults = { + events: [] + }; + F.__debug__ = JSON.parse(localStorage.getItem('footable_debug')) || false; + F.__debug_options__ = JSON.parse(localStorage.getItem('footable_debug_options')) || debug_defaults; + + /** + * Gets or sets the internal debug variable which enables some additional logging to the console. + * When enabled this value is stored in the localStorage so it can persist across page reloads. + * @param {boolean} value - Whether or not to enable additional logging. + * @param {object} [options] - Any debug specific options. + * @returns {(boolean|undefined)} + */ + F.debug = function(value, options){ + if (!F.is.boolean(value)) return F.__debug__; + F.__debug__ = value; + if (F.__debug__){ + localStorage.setItem('footable_debug', JSON.stringify(F.__debug__)); + F.__debug_options__ = $.extend(true, {}, debug_defaults, options || {}); + if (F.is.hash(options)){ + localStorage.setItem('footable_debug_options', JSON.stringify(F.__debug_options__)); + } + } else { + localStorage.removeItem('footable_debug'); + localStorage.removeItem('footable_debug_options'); + } + }; + + /** + * Gets the FooTable instance of the supplied table if one exists. + * @param {(jQuery|jQuery.selector|HTMLTableElement)} table - The jQuery table object, selector or the HTMLTableElement to retrieve FooTable from. + * @returns {(FooTable.Table|undefined)} + */ + F.get = function(table){ + return $(table).first().data('__FooTable__'); + }; + + /** + * Initializes a new instance of FooTable on the supplied table. + * @param {(jQuery|jQuery.selector|HTMLTableElement)} table - The jQuery table object, selector or the HTMLTableElement to initialize FooTable on. + * @param {object} options - The options to initialize FooTable with. + * @param {function} [ready] - A callback function to execute once the plugin is initialized. + * @returns {FooTable.Table} + */ + F.init = function(table, options, ready){ + var ft = F.get(table); + if (ft instanceof F.Table) ft.destroy(); + return new F.Table(table, options, ready); + }; + + /** + * Gets the FooTable.Row instance for the supplied element. + * @param {(jQuery|jQuery.selector|HTMLTableElement)} element - A jQuery object, selector or the HTMLElement of an element to retrieve the FooTable.Row for. + * @returns {FooTable.Row} + */ + F.getRow = function(element){ + // to get the FooTable.Row object simply walk up the DOM, find the TR and grab the __FooTableRow__ data value + var $row = $(element).closest('tr'); + // if this is a detail row get the previous row in the table to get the main TR element + if ($row.hasClass('footable-detail-row')){ + $row = $row.prev(); + } + // grab the row object + return $row.data('__FooTableRow__'); + }; + + // The below are external type definitions mainly used as pointers to jQuery docs for important information + /** + * jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API + * that works across a multitude of browsers. With a combination of versatility and extensibility, jQuery has changed the way that millions of people write JavaScript. + * @name jQuery + * @constructor + * @returns {jQuery} + * @see {@link http://api.jquery.com/} + */ + + /** + * This object provides a subset of the methods of the Deferred object (then, done, fail, always, pipe, and state) to prevent users from changing the state of the Deferred. + * @typedef {object} jQuery.Promise + * @see {@link http://api.jquery.com/Types/#Promise} + */ + + /** + * As of jQuery 1.5, the Deferred object provides a way to register multiple callbacks into self-managed callback queues, invoke callback queues as appropriate, + * and relay the success or failure state of any synchronous or asynchronous function. + * @typedef {object} jQuery.Deferred + * @see {@link http://api.jquery.com/Types/#Deferred} + */ + + /** + * jQuery's event system normalizes the event object according to W3C standards. The event object is guaranteed to be passed to the event handler. Most properties from + * the original event are copied over and normalized to the new event object. + * @typedef {object} jQuery.Event + * @see {@link http://api.jquery.com/category/events/event-object/} + */ + + /** + * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. + * @memberof jQuery + * @function when + * @param {...jQuery.Deferred} deferreds - Any number of deferred objects to wait for. + * @returns {jQuery.Promise} + * @see {@link http://api.jquery.com/jQuery.when/} + */ + + /** + * The jQuery.fn namespace used to register plugins with jQuery. + * @memberof jQuery + * @namespace fn + * @see {@link http://learn.jquery.com/plugins/basic-plugin-creation/} + */ +})( + jQuery, + /** + * The core FooTable namespace containing all the plugin code. + * @namespace + */ + FooTable = window.FooTable || {} +); +(function(F){ + var returnTrue = function(){ return true; }; + + /** + * This namespace contains commonly used array utility methods. + * @namespace {object} FooTable.arr + */ + F.arr = {}; + + /** + * Iterates over each item in the supplied array and performs the supplied function passing in the current item as the first argument. + * @memberof FooTable.arr + * @function each + * @param {Array} array - The array to iterate + * @param {function} func - The function to execute for each item. The first argument supplied to this function is the current item and the second is the current index. + */ + F.arr.each = function (array, func) { + if (!F.is.array(array) || !F.is.fn(func)) return; + for (var i = 0, len = array.length; i < len; i++) { + if (func(array[i], i) === false) break; + } + }; + + /** + * Get all items in the supplied array that optionally matches the supplied where function. If no items are found an empty array is returned. + * @memberof FooTable.arr + * @function get + * @param {Array} array - The array to get items from. + * @param {function} where - This function must return a boolean value, true includes the item in the result array. + * @returns {Array} + */ + F.arr.get = function (array, where) { + var result = []; + if (!F.is.array(array)) return result; + if (!F.is.fn(where)) return array; + for (var i = 0, len = array.length; i < len; i++) { + if (where(array[i], i)) result.push(array[i]); + } + return result; + }; + + /** + * Get a boolean value indicating if any item exists in the supplied array that optionally matches the supplied where function. + * @memberof FooTable.arr + * @function any + * @param {Array} array - The array to check. + * @param {function} [where] - [Optional] This function must return a boolean value, true indicates that the current item is a valid match. + * @returns {boolean} + */ + F.arr.any = function (array, where) { + if (!F.is.array(array)) return false; + where = F.is.fn(where) ? where : returnTrue; + for (var i = 0, len = array.length; i < len; i++) { + if (where(array[i], i)) return true; + } + return false; + }; + + /** + * Checks if the supplied value exists in the array. + * @memberof FooTable.arr + * @function contains + * @param {Array} array - The array to check. + * @param {*} value - The value to check for. + * @returns {boolean} + */ + F.arr.contains = function(array, value){ + if (!F.is.array(array) || F.is.undef(value)) return false; + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] == value) return true; + } + return false; + }; + + /** + * Get the first item in the supplied array that optionally matches the supplied where function. If no item is found null is returned. + * @memberof FooTable.arr + * @function first + * @param {Array} array - The array to get the item from. + * @param {function} [where] - [Optional] This function must return a boolean value, true indicates that the current item can be returned. + * @returns {(*|null)} + */ + F.arr.first = function (array, where) { + if (!F.is.array(array)) return null; + where = F.is.fn(where) ? where : returnTrue; + for (var i = 0, len = array.length; i < len; i++) { + if (where(array[i], i)) return array[i]; + } + return null; + }; + + /** + * Creates a new array from the results of the supplied getter function. If no items are found an empty array is returned, to exclude an item from the results return null. + * @memberof FooTable.arr + * @function map + * @param {Array} array - The array to iterate. + * @param {function} getter - This function must return either a new value or null. + * The first argument is the result being returned at this point in the iteration. The second argument is the current item being iterated. + * @returns {(*|null)} + */ + F.arr.map = function (array, getter) { + var result = [], returned = null; + if (!F.is.array(array) || !F.is.fn(getter)) return result; + for (var i = 0, len = array.length; i < len; i++) { + if ((returned = getter(array[i], i)) != null) result.push(returned); + } + return result; + }; + + /** + * Removes items from the array matching the supplied where function. All removed items are returned in a new array. + * @memberof FooTable.arr + * @function remove + * @param {Array} array - The array to iterate and remove items from. + * @param {function} where - This function must return a boolean value, true includes the item in the result array. + * @returns {*} + */ + F.arr.remove = function (array, where) { + var remove = [], removed = []; + if (!F.is.array(array) || !F.is.fn(where)) return removed; + var i = 0, len = array.length; + for (; i < len; i++) { + if (where(array[i], i, removed)){ + remove.push(i); + removed.push(array[i]); + } + } + // sort the indexes to be removed from largest to smallest + remove.sort(function(a, b){ return b - a; }); + i = 0; len = remove.length; + for(; i < len; i++){ + var index = remove[i] - i; + array.splice(index, 1); + } + return removed; + }; + + /** + * Deletes a single item from the array. The item if removed is returned. + * @memberof FooTable.arr + * @function delete + * @param {Array} array - The array to iterate and delete the item from. + * @param {*} item - The item to find and delete. + * @returns {(*|null)} + */ + F.arr.delete = function(array, item){ + var remove = -1, removed = null; + if (!F.is.array(array) || F.is.undef(item)) return removed; + var i = 0, len = array.length; + for (; i < len; i++) { + if (array[i] == item){ + remove = i; + removed = array[i]; + break; + } + } + if (remove != -1) array.splice(remove, 1); + return removed; + }; + + /** + * Replaces a single item in the array with a new one. + * @memberof FooTable.arr + * @function replace + * @param {Array} array - The array to iterate and replace the item in. + * @param {*} oldItem - The item to be replaced. + * @param {*} newItem - The item to be inserted. + */ + F.arr.replace = function(array, oldItem, newItem){ + var index = array.indexOf(oldItem); + if (index !== -1) array[index] = newItem; + }; + +})(FooTable); +(function (F) { + + /** + * This namespace contains commonly used 'is' type methods that return boolean values. + * @namespace FooTable.is + */ + F.is = {}; + + /** + * Checks if the type of the value is the same as that supplied. + * @memberof FooTable.is + * @function type + * @param {*} value - The value to check the type of. + * @param {string} type - The type to check for. + * @returns {boolean} + */ + F.is.type = function (value, type) { + return typeof value === type; + }; + + /** + * Checks if the value is defined. + * @memberof FooTable.is + * @function defined + * @param {*} value - The value to check is defined. + * @returns {boolean} + */ + F.is.defined = function (value) { + return typeof value !== 'undefined'; + }; + + /** + * Checks if the value is undefined. + * @memberof FooTable.is + * @function undef + * @param {*} value - The value to check is undefined. + * @returns {boolean} + */ + F.is.undef = function (value) { + return typeof value === 'undefined'; + }; + + /** + * Checks if the value is an array. + * @memberof FooTable.is + * @function array + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.array = function (value) { + return '[object Array]' === Object.prototype.toString.call(value); + }; + + /** + * Checks if the value is a date. + * @memberof FooTable.is + * @function date + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.date = function (value) { + return '[object Date]' === Object.prototype.toString.call(value) && !isNaN(value.getTime()); + }; + + /** + * Checks if the value is a boolean. + * @memberof FooTable.is + * @function boolean + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.boolean = function (value) { + return '[object Boolean]' === Object.prototype.toString.call(value); + }; + + /** + * Checks if the value is a string. + * @memberof FooTable.is + * @function string + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.string = function (value) { + return '[object String]' === Object.prototype.toString.call(value); + }; + + /** + * Checks if the value is a number. + * @memberof FooTable.is + * @function number + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.number = function (value) { + return '[object Number]' === Object.prototype.toString.call(value) && !isNaN(value); + }; + + /** + * Checks if the value is a function. + * @memberof FooTable.is + * @function fn + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.fn = function (value) { + return (F.is.defined(window) && value === window.alert) || '[object Function]' === Object.prototype.toString.call(value); + }; + + /** + * Checks if the value is an error. + * @memberof FooTable.is + * @function error + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.error = function (value) { + return '[object Error]' === Object.prototype.toString.call(value); + }; + + /** + * Checks if the value is an object. + * @memberof FooTable.is + * @function object + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.object = function (value) { + return '[object Object]' === Object.prototype.toString.call(value); + }; + + /** + * Checks if the value is a hash. + * @memberof FooTable.is + * @function hash + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.hash = function (value) { + return F.is.object(value) && value.constructor === Object && !value.nodeType && !value.setInterval; + }; + + /** + * Checks if the supplied object is an HTMLElement + * @memberof FooTable.is + * @function element + * @param {object} obj - The object to check. + * @returns {boolean} + */ + F.is.element = function (obj) { + return typeof HTMLElement === 'object' + ? obj instanceof HTMLElement + : obj && typeof obj === 'object' && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === 'string'; + }; + + /** + * This is a simple check to determine if an object is a jQuery promise object. It simply checks the object has a "then" and "promise" function defined. + * The promise object is created as an object literal inside of jQuery.Deferred. + * It has no prototype, nor any other truly unique properties that could be used to distinguish it. + * This method should be a little more accurate than the internal jQuery one that simply checks for a "promise" method. + * @memberof FooTable.is + * @function promise + * @param {object} obj - The object to check. + * @returns {boolean} + */ + F.is.promise = function(obj){ + return F.is.object(obj) && F.is.fn(obj.then) && F.is.fn(obj.promise); + }; + + /** + * Checks if the supplied object is an instance of a jQuery object. + * @memberof FooTable.is + * @function jq + * @param {object} obj - The object to check. + * @returns {boolean} + */ + F.is.jq = function(obj){ + return F.is.defined(window.jQuery) && obj instanceof jQuery && obj.length > 0; + }; + + /** + * Checks if the supplied object is a moment.js date object. + * @memberof FooTable.is + * @function moment + * @param {object} obj - The object to check. + * @returns {boolean} + */ + F.is.moment = function(obj){ + return F.is.defined(window.moment) && F.is.object(obj) && F.is.boolean(obj._isAMomentObject) + }; + + /** + * Checks if the supplied value is an object and if it is empty. + * @memberof FooTable.is + * @function emptyObject + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.emptyObject = function(value){ + if (!F.is.hash(value)) return false; + for(var prop in value) { + if(value.hasOwnProperty(prop)) + return false; + } + return true; + }; + + /** + * Checks if the supplied value is an array and if it is empty. + * @memberof FooTable.is + * @function emptyArray + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.emptyArray = function(value){ + return F.is.array(value) ? value.length === 0 : true; + }; + + /** + * Checks if the supplied value is a string and if it is empty. + * @memberof FooTable.is + * @function emptyString + * @param {*} value - The value to check. + * @returns {boolean} + */ + F.is.emptyString = function(value){ + return F.is.string(value) ? value.length === 0 : true; + }; + +})(FooTable); +(function (F) { + /** + * This namespace contains commonly used string utility methods. + * @namespace FooTable.str + */ + F.str = {}; + + /** + * Checks if the supplied string contains the given substring. + * @memberof FooTable.str + * @function contains + * @param {string} str - The string to check. + * @param {string} contains - The string to check for. + * @param {boolean} [ignoreCase=false] - Whether or not to ignore casing when performing the check. + * @returns {boolean} + */ + F.str.contains = function (str, contains, ignoreCase) { + if (F.is.emptyString(str) || F.is.emptyString(contains)) return false; + return contains.length <= str.length + && (ignoreCase ? str.toUpperCase().indexOf(contains.toUpperCase()) : str.indexOf(contains)) !== -1; + }; + + /** + * Checks if the supplied string contains the exact given substring. + * @memberof FooTable.str + * @function contains + * @param {string} str - The string to check. + * @param {string} contains - The string to check for. + * @param {boolean} [ignoreCase=false] - Whether or not to ignore casing when performing the check. + * @returns {boolean} + */ + F.str.containsExact = function (str, contains, ignoreCase) { + if (F.is.emptyString(str) || F.is.emptyString(contains) || contains.length > str.length) return false; + return new RegExp('\\b'+ F.str.escapeRegExp(contains)+'\\b', ignoreCase ? 'i' : '').test(str); + }; + + /** + * Checks if the supplied string contains the given word. + * @memberof FooTable.str + * @function containsWord + * @param {string} str - The string to check. + * @param {string} word - The word to check for. + * @param {boolean} [ignoreCase=false] - Whether or not to ignore casing when performing the check. + * @returns {boolean} + */ + F.str.containsWord = function(str, word, ignoreCase){ + if (F.is.emptyString(str) || F.is.emptyString(word) || str.length < word.length) + return false; + var parts = str.split(/\W/); + for (var i = 0, len = parts.length; i < len; i++){ + if (ignoreCase ? parts[i].toUpperCase() == word.toUpperCase() : parts[i] == word) return true; + } + return false; + }; + + /** + * Returns the remainder of a string split on the first index of the given substring. + * @memberof FooTable.str + * @function from + * @param {string} str - The string to split. + * @param {string} from - The substring to split on. + * @returns {string} + */ + F.str.from = function (str, from) { + if (F.is.emptyString(str)) return str; + return F.str.contains(str, from) ? str.substring(str.indexOf(from) + 1) : str; + }; + + /** + * Checks if a string starts with the supplied prefix. + * @memberof FooTable.str + * @function startsWith + * @param {string} str - The string to check. + * @param {string} prefix - The prefix to check for. + * @returns {boolean} + */ + F.str.startsWith = function (str, prefix) { + if (F.is.emptyString(str)) return str == prefix; + return str.slice(0, prefix.length) == prefix; + }; + + /** + * Takes the supplied string and converts it to camel case. + * @memberof FooTable.str + * @function toCamelCase + * @param {string} str - The string to camel case. + * @returns {string} + */ + F.str.toCamelCase = function (str) { + if (F.is.emptyString(str)) return str; + if (str.toUpperCase() === str) return str.toLowerCase(); + return str.replace(/^([A-Z])|[-\s_](\w)/g, function (match, p1, p2) { + if (F.is.string(p2)) return p2.toUpperCase(); + return p1.toLowerCase(); + }); + }; + + /** + * Generates a random string 9 characters long using the optional prefix if supplied. + * @memberof FooTable.str + * @function random + * @param {string} [prefix] - The prefix to append to the 9 random characters. + * @returns {string} + */ + F.str.random = function(prefix){ + prefix = F.is.emptyString(prefix) ? '' : prefix; + return prefix + Math.random().toString(36).substr(2, 9); + }; + + /** + * Escapes a string for use in a regular expression. + * @memberof FooTable.str + * @function escapeRegExp + * @param {string} str - The string to escape. + * @returns {string} + */ + F.str.escapeRegExp = function(str){ + if (F.is.emptyString(str)) return str; + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + }; + +})(FooTable); +(function (F) { + "use strict"; + + if (!Object.create) { + Object.create = (function () { + var Object = function () {}; + return function (prototype) { + if (arguments.length > 1) + throw Error('Second argument not supported'); + + if (!F.is.object(prototype)) + throw TypeError('Argument must be an object'); + + Object.prototype = prototype; + var result = new Object(); + Object.prototype = null; + return result; + }; + })(); + } + + /** + * This base implementation does nothing except provide access to the {@link FooTable.Class#extend} method. + * @constructs FooTable.Class + * @classdesc This class is based off of John Resig's [Simple JavaScript Inheritance]{@link http://ejohn.org/blog/simple-javascript-inheritance} but it has been updated to be ES 5.1 + * compatible by implementing an [Object.create polyfill]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill} + * for older browsers. + * @see {@link http://ejohn.org/blog/simple-javascript-inheritance} + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill} + * @returns {FooTable.Class} + */ + function Class() {} + + var __extendable__ = /xyz/.test(function () {xyz;}) ? /\b_super\b/ : /.*/; + + // this._super() within the context of the new function is a pointer to the original function + // except if the hook param is specified then the this._super variable is the result of the original function + Class.__extend__ = function(proto, name, func, original){ + // to all who venture here, here be dragons! + proto[name] = F.is.fn(original) && __extendable__.test(func) ? + (function (name, fn) { + return function () { + var tmp, ret; + tmp = this._super; + this._super = original; + ret = fn.apply(this, arguments); + this._super = tmp; + return ret; + }; + })(name, func) : func; + }; + + /** + * Creates a new class that inherits from this class which in turn allows itself to be extended or if a name and function is supplied extends only that specific function on the class. + * @param {(object|string)} arg1 - An object containing any new methods/members to implement or the name of the method to extend. + * @param {function} arg2 - If the first argument is a method name then this is the new function to replace it with. + * @returns {FooTable.Class} A new class that inherits from the base class. + * @example The below shows an example of how to implement inheritance using this method. + * var Person = FooTable.Class.extend({ + * construct: function(isDancing){ + * this.dancing = isDancing; + * }, + * dance: function(){ + * return this.dancing; + * } + * }); + * + * var Ninja = Person.extend({ + * construct: function(){ + * this._super( false ); + * }, + * dance: function(){ + * // Call the inherited version of dance() + * return this._super(); + * }, + * swingSword: function(){ + * return true; + * } + * }); + * + * var p = new Person(true); + * p.dance(); // => true + * + * var n = new Ninja(); + * n.dance(); // => false + * n.swingSword(); // => true + * + * // Should all be true + * p instanceof Person && p instanceof FooTable.Class && + * n instanceof Ninja && n instanceof Person && n instanceof FooTable.Class + */ + Class.extend = function (arg1 , arg2) { + var args = Array.prototype.slice.call(arguments); + arg1 = args.shift(); + arg2 = args.shift(); + + function __extend__(proto, name, func, original){ + // to all who venture here, here be dragons! + proto[name] = F.is.fn(original) && __extendable__.test(func) ? + (function (name, fn, ofn) { + return function () { + var tmp, ret; + tmp = this._super; + this._super = ofn; + ret = fn.apply(this, arguments); + this._super = tmp; + return ret; + }; + })(name, func, original) : func; + } + + if (F.is.hash(arg1)){ + var proto = Object.create(this.prototype), + _super = this.prototype; + for (var name in arg1) { + if (name === '__ctor__') continue; + __extend__(proto, name, arg1[name], _super[name]); + } + var obj = F.is.fn(proto.__ctor__) ? proto.__ctor__ : function () { + if (!F.is.fn(this.construct)) + throw new SyntaxError('FooTable class objects must be constructed with the "new" keyword.'); + this.construct.apply(this, arguments); + }; + proto.construct = F.is.fn(proto.construct) ? proto.construct : function(){}; + obj.prototype = proto; + proto.constructor = obj; + obj.extend = Class.extend; + return obj; + } else if (F.is.string(arg1) && F.is.fn(arg2)) { + __extend__(this.prototype, arg1, arg2, this.prototype[arg1]); + } + }; + + F.Class = Class; + + F.ClassFactory = F.Class.extend(/** @lends FooTable.ClassFactory */{ + /** + * This is a simple factory for {@link FooTable.Class} objects allowing them to be registered using a friendly name + * and then new instances can be created using this friendly name. + * @constructs + * @extends FooTable.Class + * @returns {FooTable.ClassFactory} + * @this FooTable.ClassFactory + */ + construct: function(){ + /** + * An object containing all registered classes. + * @type {{}} + */ + this.registered = {}; + }, + /** + * Checks if the factory contains a class registered using the supplied name. + * @instance + * @param {string} name - The name of the class to check. + * @returns {boolean} + * @this FooTable.ClassFactory + */ + contains: function(name){ + return F.is.defined(this.registered[name]); + }, + /** + * Gets an array of all registered names. + * @instance + * @returns {Array.} + * @this FooTable.ClassFactory + */ + names: function(){ + var names = [], name; + for (name in this.registered){ + if (!this.registered.hasOwnProperty(name)) continue; + names.push(name); + } + return names; + }, + /** + * Registers a class object using the supplied friendly name and priority. The priority is only taken into account when loading all registered classes + * using the {@link FooTable.ClassFactory#load} method. + * @instance + * @param {string} name - The friendly name of the class. + * @param {function} klass - The class to register. + * @param {number} priority - This determines the order that the class is created when using the {@link FooTable.ClassFactory#load} method, higher values are loaded first. + * @this FooTable.ClassFactory + */ + register: function(name, klass, priority){ + if (!F.is.string(name) || !F.is.fn(klass)) return; + var current = this.registered[name]; + this.registered[name] = { + name: name, + klass: klass, + priority: F.is.number(priority) ? priority : (F.is.defined(current) ? current.priority : 0) + }; + }, + /** + * Creates new instances of all registered classes using there priority and the supplied arguments to return them in an array. + * @instance + * @param {object} subs - An object containing classes to substitute on load. + * @param {*} arg1 - The first argument to supply when creating new instances of all registered classes. + * @param {*} [argN...] - Any number of additional arguments to supply when creating new instances of all registered classes. + * @returns {Array.} + * @this FooTable.ClassFactory + */ + load: function(subs, arg1, argN){ + var self = this, args = Array.prototype.slice.call(arguments), reg = [], loaded = [], name, klass; + subs = args.shift() || {}; + for (name in self.registered){ + if (!self.registered.hasOwnProperty(name)) continue; + var component = self.registered[name]; + if (subs.hasOwnProperty(name)){ + klass = subs[name]; + if (F.is.string(klass)) klass = F.getFnPointer(subs[name]); + if (F.is.fn(klass)){ + component = {name: name, klass: klass, priority: self.registered[name].priority}; + } + } + reg.push(component); + } + for (name in subs){ + if (!subs.hasOwnProperty(name) || self.registered.hasOwnProperty(name)) continue; + klass = subs[name]; + if (F.is.string(klass)) klass = F.getFnPointer(subs[name]); + if (F.is.fn(klass)){ + reg.push({name: name, klass: klass, priority: 0}); + } + } + reg.sort(function(a, b){ return b.priority - a.priority; }); + F.arr.each(reg, function(r){ + if (F.is.fn(r.klass)){ + loaded.push(self._make(r.klass, args)); + } + }); + return loaded; + }, + /** + * Create a new instance of a single class using the supplied name and arguments. + * @instance + * @param {string} name - The name of the class to create. + * @param {*} arg1 - The first argument to supply to the new instance. + * @param {*} [argN...] - Any number of additional arguments to supply to the new instance. + * @returns {FooTable.Class} + * @this FooTable.ClassFactory + */ + make: function(name, arg1, argN){ + var self = this, args = Array.prototype.slice.call(arguments), reg; + name = args.shift(); + reg = self.registered[name]; + if (F.is.fn(reg.klass)){ + return self._make(reg.klass, args); + } + return null; + }, + /** + * This in effect lets us use the "apply" method on a function using the "new" keyword. + * @instance + * @private + * @param {function} klass + * @param args + * @returns {FooTable.Class} + * @this FooTable.ClassFactory + */ + _make: function(klass, args){ + function Class() { + return klass.apply(this, args); + } + Class.prototype = klass.prototype; + return new Class(); + } + }); + +})(FooTable); +(function($, F){ + + /** + * Converts the supplied cssText string into JSON object. + * @param {string} cssText - The cssText to convert to a JSON object. + * @returns {object} + */ + F.css2json = function(cssText){ + if (F.is.emptyString(cssText)) return {}; + var json = {}, props = cssText.split(';'), pair, key, value; + for (var i = 0, i_len = props.length; i < i_len; i++){ + if (F.is.emptyString(props[i])) continue; + pair = props[i].split(':'); + if (F.is.emptyString(pair[0]) || F.is.emptyString(pair[1])) continue; + key = F.str.toCamelCase($.trim(pair[0])); + value = $.trim(pair[1]); + json[key] = value; + } + return json; + }; + + /** + * Attempts to retrieve a function pointer using the given name. + * @param {string} functionName - The name of the function to fetch a pointer to. + * @returns {(function|object|null)} + */ + F.getFnPointer = function(functionName){ + if (F.is.emptyString(functionName)) return null; + var pointer = window, + parts = functionName.split('.'); + F.arr.each(parts, function(part){ + if (pointer[part]) pointer = pointer[part]; + }); + return F.is.fn(pointer) ? pointer : null; + }; + + /** + * Checks the value for function properties such as the {@link FooTable.Column#formatter} option which could also be specified using just the name + * and attempts to return the correct function pointer or null if none was found matching the value. + * @param {FooTable.Class} self - The class to use as the 'this' keyword within the context of the function. + * @param {(function|string)} value - The actual function or the name of the function for the property. + * @param {function} [def] - A default function to return if none is found. + * @returns {(function|null)} + */ + F.checkFnValue = function(self, value, def){ + def = F.is.fn(def) ? def : null; + function wrap(t, fn, d){ + if (!F.is.fn(fn)) return d; + return function(){ + return fn.apply(t, arguments); + }; + } + return F.is.fn(value) ? wrap(self, value, def) : (F.is.type(value, 'string') ? wrap(self, F.getFnPointer(value), def) : def); + }; + +})(jQuery, FooTable); +(function($, F){ + + F.Cell = F.Class.extend(/** @lends FooTable.Cell */{ + /** + * The cell class containing all the properties for cells. + * @constructs + * @extends FooTable.Class + * @param {FooTable.Table} table - The root {@link FooTable.Table} this cell belongs to. + * @param {FooTable.Row} row - The parent {@link FooTable.Row} this cell belongs to. + * @param {FooTable.Column} column - The {@link FooTable.Column} this cell falls under. + * @param {(*|HTMLElement|jQuery)} valueOrElement - Either the value or the element for the cell. + * @returns {FooTable.Cell} + * @this FooTable.Cell + */ + construct: function (table, row, column, valueOrElement) { + /** + * The root {@link FooTable.Table} for the cell. + * @instance + * @readonly + * @type {FooTable.Table} + */ + this.ft = table; + /** + * The parent {@link FooTable.Row} for the cell. + * @instance + * @readonly + * @type {FooTable.Row} + */ + this.row = row; + /** + * The {@link FooTable.Column} this cell falls under. + * @instance + * @readonly + * @type {FooTable.Column} + */ + this.column = column; + this.created = false; + this.define(valueOrElement); + }, + /** + * This is supplied either the value or the cell element/jQuery object if it exists. + * If supplied the element we need set the $el property and parse the value from it. + * @instance + * @protected + * @param {(*|jQuery)} valueOrElement - The value or element to define the cell. + * @this FooTable.Cell + */ + define: function(valueOrElement){ + /** + * The jQuery table cell object this instance wraps. + * @instance + * @type {jQuery} + */ + this.$el = F.is.element(valueOrElement) || F.is.jq(valueOrElement) ? $(valueOrElement) : null; + /** + * The jQuery row object that represents this cell in the details table. + * @type {jQuery} + */ + this.$detail = null; + + var hasOptions = F.is.hash(valueOrElement) && F.is.hash(valueOrElement.options) && F.is.defined(valueOrElement.value); + + /** + * The value of the cell. + * @instance + * @type {*} + */ + this.value = this.column.parser.call(this.column, F.is.jq(this.$el) ? this.$el : (hasOptions ? valueOrElement.value : valueOrElement), this.ft.o); + + /** + * Contains any options for the cell. These are the options supplied through the plugin constructor as part of the row object itself. + * @type {object} + */ + this.o = $.extend(true, { + classes: null, + style: null + }, hasOptions ? valueOrElement.options : {}); + /** + * An array of CSS classes for the cell. + * @instance + * @protected + * @type {Array.} + */ + this.classes = F.is.jq(this.$el) && this.$el.attr('class') ? this.$el.attr('class').match(/\S+/g) : (F.is.array(this.o.classes) ? this.o.classes : (F.is.string(this.o.classes) ? this.o.classes.match(/\S+/g) : [])); + /** + * The inline styles for the cell. + * @instance + * @protected + * @type {object} + */ + this.style = F.is.jq(this.$el) && this.$el.attr('style') ? F.css2json(this.$el.attr('style')) : (F.is.hash(this.o.style) ? this.o.style : (F.is.string(this.o.style) ? F.css2json(this.o.style) : {})); + }, + /** + * After the cell has been defined this ensures that the $el and #detail properties are jQuery objects by either creating or updating them. + * @instance + * @protected + * @this FooTable.Cell + */ + $create: function(){ + if (this.created) return; + (this.$el = F.is.jq(this.$el) ? this.$el : $('')) + .data('value', this.value) + .contents().detach().end() + .append(this.format(this.value)); + + this._setClasses(this.$el); + this._setStyle(this.$el); + + this.$detail = $('').addClass(this.row.classes.join(' ')) + .data('__FooTableCell__', this) + .append($('')) + .append($('')); + + this.created = true; + }, + /** + * Collapses this cell and displays it in the details row. + * @instance + * @protected + */ + collapse: function(){ + if (!this.created) return; + this.$detail.children('th').html(this.column.title); + this.$el.clone() + .attr('id', this.$el.attr('id') ? this.$el.attr('id') + '-detail' : undefined) + .css('display', 'table-cell') + .html('') + .append(this.$el.contents().detach()) + .replaceAll(this.$detail.children('td').first()); + + if (!F.is.jq(this.$detail.parent())) + this.$detail.appendTo(this.row.$details.find('.footable-details > tbody')); + }, + /** + * Restores this cell from a detail row back into the normal row. + * @instance + * @protected + */ + restore: function(){ + if (!this.created) return; + if (F.is.jq(this.$detail.parent())){ + var $cell = this.$detail.children('td').first(); + this.$el + .attr('class', $cell.attr('class')) + .attr('style', $cell.attr('style')) + .css('display', (this.column.hidden || !this.column.visible) ? 'none' : 'table-cell') + .append($cell.contents().detach()); + } + this.$detail.detach(); + }, + /** + * Helper method to call this cell's column parser function supplying the required parameters. + * @instance + * @protected + * @returns {*} + * @see FooTable.Column#parser + * @this FooTable.Cell + */ + parse: function(){ + return this.column.parser.call(this.column, this.$el, this.ft.o); + }, + /** + * Helper method to call this cell's column formatter function using the supplied value and any additional required parameters. + * @instance + * @protected + * @param {*} value - The value to format. + * @returns {(string|HTMLElement|jQuery)} + * @see FooTable.Column#formatter + * @this FooTable.Cell + */ + format: function(value){ + return this.column.formatter.call(this.column, value, this.ft.o); + }, + /** + * Allows easy access to getting or setting the cell's value. If the value is set all associated properties are also updated along with the actual element. + * Using this method also allows us to supply an object containing options and the value for the cell. + * @instance + * @param {*} [value] - The value to set for the cell. If not supplied the current value of the cell is returned. + * @param {boolean} [redraw=true] - Whether or not to redraw the row once the value has been set. + * @returns {(*|undefined)} + * @this FooTable.Cell + */ + val: function(value, redraw){ + if (F.is.undef(value)){ + // get + return this.value; + } + // set + var self = this, hasOptions = F.is.hash(value) && F.is.hash(value.options) && F.is.defined(value.value); + this.o = $.extend(true, { + classes: self.classes, + style: self.style + }, hasOptions ? value.options : {}); + + this.value = hasOptions ? value.value : value; + this.classes = F.is.array(this.o.classes) ? this.o.classes : (F.is.string(this.o.classes) ? this.o.classes.match(/\S+/g) : []); + this.style = F.is.hash(this.o.style) ? this.o.style : (F.is.string(this.o.style) ? F.css2json(this.o.style) : {}); + + if (this.created){ + this.$el.data('value', this.value).empty(); + + var $detail = this.$detail.children('td').first().empty(), + $target = F.is.jq(this.$detail.parent()) ? $detail : this.$el; + + $target.append(this.format(this.value)); + + this._setClasses($target); + this._setStyle($target); + + if (F.is.boolean(redraw) ? redraw : true) this.row.draw(); + } + }, + _setClasses: function($el){ + var hasColClasses = !F.is.emptyArray(this.column.classes), + hasClasses = !F.is.emptyArray(this.classes), + classes = null; + $el.removeAttr('class'); + if (!hasColClasses && !hasClasses) return; + if (hasColClasses && hasClasses){ + classes = this.classes.concat(this.column.classes).join(' '); + } else if (hasColClasses) { + classes = this.column.classes.join(' '); + } else if (hasClasses){ + classes = this.classes.join(' '); + } + if (!F.is.emptyString(classes)){ + $el.addClass(classes); + } + }, + _setStyle: function($el){ + var hasColStyle = !F.is.emptyObject(this.column.style), + hasStyle = !F.is.emptyObject(this.style), + style = null; + $el.removeAttr('style'); + if (!hasColStyle && !hasStyle) return; + if (hasColStyle && hasStyle){ + style = $.extend({}, this.column.style, this.style); + } else if (hasColStyle) { + style = this.column.style; + } else if (hasStyle){ + style = this.style; + } + if (F.is.hash(style)){ + $el.css(style); + } + } + }); + +})(jQuery, FooTable); +(function($, F){ + + F.Column = F.Class.extend(/** @lends FooTable.Column */{ + /** + * The column class containing all the properties for columns. All members marked as "readonly" should not be used when defining {@link FooTable.Defaults#columns}. + * @constructs + * @extends FooTable.Class + * @param {FooTable.Table} instance - The parent {@link FooTable.Table} this component belongs to. + * @param {object} definition - An object containing all the properties to set for the column. + * @param {string} [type] - The type of column, "text" by default. + * @returns {FooTable.Column} + * @this FooTable.Column + */ + construct: function(instance, definition, type){ + /** + * The root {@link FooTable.Table} for the column. + * @instance + * @readonly + * @type {FooTable.Table} + */ + this.ft = instance; + /** + * The type of data displayed by the column. + * @instance + * @readonly + * @type {string} + */ + this.type = F.is.emptyString(type) ? 'text' : type; + /** + * Whether or not the column was parsed from a standard table row containing data instead of from an actual header row. + * @instance + * @readonly + * @type {boolean} + */ + this.virtual = F.is.boolean(definition.virtual) ? definition.virtual : false; + /** + * The jQuery cell object for the column header. + * @instance + * @readonly + * @type {jQuery} + */ + this.$el = F.is.jq(definition.$el) ? definition.$el : null; + /** + * The index of the column in the table. This is set by the plugin during initialization. + * @instance + * @readonly + * @type {number} + * @default -1 + */ + this.index = F.is.number(definition.index) ? definition.index : -1; + this.define(definition); + this.$create(); + }, + /** + * This is supplied the column definition in the form of a simple object created by merging options supplied via the plugin constructor with those parsed from the DOM. + * @instance + * @protected + * @param {object} definition - The object containing the column definition. + * @this FooTable.Column + */ + define: function(definition){ + /** + * Whether or not this column is hidden from view and appears in the details row. + * @type {boolean} + * @default false + */ + this.hidden = F.is.boolean(definition.hidden) ? definition.hidden : false; + /** + * Whether or not this column is completely hidden from view and will not appear in the details row. + * @type {boolean} + * @default true + */ + this.visible = F.is.boolean(definition.visible) ? definition.visible : true; + + /** + * The name of the column. This name must correspond to the property name of the JSON row data. + * @type {string} + * @default null + */ + this.name = F.is.string(definition.name) ? definition.name : null; + if (this.name == null) this.name = 'col'+(definition.index+1); + /** + * The title to display in the column header, this can be HTML. + * @type {string} + * @default null + */ + this.title = F.is.string(definition.title) ? definition.title : null; + if (!this.virtual && this.title == null && F.is.jq(this.$el)) this.title = this.$el.html(); + if (this.title == null) this.title = 'Column '+(definition.index+1); + /** + * The styles to apply to all cells in this column. + * @type {object} + */ + this.style = F.is.hash(definition.style) ? definition.style : (F.is.string(definition.style) ? F.css2json(definition.style) : {}); + /** + * The classes to apply to all cells in this column. + * @type {Array.} + */ + this.classes = F.is.array(definition.classes) ? definition.classes : (F.is.string(definition.classes) ? definition.classes.match(/\S+/g) : []); + + // override any default functions ensuring when they are executed "this" within the context of the function points to the instance of this object. + this.parser = F.checkFnValue(this, definition.parser, this.parser); + this.formatter = F.checkFnValue(this, definition.formatter, this.formatter); + }, + /** + * After the column has been defined this ensures that the $el property is a jQuery object by either creating or updating the current value. + * @instance + * @protected + * @this FooTable.Column + */ + $create: function(){ + (this.$el = !this.virtual && F.is.jq(this.$el) ? this.$el : $('')).html(this.title).addClass(this.classes.join(' ')).css(this.style); + }, + /** + * This is supplied either the cell value or jQuery object to parse. Any value can be returned from this method and will be provided to the {@link FooTable.Column#format} function + * to generate the cell contents. + * @instance + * @protected + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {string} + * @this FooTable.Column + */ + parser: function(valueOrElement){ + if (F.is.element(valueOrElement) || F.is.jq(valueOrElement)){ // use jQuery to get the value + var data = $(valueOrElement).data('value'); + return F.is.defined(data) ? data : $(valueOrElement).html(); + } + if (F.is.defined(valueOrElement) && valueOrElement != null) return valueOrElement+''; // use the native toString of the value + return null; // otherwise we have no value so return null + }, + /** + * This is supplied the value retrieved from the {@link FooTable.Column#parse} function and must return a string, HTMLElement or jQuery object. + * The return value from this function is what is displayed in the cell in the table. + * @instance + * @protected + * @param {string} value - The value to format. + * @returns {(string|HTMLElement|jQuery)} + * @this FooTable.Column + */ + formatter: function(value){ + return value == null ? '' : value; + }, + /** + * Creates a cell for this column from the supplied {@link FooTable.Row} object. This allows different column types to return different types of cells. + * @instance + * @protected + * @param {FooTable.Row} row - The row to create the cell from. + * @returns {FooTable.Cell} + * @this FooTable.Column + */ + createCell: function(row){ + var element = F.is.jq(row.$el) ? row.$el.children('td,th').get(this.index) : null, + data = F.is.hash(row.value) ? row.value[this.name] : null; + return new F.Cell(this.ft, row, this, element || data); + } + }); + + F.columns = new F.ClassFactory(); + + F.columns.register('text', F.Column); + +})(jQuery, FooTable); +(function ($, F) { + + F.Component = F.Class.extend(/** @lends FooTable.Component */{ + /** + * The base class for all FooTable components. + * @constructs + * @extends FooTable.Class + * @param {FooTable.Table} instance - The parent {@link FooTable.Table} object for the component. + * @param {boolean} enabled - Whether or not the component is enabled. + * @throws {TypeError} The instance parameter must be an instance of {@link FooTable.Table}. + * @returns {FooTable.Component} + */ + construct: function (instance, enabled) { + if (!(instance instanceof F.Table)) + throw new TypeError('The instance parameter must be an instance of FooTable.Table.'); + + /** + * The parent {@link FooTable.Table} for the component. + * @type {FooTable.Table} + */ + this.ft = instance; + /** + * Whether or not this component is enabled. Disabled components only have there preinit method called allowing for this value to be overridden. + * @type {boolean} + */ + this.enabled = F.is.boolean(enabled) ? enabled : false; + }, + /** + * The preinit method is called during the parent {@link FooTable.Table} constructor call. + * @param {object} data - The jQuery.data() object of the root table. + * @instance + * @protected + * @function + */ + preinit: function(data){}, + /** + * The init method is called during the parent {@link FooTable.Table} constructor call. + * @instance + * @protected + * @function + */ + init: function(){}, + /** + * This method is called from the {@link FooTable.Table#destroy} method. + * @instance + * @protected + * @function + */ + destroy: function(){}, + /** + * This method is called from the {@link FooTable.Table#draw} method. + * @instance + * @protected + * @function + */ + predraw: function(){}, + /** + * This method is called from the {@link FooTable.Table#draw} method. + * @instance + * @protected + * @function + */ + draw: function(){}, + /** + * This method is called from the {@link FooTable.Table#draw} method. + * @instance + * @protected + * @function + */ + postdraw: function(){} + }); + + F.components = new F.ClassFactory(); + +})(jQuery, FooTable); +(function ($, F) { + /** + * Contains all the available options for the FooTable plugin. + * @name FooTable.Defaults + * @function + * @constructor + * @returns {FooTable.Defaults} + */ + F.Defaults = function () { + /** + * Whether or not events raised using the {@link FooTable.Table#raise} method are propagated up the DOM. By default this is set to false and all events bubble up the DOM as per usual + * however the reason for this option is if we have nested tables. If false the parent table would receive all the events raised by it's children and any handlers bound to both the + * parent and child would be triggered which is not the desired behavior. + * @type {boolean} + * @default false + */ + this.stopPropagation = false; + /** + * An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s). + * @type {object.} + * @default NULL + * @example This example shows how to pass an object containing the events and handlers. + * "on": { + * "click": function(e){ + * // bind a custom click event to do something whenever the table is clicked + * }, + * "init.ft.table": function(e, ft){ + * // bind to the FooTable initialize event to do something + * } + * } + */ + this.on = null; + }; + + /** + * Contains all the default options for the plugin. + * @type {FooTable.Defaults} + */ + F.defaults = new F.Defaults(); + +})(jQuery, FooTable); +(function($, F){ + + F.Row = F.Class.extend(/** @lends FooTable.Row */{ + /** + * The row class containing all the properties for a row and its' cells. + * @constructs + * @extends FooTable.Class + * @param {FooTable.Table} table - The parent {@link FooTable.Table} this component belongs to. + * @param {Array.} columns - The array of {@link FooTable.Column} for this row. + * @param {(*|HTMLElement|jQuery)} dataOrElement - Either the data for the row (create) or the element (parse) for the row. + * @returns {FooTable.Row} + */ + construct: function (table, columns, dataOrElement) { + /** + * The {@link FooTable.Table} for the row. + * @type {FooTable.Table} + */ + this.ft = table; + /** + * The array of {@link FooTable.Column} for this row. + * @type {Array.} + */ + this.columns = columns; + + this.created = false; + this.define(dataOrElement); + }, + /** + * This is supplied either the object containing the values for the row or the row element/jQuery object if it exists. + * If supplied the element we need to set the $el property and parse the cells from it using the column index. + * If we have an object we parse the cells from it using the column name. + * @param {(object|jQuery)} dataOrElement - The row object or element to define the row. + */ + define: function(dataOrElement){ + /** + * The jQuery table row object this instance wraps. + * @instance + * @protected + * @type {jQuery} + */ + this.$el = F.is.element(dataOrElement) || F.is.jq(dataOrElement) ? $(dataOrElement) : null; + /** + * The jQuery toggle element for the row. + * @instance + * @protected + * @type {jQuery} + */ + this.$toggle = $('', {'class': 'footable-toggle fooicon fooicon-plus'}); + + var isObj = F.is.hash(dataOrElement), + hasOptions = isObj && F.is.hash(dataOrElement.options) && F.is.hash(dataOrElement.value); + + /** + * The value of the row. + * @instance + * @protected + * @type {Object} + */ + this.value = isObj ? (hasOptions ? dataOrElement.value : dataOrElement) : null; + + /** + * Contains any options for the row. + * @type {object} + */ + this.o = $.extend(true, { + expanded: false, + classes: null, + style: null + }, hasOptions ? dataOrElement.options : {}); + + /** + * Whether or not this row is expanded and will display it's detail row when there are any hidden columns. + * @instance + * @protected + * @type {boolean} + */ + this.expanded = F.is.jq(this.$el) ? (this.$el.data('expanded') || this.o.expanded) : this.o.expanded; + /** + * An array of CSS classes for the row. + * @instance + * @protected + * @type {Array.} + */ + this.classes = F.is.jq(this.$el) && this.$el.attr('class') ? this.$el.attr('class').match(/\S+/g) : (F.is.array(this.o.classes) ? this.o.classes : (F.is.string(this.o.classes) ? this.o.classes.match(/\S+/g) : [])); + /** + * The inline styles for the row. + * @instance + * @protected + * @type {object} + */ + this.style = F.is.jq(this.$el) && this.$el.attr('style') ? F.css2json(this.$el.attr('style')) : (F.is.hash(this.o.style) ? this.o.style : (F.is.string(this.o.style) ? F.css2json(this.o.style) : {})); + + /** + * The cells array. This is populated before the call to the {@link FooTable.Row#$create} method. + * @instance + * @type {Array.} + */ + this.cells = this.createCells(); + + // this ensures the value contains the parsed cell values and not the supplied values + var self = this; + self.value = {}; + F.arr.each(self.cells, function(cell){ + self.value[cell.column.name] = cell.val(); + }); + }, + /** + * After the row has been defined this ensures that the $el property is a jQuery object by either creating or updating the current value. + * @instance + * @protected + * @this FooTable.Row + */ + $create: function(){ + if (this.created) return; + (this.$el = F.is.jq(this.$el) ? this.$el : $('')) + .data('__FooTableRow__', this); + + this._setClasses(this.$el); + this._setStyle(this.$el); + + if (this.ft.rows.toggleColumn == 'last') this.$toggle.addClass('last-column'); + + this.$details = $('', { 'class': 'footable-detail-row' }) + .append($('', { colspan: this.ft.columns.visibleColspan }) + .append($('', { 'class': 'footable-details ' + this.ft.classes.join(' ') }) + .append(''))); + + var self = this; + F.arr.each(self.cells, function(cell){ + if (!cell.created) cell.$create(); + self.$el.append(cell.$el); + }); + self.$el.off('click.ft.row').on('click.ft.row', { self: self }, self._onToggle); + this.created = true; + }, + /** + * This is called during the construct method and uses the current column definitions to create an array of {@link FooTable.Cell} objects for the row. + * @instance + * @protected + * @returns {Array.} + * @this FooTable.Row + */ + createCells: function(){ + var self = this; + return F.arr.map(self.columns, function(col){ + return col.createCell(self); + }); + }, + /** + * Allows easy access to getting or setting the row's data. If the data is set all associated properties are also updated along with the actual element. + * Using this method also allows us to supply an object containing options and the data for the row at the same time. + * @instance + * @param {object} [data] - The data to set for the row. If not supplied the current value of the row is returned. + * @param {boolean} [redraw=true] - Whether or not to redraw the row once the value has been set. + * @returns {(*|undefined)} + */ + val: function(data, redraw){ + var self = this; + if (!F.is.hash(data)){ + // get - check the value property and build it from the cells if required. + if (!F.is.hash(this.value) || F.is.emptyObject(this.value)){ + this.value = {}; + F.arr.each(this.cells, function(cell){ + self.value[cell.column.name] = cell.val(); + }); + } + return this.value; + } + // set + this.collapse(false); + var isObj = F.is.hash(data), + hasOptions = isObj && F.is.hash(data.options) && F.is.hash(data.value); + + this.o = $.extend(true, { + expanded: self.expanded, + classes: self.classes, + style: self.style + }, hasOptions ? data.options : {}); + + this.expanded = this.o.expanded; + this.classes = F.is.array(this.o.classes) ? this.o.classes : (F.is.string(this.o.classes) ? this.o.classes.match(/\S+/g) : []); + this.style = F.is.hash(this.o.style) ? this.o.style : (F.is.string(this.o.style) ? F.css2json(this.o.style) : {}); + if (isObj) { + if ( hasOptions ) data = data.value; + if (F.is.hash(this.value)){ + for (var prop in data) { + if (!data.hasOwnProperty(prop)) continue; + this.value[prop] = data[prop]; + } + } else { + this.value = data; + } + } else { + this.value = null; + } + + F.arr.each(this.cells, function(cell){ + if (F.is.defined(self.value[cell.column.name])) cell.val(self.value[cell.column.name], false); + }); + + if (this.created){ + this._setClasses(this.$el); + this._setStyle(this.$el); + if (F.is.boolean(redraw) ? redraw : true) this.draw(); + } + }, + _setClasses: function($el){ + var hasClasses = !F.is.emptyArray(this.classes), + classes = null; + $el.removeAttr('class'); + if (!hasClasses) return; + else classes = this.classes.join(' '); + if (!F.is.emptyString(classes)){ + $el.addClass(classes); + } + }, + _setStyle: function($el){ + var hasStyle = !F.is.emptyObject(this.style), + style = null; + $el.removeAttr('style'); + if (!hasStyle) return; + else style = this.style; + if (F.is.hash(style)){ + $el.css(style); + } + }, + /** + * Sets the current row to an expanded state displaying any hidden columns in a detail row just below it. + * @instance + * @fires FooTable.Row#"expand.ft.row" + */ + expand: function(){ + if (!this.created) return; + var self = this; + /** + * The expand.ft.row event is raised before the the row is expanded. + * Calling preventDefault on this event will stop the row being expanded. + * @event FooTable.Row#"expand.ft.row" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {FooTable.Row} row - The row about to be expanded. + */ + self.ft.raise('expand.ft.row',[self]).then(function(){ + self.__hidden__ = F.arr.map(self.cells, function(cell){ + return cell.column.hidden && cell.column.visible ? cell : null; + }); + + if (self.__hidden__.length > 0){ + self.$details.insertAfter(self.$el) + .children('td').first() + .attr('colspan', self.ft.columns.visibleColspan); + + F.arr.each(self.__hidden__, function(cell){ + cell.collapse(); + }); + } + self.$el.attr('data-expanded', true); + self.$toggle.removeClass('fooicon-plus').addClass('fooicon-minus'); + self.expanded = true; + }); + }, + /** + * Sets the current row to a collapsed state removing the detail row if it exists. + * @instance + * @param {boolean} [setExpanded] - Whether or not to set the {@link FooTable.Row#expanded} property to false. + * @fires FooTable.Row#"collapse.ft.row" + */ + collapse: function(setExpanded){ + if (!this.created) return; + var self = this; + /** + * The collapse.ft.row event is raised before the the row is collapsed. + * Calling preventDefault on this event will stop the row being collapsed. + * @event FooTable.Row#"collapse.ft.row" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {FooTable.Row} row - The row about to be expanded. + */ + self.ft.raise('collapse.ft.row',[self]).then(function(){ + F.arr.each(self.__hidden__, function(cell){ + cell.restore(); + }); + self.$details.detach(); + self.$el.removeAttr('data-expanded'); + self.$toggle.removeClass('fooicon-minus').addClass('fooicon-plus'); + if (F.is.boolean(setExpanded) ? setExpanded : true) self.expanded = false; + }); + }, + /** + * Prior to drawing this moves the details contents back to there original cells and detaches the toggle element from the row. + * @instance + * @param {boolean} [detach] - Whether or not to detach the row. + * @this FooTable.Row + */ + predraw: function(detach){ + if (this.created){ + if (this.expanded){ + this.collapse(false); + } + this.$toggle.detach(); + detach = F.is.boolean(detach) ? detach : true; + if (detach) this.$el.detach(); + } + }, + /** + * Draws the current row and cells. + * @instance + * @this FooTable.Row + */ + draw: function($parent){ + if (!this.created) this.$create(); + if (F.is.jq($parent)) $parent.append(this.$el); + var self = this; + F.arr.each(self.cells, function(cell){ + cell.$el.css('display', (cell.column.hidden || !cell.column.visible ? 'none' : 'table-cell')); + if (self.ft.rows.showToggle && self.ft.columns.hasHidden){ + if ((self.ft.rows.toggleColumn == 'first' && cell.column.index == self.ft.columns.firstVisibleIndex) + || (self.ft.rows.toggleColumn == 'last' && cell.column.index == self.ft.columns.lastVisibleIndex)) { + cell.$el.prepend(self.$toggle); + } + } + cell.$el.add(cell.column.$el).removeClass('footable-first-visible footable-last-visible'); + if (cell.column.index == self.ft.columns.firstVisibleIndex){ + cell.$el.add(cell.column.$el).addClass('footable-first-visible'); + } + if (cell.column.index == self.ft.columns.lastVisibleIndex){ + cell.$el.add(cell.column.$el).addClass('footable-last-visible'); + } + }); + if (this.expanded){ + this.expand(); + } + }, + /** + * Toggles the row between it's expanded and collapsed state if there are hidden columns. + * @instance + * @this FooTable.Row + */ + toggle: function(){ + if (this.created && this.ft.columns.hasHidden){ + if (this.expanded) this.collapse(); + else this.expand(); + } + }, + /** + * Handles the toggle click event for rows. + * @instance + * @param {jQuery.Event} e - The jQuery.Event object for the click event. + * @private + * @this jQuery + */ + _onToggle: function (e) { + var self = e.data.self; + // only execute the toggle if the event.target is one of the approved initiators + if ($(e.target).is(self.ft.rows.toggleSelector)){ + self.toggle(); + } + } + }); + +})(jQuery, FooTable); + +(function ($, F) { + + /** + * An array of all currently loaded instances of the plugin. + * @protected + * @readonly + * @type {Array.} + */ + F.instances = []; + + F.Table = F.Class.extend(/** @lends FooTable.Table */{ + /** + * This class is the core of the plugin and drives the logic of all components. + * @constructs + * @this FooTable.Table + * @extends FooTable.Class + * @param {(HTMLTableElement|jQuery)} element - The element or jQuery table object to bind the plugin to. + * @param {object} options - The options to initialize the plugin with. + * @param {function} [ready] - A callback function to execute once the plugin is initialized. + * @returns {FooTable.Table} + */ + construct: function (element, options, ready) { + //BEGIN MEMBERS + /** + * The timeout ID for the resize event. + * @instance + * @private + * @type {?number} + */ + this._resizeTimeout = null; + /** + * The ID of the FooTable instance. + * @instance + * @type {number} + */ + this.id = F.instances.push(this); + /** + * Whether or not the plugin and all components and add-ons are fully initialized. + * @instance + * @type {boolean} + */ + this.initialized = false; + /** + * The jQuery table object the plugin is bound to. + * @instance + * @type {jQuery} + */ + this.$el = (F.is.jq(element) ? element : $(element)).first(); // ensure one table, one instance + /** + * A loader jQuery instance + * @instance + * @type {jQuery} + */ + this.$loader = $('
', { 'class': 'footable-loader' }).append($('', {'class': 'fooicon fooicon-loader'})); + /** + * The options for the plugin. This is a merge of user defined options and the default options. + * @instance + * @type {object} + */ + this.o = $.extend(true, {}, F.defaults, options); + /** + * The jQuery data object for the table at initialization. + * @instance + * @type {object} + */ + this.data = this.$el.data() || {}; + /** + * An array of all CSS classes on the table that do not start with "footable". + * @instance + * @protected + * @type {Array.} + */ + this.classes = []; + /** + * All components for this instance of the plugin. These are executed in the order they appear in the array for the initialize phase and in reverse order for the destroy phase of the plugin. + * @instance + * @protected + * @type {object} + * @prop {Array.} internal - The internal components for the plugin. These are executed either before all other components in the initialize phase or after them in the destroy phase of the plugin. + * @prop {Array.} core - The core components for the plugin. These are executed either after the internal components in the initialize phase or before them in the destroy phase of the plugin. + * @prop {Array.} custom - The custom components for the plugin. These are executed either after the core components in the initialize phase or before them in the destroy phase of the plugin. + */ + this.components = F.components.load((F.is.hash(this.data.components) ? this.data.components : this.o.components), this); + /** + * The breakpoints component for this instance of the plugin. + * @instance + * @type {FooTable.Breakpoints} + */ + this.breakpoints = this.use(FooTable.Breakpoints); + /** + * The columns component for this instance of the plugin. + * @instance + * @type {FooTable.Columns} + */ + this.columns = this.use(FooTable.Columns); + /** + * The rows component for this instance of the plugin. + * @instance + * @type {FooTable.Rows} + */ + this.rows = this.use(FooTable.Rows); + + //END MEMBERS + this._construct(ready); + }, + /** + * Once all properties are set this performs the actual initialization of the plugin calling the {@link FooTable.Table#_preinit} and + * {@link FooTable.Table#_init} methods as well as raising the {@link FooTable.Table#"ready.ft.table"} event. + * @this FooTable.Table + * @instance + * @param {function} [ready] - A callback function to execute once the plugin is initialized. + * @private + * @returns {jQuery.Promise} + * @fires FooTable.Table#"ready.ft.table" + */ + _construct: function(ready){ + var self = this; + this._preinit().then(function(){ + return self._init(); + }).always(function(arg){ + self.$el.show(); + if (F.is.error(arg)){ + console.error('FooTable: unhandled error thrown during initialization.', arg); + } else { + /** + * The postinit.ft.table event is raised after the plugin has been initialized and the table drawn. + * Calling preventDefault on this event will stop the ready callback being executed. + * @event FooTable.Table#"postinit.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return self.raise('ready.ft.table').then(function(){ + if (F.is.fn(ready)) ready.call(self, self); + }); + } + }); + }, + /** + * The preinit method is called prior to the plugins actual initialization and provides itself and it's components an opportunity to parse any additional option values. + * @instance + * @private + * @returns {jQuery.Promise} + * @fires FooTable.Table#"preinit.ft.table" + */ + _preinit: function(){ + var self = this; + /** + * The preinit.ft.table event is raised before any components. + * Calling preventDefault on this event will disable the entire plugin. + * @event FooTable.Table#"preinit.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {object} data - The jQuery data object from the root table element. + */ + return this.raise('preinit.ft.table', [self.data]).then(function(){ + var classes = (self.$el.attr('class') || '').match(/\S+/g) || []; + + self.o.ajax = F.checkFnValue(self, self.data.ajax, self.o.ajax); + self.o.stopPropagation = F.is.boolean(self.data.stopPropagation) + ? self.data.stopPropagation + : self.o.stopPropagation; + + for (var i = 0, len = classes.length; i < len; i++){ + if (!F.str.startsWith(classes[i], 'footable')) self.classes.push(classes[i]); + } + + self.$el.hide().after(self.$loader); + return self.execute(false, false, 'preinit', self.data); + }); + }, + /** + * Initializes this instance of the plugin and calls the callback function if one is supplied once complete. + * @this FooTable.Table + * @instance + * @private + * @return {jQuery.Promise} + * @fires FooTable.Table#"init.ft.table" + */ + _init: function(){ + var self = this; + /** + * The init.ft.table event is raised before any components are initialized. + * Calling preventDefault on this event will disable the entire plugin. + * @event FooTable.Table#"init.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return self.raise('init.ft.table').then(function(){ + var $thead = self.$el.children('thead'), + $tbody = self.$el.children('tbody'), + $tfoot = self.$el.children('tfoot'); + self.$el.addClass('footable footable-' + self.id); + if (F.is.hash(self.o.on)) self.$el.on(self.o.on); + if ($tfoot.length == 0) self.$el.append($tfoot = $('
')); + if ($tbody.length == 0) self.$el.append(''); + if ($thead.length == 0) self.$el.prepend($thead = $('')); + return self.execute(false, true, 'init').then(function(){ + self.$el.data('__FooTable__', self); + if ($tfoot.children('tr').length == 0) $tfoot.remove(); + if ($thead.children('tr').length == 0) $thead.remove(); + + /** + * The postinit.ft.table event is raised after any components are initialized but before the table is + * drawn for the first time. + * Calling preventDefault on this event will disable the initial drawing of the table. + * @event FooTable.Table#"postinit.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return self.raise('postinit.ft.table').then(function(){ + return self.draw(); + }).always(function(){ + $(window).off('resize.ft'+self.id, self._onWindowResize) + .on('resize.ft'+self.id, { self: self }, self._onWindowResize); + self.initialized = true; + }); + }); + }); + }, + /** + * Destroys this plugin removing it from the table. + * @this FooTable.Table + * @instance + * @fires FooTable.Table#"destroy.ft.table" + */ + destroy: function () { + var self = this; + /** + * The destroy.ft.table event is called before all core components. + * Calling preventDefault on this event will prevent the entire plugin from being destroyed. + * @event FooTable.Table#"destroy.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return self.raise('destroy.ft.table').then(function(){ + return self.execute(true, true, 'destroy').then(function () { + self.$el.removeData('__FooTable__').removeClass('footable-' + self.id); + if (F.is.hash(self.o.on)) self.$el.off(self.o.on); + $(window).off('resize.ft'+self.id, self._onWindowResize); + self.initialized = false; + }); + }).fail(function(err){ + if (F.is.error(err)){ + console.error('FooTable: unhandled error thrown while destroying the plugin.', err); + } + }); + }, + /** + * Raises an event on this instance supplying the args array as additional parameters to the handlers. + * @this FooTable.Table + * @instance + * @param {string} eventName - The name of the event to raise, this can include namespaces. + * @param {Array} [args] - An array containing additional parameters to be passed to any bound handlers. + * @returns {jQuery.Event} + */ + raise: function(eventName, args){ + var self = this, + debug = F.__debug__ && (F.is.emptyArray(F.__debug_options__.events) || F.arr.any(F.__debug_options__.events, function(name){ return F.str.contains(eventName, name); })); + args = args || []; + args.unshift(this); + return $.Deferred(function(d){ + var evt = $.Event(eventName); + if (self.o.stopPropagation == true){ + self.$el.one(eventName, function (e) {e.stopPropagation();}); + } + if (debug) console.log('FooTable:'+eventName+': ', args); + self.$el.trigger(evt, args); + if (evt.isDefaultPrevented()){ + if (debug) console.log('FooTable: default prevented for the "'+eventName+'" event.'); + d.reject(evt); + } else d.resolve(evt); + }); + }, + /** + * Attempts to retrieve the instance of the supplied component type for this instance. + * @this FooTable.Table + * @instance + * @param {object} type - The content type to retrieve for this instance. + * @returns {(*|null)} + */ + use: function(type){ + for (var i = 0, len = this.components.length; i < len; i++){ + if (this.components[i] instanceof type) return this.components[i]; + } + return null; + }, + /** + * Performs the drawing of the table. + * @this FooTable.Table + * @instance + * @protected + * @returns {jQuery.Promise} + * @fires FooTable.Table#"predraw.ft.table" + * @fires FooTable.Table#"draw.ft.table" + * @fires FooTable.Table#"postdraw.ft.table" + */ + draw: function () { + var self = this; + + // Clone the current table and insert it into the original's place + var $elCopy = self.$el.clone().insertBefore(self.$el); + + // Detach `self.$el` from the DOM, retaining its event handlers + self.$el.detach(); + + // when drawing the order that the components are executed is important so chain the methods but use promises to retain async safety. + return self.execute(false, true, 'predraw').then(function(){ + /** + * The predraw.ft.table event is raised after all core components and add-ons have executed there predraw functions but before they execute there draw functions. + * @event FooTable.Table#"predraw.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return self.raise('predraw.ft.table').then(function(){ + return self.execute(false, true, 'draw').then(function(){ + /** + * The draw.ft.table event is raised after all core components and add-ons have executed there draw functions. + * @event FooTable.Table#"draw.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return self.raise('draw.ft.table').then(function(){ + return self.execute(false, true, 'postdraw').then(function(){ + /** + * The postdraw.ft.table event is raised after all core components and add-ons have executed there postdraw functions. + * @event FooTable.Table#"postdraw.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return self.raise('postdraw.ft.table'); + }); + }); + }); + }); + }).fail(function(err){ + if (F.is.error(err)){ + console.error('FooTable: unhandled error thrown during a draw operation.', err); + } + }).always(function(){ + // Replace the copy that we added above with the modified `self.$el` + $elCopy.replaceWith(self.$el); + self.$loader.remove(); + }); + }, + /** + * Executes the specified method with the optional number of parameters on all components and waits for the promise from each to be resolved before executing the next. + * @this FooTable.Table + * @instance + * @protected + * @param {boolean} reverse - Whether or not to execute the component methods in the reverse order to what they were registered in. + * @param {boolean} enabled - Whether or not to execute the method on enabled components only. + * @param {string} methodName - The name of the method to execute. + * @param {*} [param1] - The first parameter for the method. + * @param {...*} [paramN] - Any number of additional parameters for the method. + * @returns {jQuery.Promise} + */ + execute: function(reverse, enabled, methodName, param1, paramN){ + var self = this, args = Array.prototype.slice.call(arguments); + reverse = args.shift(); + enabled = args.shift(); + var components = enabled ? F.arr.get(self.components, function(c){ return c.enabled; }) : self.components.slice(0); + args.unshift(reverse ? components.reverse() : components); + return self._execute.apply(self, args); + }, + /** + * Executes the specified method with the optional number of parameters on all supplied components waiting for the result of each before executing the next. + * @this FooTable.Table + * @instance + * @private + * @param {Array.} components - The components to call the method on. + * @param {string} methodName - The name of the method to execute + * @param {*} [param1] - The first parameter for the method. + * @param {...*} [paramN] - Any additional parameters for the method. + * @returns {jQuery.Promise} + */ + _execute: function(components, methodName, param1, paramN){ + if (!components || !components.length) return $.when(); + var self = this, args = Array.prototype.slice.call(arguments), + component; + components = args.shift(); + methodName = args.shift(); + component = components.shift(); + + if (!F.is.fn(component[methodName])) + return self._execute.apply(self, [components, methodName].concat(args)); + + return $.Deferred(function(d){ + try { + var result = component[methodName].apply(component, args); + if (F.is.promise(result)){ + return result.then(d.resolve, d.reject); + } else { + d.resolve(result); + } + } catch (err) { + d.reject(err); + } + }).then(function(){ + return self._execute.apply(self, [components, methodName].concat(args)); + }); + }, + /** + * Listens to the window resize event and performs a check to see if the breakpoint has changed. + * @this window + * @instance + * @private + * @fires FooTable.Table#"resize.ft.table" + */ + _onWindowResize: function (e) { + var self = e.data.self; + if (self._resizeTimeout != null) { clearTimeout(self._resizeTimeout); } + self._resizeTimeout = setTimeout(function () { + self._resizeTimeout = null; + /** + * The resize event is raised a short time after window resize operations cease. + * @event FooTable.Table#"resize.ft.table" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + self.raise('resize.ft.table').then(function(){ + self.breakpoints.check(); + }); + }, 300); + } + }); + +})(jQuery, FooTable); +(function($, F){ + + if (F.is.undef(window.moment)){ + // The DateColumn requires moment.js to parse and format date values. Goto http://momentjs.com/ to get it. + return; + } + + F.DateColumn = F.Column.extend(/** @lends FooTable.DateColumn */{ + /** + * The date column class is used to handle date values. This column is dependent on [moment.js]{@link http://momentjs.com/} to provide date parsing and formatting functionality. + * @constructs + * @extends FooTable.Column + * @param {FooTable.Table} instance - The parent {@link FooTable.Table} this column belongs to. + * @param {object} definition - An object containing all the properties to set for the column. + * @returns {FooTable.DateColumn} + */ + construct: function(instance, definition){ + this._super(instance, definition, 'date'); + /** + * The format string to use when parsing and formatting dates. + * @instance + * @type {string} + */ + this.formatString = F.is.string(definition.formatString) ? definition.formatString : 'MM-DD-YYYY'; + }, + /** + * This is supplied either the cell value or jQuery object to parse. Any value can be returned from this method and will be provided to the {@link FooTable.DateColumn#format} function + * to generate the cell contents. + * @instance + * @protected + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {(moment|null)} + * @this FooTable.DateColumn + */ + parser: function(valueOrElement){ + if (F.is.element(valueOrElement) || F.is.jq(valueOrElement)){ + var data = $(valueOrElement).data('value'); + valueOrElement = F.is.defined(data) ? data : $(valueOrElement).text(); + if (F.is.string(valueOrElement)) valueOrElement = isNaN(valueOrElement) ? valueOrElement : +valueOrElement; + } + if (F.is.date(valueOrElement)) return moment(valueOrElement); + if (F.is.object(valueOrElement) && F.is.boolean(valueOrElement._isAMomentObject)) return valueOrElement; + if (F.is.string(valueOrElement)){ + // if it looks like a number convert it and do nothing else otherwise create a new moment using the string value and formatString + if (isNaN(valueOrElement)){ + return moment(valueOrElement, this.formatString); + } else { + valueOrElement = +valueOrElement; + } + } + if (F.is.number(valueOrElement)){ + return moment(valueOrElement); + } + return null; + }, + /** + * This is supplied the value retrieved from the {@link FooTable.DateColumn#parser} function and must return a string, HTMLElement or jQuery object. + * The return value from this function is what is displayed in the cell in the table. + * @instance + * @protected + * @param {*} value - The value to format. + * @returns {(string|HTMLElement|jQuery)} + * @this FooTable.DateColumn + */ + formatter: function(value){ + return F.is.object(value) && F.is.boolean(value._isAMomentObject) && value.isValid() ? value.format(this.formatString) : ''; + }, + /** + * This is supplied either the cell value or jQuery object to parse. A string value must be returned from this method and will be used during filtering operations. + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {string} + * @this FooTable.DateColumn + */ + filterValue: function(valueOrElement){ + // if we have an element or a jQuery object use jQuery to get the value + if (F.is.element(valueOrElement) || F.is.jq(valueOrElement)) valueOrElement = $(valueOrElement).data('filterValue') || $(valueOrElement).text(); + // if options are supplied with the value + if (F.is.hash(valueOrElement) && F.is.hash(valueOrElement.options)){ + if (F.is.string(valueOrElement.options.filterValue)) valueOrElement = valueOrElement.options.filterValue; + if (F.is.defined(valueOrElement.value)) valueOrElement = valueOrElement.value; + } + // if the value is a moment object just return the formatted value + if (F.is.object(valueOrElement) && F.is.boolean(valueOrElement._isAMomentObject)) return valueOrElement.format(this.formatString); + // if its a string + if (F.is.string(valueOrElement)){ + // if its not a number return it + if (isNaN(valueOrElement)){ + return valueOrElement; + } else { // otherwise convert it and carry on + valueOrElement = +valueOrElement; + } + } + // if the value is a number or date convert to a moment object and return the formatted result. + if (F.is.number(valueOrElement) || F.is.date(valueOrElement)){ + return moment(valueOrElement).format(this.formatString); + } + // try use the native toString of the value if its not undefined or null + if (F.is.defined(valueOrElement) && valueOrElement != null) return valueOrElement+''; + return ''; // otherwise we have no value so return an empty string + } + }); + + F.columns.register('date', F.DateColumn); + +})(jQuery, FooTable); + +(function($, F){ + + F.HTMLColumn = F.Column.extend(/** @lends FooTable.HTMLColumn */{ + /** + * The HTML column class is used to handle any raw HTML columns. + * @constructs + * @extends FooTable.Column + * @param {FooTable.Table} instance - The parent {@link FooTable.Table} this column belongs to. + * @param {object} definition - An object containing all the properties to set for the column. + * @returns {FooTable.HTMLColumn} + */ + construct: function(instance, definition){ + this._super(instance, definition, 'html'); + }, + /** + * This is supplied either the cell value or jQuery object to parse. Any value can be returned from this method and will be provided to the {@link FooTable.HTMLColumn#format} function + * to generate the cell contents. + * @instance + * @protected + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {(jQuery|null)} + * @this FooTable.HTMLColumn + */ + parser: function(valueOrElement){ + if (F.is.string(valueOrElement)) valueOrElement = $($.trim(valueOrElement)); + if (F.is.element(valueOrElement)) valueOrElement = $(valueOrElement); + if (F.is.jq(valueOrElement)){ + var tagName = valueOrElement.prop('tagName').toLowerCase(); + if (tagName == 'td' || tagName == 'th'){ + var data = valueOrElement.data('value'); + return F.is.defined(data) ? data : valueOrElement.contents(); + } + return valueOrElement; + } + return null; + } + }); + + F.columns.register('html', F.HTMLColumn); + +})(jQuery, FooTable); +(function($, F){ + + F.NumberColumn = F.Column.extend(/** @lends FooTable.NumberColumn */{ + /** + * The number column class is used to handle simple number columns. + * @constructs + * @extends FooTable.Column + * @param {FooTable.Table} instance - The parent {@link FooTable.Table} this column belongs to. + * @param {object} definition - An object containing all the properties to set for the column. + * @returns {FooTable.NumberColumn} + */ + construct: function(instance, definition){ + this._super(instance, definition, 'number'); + this.decimalSeparator = F.is.string(definition.decimalSeparator) ? definition.decimalSeparator : '.'; + this.thousandSeparator = F.is.string(definition.thousandSeparator) ? definition.thousandSeparator : ','; + this.decimalSeparatorRegex = new RegExp(F.str.escapeRegExp(this.decimalSeparator), 'g'); + this.thousandSeparatorRegex = new RegExp(F.str.escapeRegExp(this.thousandSeparator), 'g'); + this.cleanRegex = new RegExp('[^0-9' + F.str.escapeRegExp(this.decimalSeparator) + ']', 'g'); + }, + /** + * This is supplied either the cell value or jQuery object to parse. Any value can be returned from this method and will be provided to the {@link FooTable.Column#formatter} function + * to generate the cell contents. + * @instance + * @protected + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {(number|null)} + * @this FooTable.NumberColumn + */ + parser: function(valueOrElement){ + if (F.is.element(valueOrElement) || F.is.jq(valueOrElement)){ + var data = $(valueOrElement).data('value'); + valueOrElement = F.is.defined(data) ? data : $(valueOrElement).text().replace(this.cleanRegex, ''); + } + if (F.is.string(valueOrElement)){ + valueOrElement = valueOrElement.replace(this.thousandSeparatorRegex, '').replace(this.decimalSeparatorRegex, '.'); + valueOrElement = parseFloat(valueOrElement); + } + if (F.is.number(valueOrElement)) return valueOrElement; + return null; + }, + /** + * This is supplied the value retrieved from the {@link FooTable.NumberColumn#parse} function and must return a string, HTMLElement or jQuery object. + * The return value from this function is what is displayed in the cell in the table. + * @instance + * @protected + * @param {number} value - The value to format. + * @returns {(string|HTMLElement|jQuery)} + * @this FooTable.NumberColumn + */ + formatter: function(value){ + if (value == null) return ''; + var s = (value + '').split('.'); + if (s.length == 2 && s[0].length > 3) { + s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, this.thousandSeparator); + } + return s.join(this.decimalSeparator); + } + }); + + F.columns.register('number', F.NumberColumn); + +})(jQuery, FooTable); +(function($, F){ + + F.Breakpoint = F.Class.extend(/** @lends FooTable.Breakpoint */{ + /** + * The breakpoint class containing the name and maximum width for the breakpoint. + * @constructs + * @extends FooTable.Class + * @param {string} name - The name of the breakpoint. Must contain no spaces or special characters. + * @param {number} width - The width of the breakpoint in pixels. + * @returns {FooTable.Breakpoint} + */ + construct: function(name, width){ + /** + * The name of the breakpoint. + * @type {string} + */ + this.name = name; + /** + * The maximum width of the breakpoint in pixels. + * @type {number} + */ + this.width = width; + } + }); + +})(jQuery, FooTable); +(function($, F){ + F.Breakpoints = F.Component.extend(/** @lends FooTable.Breakpoints */{ + /** + * Contains the logic to calculate and apply breakpoints for the plugin. + * @constructs + * @extends FooTable.Component + * @param {FooTable.Table} table - The parent {@link FooTable.Table} this component belongs to. + * @returns {FooTable.Breakpoints} + */ + construct: function(table){ + // call the base class constructor + this._super(table, true); + + /* PROTECTED */ + /** + * This provides a shortcut to the {@link FooTable.Table#options} object. + * @protected + * @type {FooTable.Table#options} + */ + this.o = table.o; + + /* PUBLIC */ + /** + * The current breakpoint. + * @type {FooTable.Breakpoint} + */ + this.current = null; + /** + * An array of {@link FooTable.Breakpoint} objects created from parsing the options. + * @type {Array.} + */ + this.array = []; + /** + * Whether or not breakpoints cascade. When set to true all breakpoints larger than the current will be hidden along with it. + * @type {boolean} + */ + this.cascade = this.o.cascade; + /** + * Whether or not to calculate breakpoints on the width of the parent element rather than the viewport. + * @type {boolean} + */ + this.useParentWidth = this.o.useParentWidth; + /** + * This value is updated each time the current breakpoint changes and contains a space delimited string of the names of the current breakpoint and all those smaller than it. + * @type {string} + */ + this.hidden = null; + + /* PRIVATE */ + /** + * This value is set once when the {@link FooTable.Breakpoints#array} is generated and contains a space delimited string of all the breakpoint class names. + * @type {string} + * @private + */ + this._classNames = ''; + + // check if a function was supplied to override the default getWidth + this.getWidth = F.checkFnValue(this, this.o.getWidth, this.getWidth); + }, + + /* PROTECTED */ + /** + * Checks the supplied data and options for the breakpoints component. + * @instance + * @protected + * @param {object} data - The jQuery data object from the parent table. + * @fires FooTable.Breakpoints#"preinit.ft.breakpoints" + */ + preinit: function(data){ + var self = this; + /** + * The preinit.ft.breakpoints event is raised before any UI is created and provides the tables jQuery data object for additional options parsing. + * Calling preventDefault on this event will disable the entire plugin. + * @event FooTable.Breakpoints#"preinit.ft.breakpoints" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {object} data - The jQuery data object of the table raising the event. + */ + return this.ft.raise('preinit.ft.breakpoints', [data]).then(function(){ + self.cascade = F.is.boolean(data.cascade) ? data.cascade : self.cascade; + self.o.breakpoints = F.is.hash(data.breakpoints) ? data.breakpoints : self.o.breakpoints; + self.getWidth = F.checkFnValue(self, data.getWidth, self.getWidth); + if (self.o.breakpoints == null) self.o.breakpoints = { "xs": 480, "sm": 768, "md": 992, "lg": 1200 }; + // Create a nice friendly array to work with out of the breakpoints object. + for (var name in self.o.breakpoints) { + if (!self.o.breakpoints.hasOwnProperty(name)) continue; + self.array.push(new F.Breakpoint(name, self.o.breakpoints[name])); + self._classNames += 'breakpoint-' + name + ' '; + } + // Sort the breakpoints so the largest is checked first + self.array.sort(function (a, b) { + return b.width - a.width; + }); + }); + }, + /** + * Initializes the class parsing the options into a sorted array of {@link FooTable.Breakpoint} objects. + * @instance + * @protected + * @fires FooTable.Breakpoints#"init.ft.breakpoints" + */ + init: function(){ + var self = this; + /** + * The init.ft.breakpoints event is raised before any UI is generated. + * Calling preventDefault on this event will disable the entire plugin. + * @event FooTable.Breakpoints#"init.ft.breakpoints" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return this.ft.raise('init.ft.breakpoints').then(function(){ + self.current = self.get(); + }); + }, + /** + * Whenever the table is drawn this ensures the correct breakpoint class is applied to the table. + * @instance + * @protected + */ + draw: function(){ + this.ft.$el.removeClass(this._classNames).addClass('breakpoint-' + this.current.name); + }, + + /* PUBLIC */ + /** + * Calculates the current breakpoint from the {@link FooTable.Breakpoints#array} and sets the {@link FooTable.Breakpoints#current} property. + * @instance + * @returns {FooTable.Breakpoint} + */ + calculate: function(){ + var self = this, current = null, hidden = [], breakpoint, prev = null, width = self.getWidth(); + for (var i = 0, len = self.array.length; i < len; i++) { + breakpoint = self.array[i]; + // if the width is smaller than the smallest breakpoint set the smallest as the current. + // if the width is larger than the largest breakpoint set the largest as the current. + // otherwise if the width is somewhere in between check all breakpoints testing if the width + // is greater than the current but smaller than the previous. + if ((!current && i == len -1) + || (width >= breakpoint.width && (prev instanceof F.Breakpoint ? width < prev.width : true))) { + current = breakpoint; + } + if (!current) hidden.push(breakpoint.name); + prev = breakpoint; + } + hidden.push(current.name); + self.hidden = hidden.join(' '); + return current; + }, + /** + * Supplied a columns breakpoints this returns a boolean value indicating whether or not the column is visible. + * @param {string} breakpoints - A space separated string of breakpoint names. + * @returns {boolean} + */ + visible: function(breakpoints){ + if (F.is.emptyString(breakpoints)) return true; + if (breakpoints === 'all') return false; + var parts = breakpoints.split(' '), i = 0, len = parts.length; + for (; i < len; i++){ + if (this.cascade ? F.str.containsWord(this.hidden, parts[i]) : parts[i] == this.current.name) return false; + } + return true; + }, + /** + * Performs a check between the current breakpoint and the previous breakpoint and performs a redraw if they differ. + * @instance + * @fires FooTable.Breakpoints#"before.ft.breakpoints" + * @fires FooTable.Breakpoints#"after.ft.breakpoints" + */ + check: function(){ + var self = this, bp = self.get(); + if (!(bp instanceof F.Breakpoint) + || bp == self.current) + return; + + /** + * The before.ft.breakpoints event is raised if the breakpoint has changed but before the UI is redrawn and is supplied both the current breakpoint + * and the next "new" one that is about to be applied. + * Calling preventDefault on this event will prevent the next breakpoint from being applied. + * @event FooTable.Breakpoints#"before.ft.breakpoints" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {FooTable.Breakpoint} current - The current breakpoint. + * @param {FooTable.Breakpoint} next - The breakpoint that is about to be applied. + */ + self.ft.raise('before.ft.breakpoints', [self.current, bp]).then(function(){ + var previous = self.current; + self.current = bp; + return self.ft.draw().then(function(){ + /** + * The after.ft.breakpoints event is raised after the breakpoint has changed and the UI is redrawn and is supplied both the "new" current breakpoint + * and the previous one that was replaced. + * @event FooTable.Breakpoints#"after.ft.breakpoints" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {FooTable.Breakpoint} current - The current breakpoint. + * @param {FooTable.Breakpoint} previous - The breakpoint that was just replaced. + */ + self.ft.raise('after.ft.breakpoints', [self.current, previous]); + }); + }); + }, + /** + * Attempts to return a {@link FooTable.Breakpoint} instance when passed a {@link FooTable.Breakpoint}, + * the {@link FooTable.Breakpoint#name} string or if nothing is supplied the current breakpoint. + * @instance + * @param {(FooTable.Breakpoint|string|number)} [breakpoint] - The breakpoint to retrieve. + * @returns {FooTable.Breakpoint} + */ + get: function(breakpoint){ + if (F.is.undef(breakpoint)) return this.calculate(); + if (breakpoint instanceof F.Breakpoint) return breakpoint; + if (F.is.string(breakpoint)) return F.arr.first(this.array, function (bp) { return bp.name == breakpoint; }); + if (F.is.number(breakpoint)) return breakpoint >= 0 && breakpoint < this.array.length ? this.array[breakpoint] : null; + return null; + }, + /** + * Gets the width used to determine breakpoints whether it be from the viewport, parent or a custom function. + * @instance + * @returns {number} + */ + getWidth: function(){ + if (F.is.fn(this.o.getWidth)) return this.o.getWidth(this.ft); + if (this.useParentWidth == true) return this.getParentWidth(); + return this.getViewportWidth(); + }, + /** + * Gets the tables direct parents width. + * @instance + * @returns {number} + */ + getParentWidth: function(){ + return this.ft.$el.parent().width(); + }, + /** + * Gets the current viewport width. + * @instance + * @returns {number} + */ + getViewportWidth: function(){ + return Math.max(document.documentElement.clientWidth, window.innerWidth, 0); + } + }); + + F.components.register('breakpoints', F.Breakpoints, 1000); + +})(jQuery, FooTable); +(function(F){ + /** + * A space delimited string of breakpoint names that specify when the column will be hidden. You can also specify "all" to make a column permanently display in an expandable detail row. + * @type {string} + * @default null + * @example + * breakpoints: "md" + */ + F.Column.prototype.breakpoints = null; + + F.Column.prototype.__breakpoints_define__ = function(definition){ + this.breakpoints = F.is.emptyString(definition.breakpoints) ? null : definition.breakpoints; + }; + + F.Column.extend('define', function(definition){ + this._super(definition); + this.__breakpoints_define__(definition); + }); +})(FooTable); +(function(F){ + /** + * An object containing the breakpoints for the plugin. + * @type {object.} + * @default { "xs": 480, "sm": 768, "md": 992, "lg": 1200 } + */ + F.Defaults.prototype.breakpoints = null; + + /** + * Whether or not breakpoints cascade. When set to true all breakpoints larger than the current will also be hidden along with it. + * @type {boolean} + * @default false + */ + F.Defaults.prototype.cascade = false; + + /** + * Whether or not to calculate breakpoints on the width of the parent element rather than the viewport. + * @type {boolean} + * @default false + */ + F.Defaults.prototype.useParentWidth = false; + + /** + * A function used to override the default getWidth function with a custom one. + * @type {function} + * @default null + * @example + * getWidth: function(instance){ + * if (instance.o.useParentWidth == true) return instance.$el.parent().width(); + * return instance.breakpoints.getViewportWidth(); + * } + */ + F.Defaults.prototype.getWidth = null; +})(FooTable); +(function($, F){ + F.Columns = F.Component.extend(/** @lends FooTable.Columns */{ + /** + * The columns class contains all the logic for handling columns. + * @constructs + * @extends FooTable.Component + * @param {FooTable.Table} table - The parent {@link FooTable.Table} this component belongs to. + * @returns {FooTable.Columns} + */ + construct: function(table){ + // call the base class constructor + this._super(table, true); + + /* PROTECTED */ + /** + * This provides a shortcut to the {@link FooTable.Table#options} object. + * @protected + * @type {FooTable.Table#options} + */ + this.o = table.o; + + /* PUBLIC */ + /** + * An array of {@link FooTable.Column} objects created from parsing the options and/or DOM. + * @type {Array.} + */ + this.array = []; + /** + * The jQuery header row object. + * @type {jQuery} + */ + this.$header = null; + /** + * Whether or not to display the header row. + * @type {boolean} + */ + this.showHeader = table.o.showHeader; + + this._fromHTML = F.is.emptyArray(table.o.columns) && !F.is.promise(table.o.columns); + }, + + /* PROTECTED */ + /** + * This parses the columns from either the tables rows or the supplied options. + * @instance + * @protected + * @param {object} data - The tables jQuery data object. + * @returns {jQuery.Promise} + * @this FooTable.Columns + */ + parse: function(data){ + var self = this; + return $.Deferred(function(d){ + function merge(cols1, cols2){ + var merged = []; + // check if either of the arrays is empty as it can save us having to merge them by index. + if (cols1.length == 0 || cols2.length == 0){ + merged = cols1.concat(cols2); + } else { + // at this point we have two arrays of column definitions, we now need to merge them based on there index properties + // first figure out the highest column index provided so we can loop that many times to merge all columns and provide + // defaults where nothing was specified (fill in the gaps in the array as it were). + var highest = 0; + F.arr.each(cols1.concat(cols2), function(c){ + if (c.index > highest) highest = c.index; + }); + highest++; + for (var i = 0, cols1_c, cols2_c; i < highest; i++){ + cols1_c = {}; + F.arr.each(cols1, function(c){ + if (c.index == i){ + cols1_c = c; + return false; + } + }); + cols2_c = {}; + F.arr.each(cols2, function(c){ + if (c.index == i){ + cols2_c = c; + return false; + } + }); + merged.push($.extend(true, {}, cols1_c, cols2_c)); + } + } + return merged; + } + + var json = [], html = []; + // get the column options from the content + var $header = self.ft.$el.find('tr.footable-header, thead > tr:last:has([data-breakpoints]), tbody > tr:first:has([data-breakpoints]), thead > tr:last, tbody > tr:first').first(), $cell, cdata; + if ($header.length > 0){ + var virtual = $header.parent().is('tbody') && $header.children().length == $header.children('td').length; + if (!virtual) self.$header = $header.addClass('footable-header'); + $header.children('td,th').each(function(i, cell){ + $cell = $(cell); + cdata = $cell.data(); + cdata.index = i; + cdata.$el = $cell; + cdata.virtual = virtual; + html.push(cdata); + }); + if (virtual) self.showHeader = false; + } + // get the supplied column options + if (F.is.array(self.o.columns) && !F.is.emptyArray(self.o.columns)){ + F.arr.each(self.o.columns, function(c, i){ + c.index = i; + json.push(c); + }); + self.parseFinalize(d, merge(json, html)); + } else if (F.is.promise(self.o.columns)){ + self.o.columns.then(function(cols){ + F.arr.each(cols, function(c, i){ + c.index = i; + json.push(c); + }); + self.parseFinalize(d, merge(json, html)); + }, function(xhr){ + d.reject(Error('Columns ajax request error: ' + xhr.status + ' (' + xhr.statusText + ')')); + }); + } else { + self.parseFinalize(d, merge(json, html)); + } + }); + }, + /** + * Used to finalize the parsing of columns it is supplied the parse deferred object which must be resolved with an array of {@link FooTable.Column} objects + * or rejected with an error. + * @instance + * @protected + * @param {jQuery.Deferred} deferred - The deferred object used for parsing. + * @param {Array.} cols - An array of all merged column definitions. + */ + parseFinalize: function(deferred, cols){ + // we now have a merged array of all column definitions supplied to the plugin, time to make the objects. + var self = this, columns = [], column; + F.arr.each(cols, function(def){ + // if we have a column registered using the definition type then create an instance of that column otherwise just create a default text column. + if (column = F.columns.contains(def.type) ? F.columns.make(def.type, self.ft, def) : new F.Column(self.ft, def)) + columns.push(column); + }); + if (F.is.emptyArray(columns)){ + deferred.reject(Error("No columns supplied.")); + } else { + // make sure to sort by the column index as the merge process may have mixed them up + columns.sort(function(a, b){ return a.index - b.index; }); + deferred.resolve(columns); + } + }, + /** + * The columns preinit method is used to parse and check the column options supplied from both static content and through the constructor. + * @instance + * @protected + * @param {object} data - The jQuery data object from the root table element. + * @this FooTable.Columns + */ + preinit: function(data){ + var self = this; + /** + * The preinit.ft.columns event is raised before any UI is created and provides the tables jQuery data object for additional options parsing. + * Calling preventDefault on this event will disable the entire plugin. + * @event FooTable.Columns#"preinit.ft.columns" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {object} data - The jQuery data object of the table raising the event. + */ + return self.ft.raise('preinit.ft.columns', [data]).then(function(){ + return self.parse(data).then(function(columns){ + self.array = columns; + self.showHeader = F.is.boolean(data.showHeader) ? data.showHeader : self.showHeader; + }); + }); + }, + /** + * Initializes the columns creating the table header if required. + * @instance + * @protected + * @fires FooTable.Columns#"init.ft.columns" + * @this FooTable.Columns + */ + init: function(){ + var self = this; + /** + * The init.ft.columns event is raised after the header row is created/parsed for column data. + * @event FooTable.Columns#"init.ft.columns" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} instance - The instance of the plugin raising the event. + * @param {Array.} columns - The array of {@link FooTable.Column} objects parsed from the options and/or DOM. + */ + return this.ft.raise('init.ft.columns', [ self.array ]).then(function(){ + self.$create(); + }); + }, + /** + * Destroys the columns component removing any UI generated from the table. + * @instance + * @protected + * @fires FooTable.Columns#"destroy.ft.columns" + */ + destroy: function(){ + /** + * The destroy.ft.columns event is raised before its UI is removed. + * Calling preventDefault on this event will prevent the component from being destroyed. + * @event FooTable.Columns#"destroy.ft.columns" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + var self = this; + this.ft.raise('destroy.ft.columns').then(function(){ + if (!self._fromHTML) self.$header.remove(); + }); + }, + /** + * The predraw method called from within the {@link FooTable.Table#draw} method. + * @instance + * @protected + * @this FooTable.Columns + */ + predraw: function(){ + var self = this, first = true; + self.visibleColspan = 0; + self.firstVisibleIndex = 0; + self.lastVisibleIndex = 0; + self.hasHidden = false; + F.arr.each(self.array, function(col){ + col.hidden = !self.ft.breakpoints.visible(col.breakpoints); + if (!col.hidden && col.visible){ + if (first){ + self.firstVisibleIndex = col.index; + first = false; + } + self.lastVisibleIndex = col.index; + self.visibleColspan++; + } + if (col.hidden) self.hasHidden = true; + }); + self.ft.$el.toggleClass('breakpoint', self.hasHidden); + }, + /** + * Performs the actual drawing of the columns, hiding or displaying them depending on there breakpoints. + * @instance + * @protected + * @this FooTable.Columns + */ + draw: function(){ + F.arr.each(this.array, function(col){ + col.$el.css('display', (col.hidden || !col.visible ? 'none' : 'table-cell')); + }); + if (!this.showHeader && F.is.jq(this.$header.parent())){ + this.$header.detach(); + } + }, + /** + * Creates the header row for the table from the parsed column definitions. + * @instance + * @protected + * @this FooTable.Columns + */ + $create: function(){ + var self = this; + self.$header = F.is.jq(self.$header) ? self.$header : $('', {'class': 'footable-header'}); + self.$header.children('th,td').detach(); + F.arr.each(self.array, function(col){ + self.$header.append(col.$el); + }); + if (self.showHeader && !F.is.jq(self.$header.parent())){ + self.ft.$el.children('thead').append(self.$header); + } + }, + /** + * Attempts to return a {@link FooTable.Column} instance when passed the {@link FooTable.Column} instance, the {@link FooTable.Column#name} string or the {@link FooTable.Column#index} number. + * If supplied a function this will return an array by iterating all columns passing the index and column itself to the supplied callback as arguments. + * Returning true in the callback will include the column in the result. + * @instance + * @param {(FooTable.Column|string|number|function)} column - The column to retrieve. + * @returns {(Array.|FooTable.Column|null)} The column if one is found otherwise it returns NULL. + * @example + * var column = columns.get('id'); + * if (column instanceof FooTable.Column){ + * // found the "id" column + * } else { + * // no column with a name of "id" exists + * } + * // to get an array of all hidden columns + * var columns = columns.get(function(col){ + * return col.hidden; + * }); + */ + get: function(column){ + if (column instanceof F.Column) return column; + if (F.is.string(column)) return F.arr.first(this.array, function (col) { return col.name == column; }); + if (F.is.number(column)) return F.arr.first(this.array, function (col) { return col.index == column; }); + if (F.is.fn(column)) return F.arr.get(this.array, column); + return null; + }, + /** + * Takes an array of column names, index's or actual {@link FooTable.Column} and ensures that an array of only {@link FooTable.Column} is returned. + * @instance + * @param {(Array.|Array.|Array.)} columns - The array of column names, index's or {@link FooTable.Column} to check. + * @returns {Array.} + */ + ensure: function(columns){ + var self = this, result = []; + if (!F.is.array(columns)) return result; + F.arr.each(columns, function(name){ + result.push(self.get(name)); + }); + return result; + } + }); + + F.components.register('columns', F.Columns, 900); + +})(jQuery, FooTable); +(function(F){ + /** + * An array containing the column options or a jQuery promise that resolves returning the columns. The index of the definitions must match the index of each column as it should appear in the table. For more information on the options available see the {@link FooTable.Column} object. + * @type {(Array.|jQuery.Promise)} + * @default [] + * @example + * columns: [ + * { name: 'id', title: 'ID', type: 'number' }, + * { name: 'name', title: 'Name', sorted: true, direction: 'ASC' } + * { name: 'age', title: 'Age', type: 'number', breakpoints: 'xs' } + * ] + */ + F.Defaults.prototype.columns = []; + + /** + * Specifies whether or not the column headers should be displayed. + * @type {boolean} + * @default true + */ + F.Defaults.prototype.showHeader = true; +})(FooTable); +(function ($, F) { + F.Rows = F.Component.extend(/** @lends FooTable.Rows */{ + /** + * The rows class contains all the logic for handling rows. + * @constructs + * @extends FooTable.Component + * @param {FooTable.Table} table - The parent {@link FooTable.Table} this component belongs to. + * @returns {FooTable.Rows} + */ + construct: function (table) { + // call the base class constructor + this._super(table, true); + + /** + * This provides a shortcut to the {@link FooTable.Table#options} object. + * @instance + * @protected + * @type {FooTable.Table#options} + */ + this.o = table.o; + /** + * The current working array of {@link FooTable.Row} objects. + * @instance + * @protected + * @type {Array.} + * @default [] + */ + this.array = []; + /** + * The base array of rows parsed from either the DOM or the constructor options. + * The {@link FooTable.Rows#current} member is populated with a shallow clone of this array + * during the predraw operation before any core or custom components are executed. + * @instance + * @protected + * @type {Array.} + * @default [] + */ + this.all = []; + /** + * Whether or not to display a toggle in each row when it contains hidden columns. + * @type {boolean} + * @default true + */ + this.showToggle = table.o.showToggle; + /** + * The CSS selector used to filter row click events. If the event.target property matches the selector the row will be toggled. + * @type {string} + * @default "tr,td,.footable-toggle" + */ + this.toggleSelector = table.o.toggleSelector; + /** + * Specifies which column the row toggle is appended to. Supports only two values; "first" and "last" + * @type {string} + */ + this.toggleColumn = table.o.toggleColumn; + /** + * The text to display when the table has no rows. + * @type {string} + */ + this.emptyString = table.o.empty; + /** + * Whether or not the first rows details are expanded by default when displayed on a device that hides any columns. + * @type {boolean} + */ + this.expandFirst = table.o.expandFirst; + /** + * Whether or not all row details are expanded by default when displayed on a device that hides any columns. + * @type {boolean} + */ + this.expandAll = table.o.expandAll; + /** + * The jQuery object that contains the empty row control. + * @type {jQuery} + */ + this.$empty = null; + this._fromHTML = F.is.emptyArray(table.o.rows) && !F.is.promise(table.o.rows); + }, + /** + * This parses the rows from either the tables rows or the supplied options. + * @instance + * @protected + * @returns {jQuery.Promise} + */ + parse: function(){ + var self = this; + return $.Deferred(function(d){ + var $rows = self.ft.$el.children('tbody').children('tr'); + if (F.is.array(self.o.rows) && self.o.rows.length > 0){ + self.parseFinalize(d, self.o.rows); + } else if (F.is.promise(self.o.rows)){ + self.o.rows.then(function(rows){ + self.parseFinalize(d, rows); + }, function(xhr){ + d.reject(Error('Rows ajax request error: ' + xhr.status + ' (' + xhr.statusText + ')')); + }); + } else if (F.is.jq($rows)){ + self.parseFinalize(d, $rows); + $rows.detach(); + } else { + self.parseFinalize(d, []); + } + }); + }, + /** + * Used to finalize the parsing of rows it is supplied the parse deferred object which must be resolved with an array of {@link FooTable.Row} objects + * or rejected with an error. + * @instance + * @protected + * @param {jQuery.Deferred} deferred - The deferred object used for parsing. + * @param {(Array.|jQuery)} rows - An array of row values and options or the jQuery object containing all rows. + */ + parseFinalize: function(deferred, rows){ + var self = this, result = $.map(rows, function(r){ + return new F.Row(self.ft, self.ft.columns.array, r); + }); + deferred.resolve(result); + }, + /** + * The columns preinit method is used to parse and check the column options supplied from both static content and through the constructor. + * @instance + * @protected + * @param {object} data - The jQuery data object from the root table element. + * @fires FooTable.Rows#"preinit.ft.rows" + */ + preinit: function(data){ + var self = this; + /** + * The preinit.ft.rows event is raised before any UI is created and provides the tables jQuery data object for additional options parsing. + * Calling preventDefault on this event will disable the entire plugin. + * @event FooTable.Rows#"preinit.ft.rows" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {object} data - The jQuery data object of the table raising the event. + */ + return self.ft.raise('preinit.ft.rows', [data]).then(function(){ + return self.parse().then(function(rows){ + self.all = rows; + self.array = self.all.slice(0); + self.showToggle = F.is.boolean(data.showToggle) ? data.showToggle : self.showToggle; + self.toggleSelector = F.is.string(data.toggleSelector) ? data.toggleSelector : self.toggleSelector; + self.toggleColumn = F.is.string(data.toggleColumn) ? data.toggleColumn : self.toggleColumn; + if (self.toggleColumn != "first" && self.toggleColumn != "last") self.toggleColumn = "first"; + self.emptyString = F.is.string(data.empty) ? data.empty : self.emptyString; + self.expandFirst = F.is.boolean(data.expandFirst) ? data.expandFirst : self.expandFirst; + self.expandAll = F.is.boolean(data.expandAll) ? data.expandAll : self.expandAll; + }); + }); + }, + /** + * Initializes the rows class using the supplied table and options. + * @instance + * @protected + * @fires FooTable.Rows#"init.ft.rows" + */ + init: function () { + var self = this; + /** + * The init.ft.rows event is raised after the the rows are parsed from either the DOM or the options. + * Calling preventDefault on this event will disable the entire plugin. + * @event FooTable.Rows#"init.ft.rows" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} instance - The instance of the plugin raising the event. + * @param {Array.} rows - The array of {@link FooTable.Row} objects parsed from the DOM or the options. + */ + return self.ft.raise('init.ft.rows', [self.all]).then(function(){ + self.$create(); + }); + }, + /** + * Destroys the rows component removing any UI generated from the table. + * @instance + * @protected + * @fires FooTable.Rows#"destroy.ft.rows" + */ + destroy: function(){ + /** + * The destroy.ft.rows event is raised before its UI is removed. + * Calling preventDefault on this event will prevent the component from being destroyed. + * @event FooTable.Rows#"destroy.ft.rows" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + var self = this; + this.ft.raise('destroy.ft.rows').then(function(){ + F.arr.each(self.array, function(row){ + row.predraw(!self._fromHTML); + }); + }); + }, + /** + * Performs the predraw operations that are required including creating the shallow clone of the {@link FooTable.Rows#array} to work with. + * @instance + * @protected + */ + predraw: function(){ + F.arr.each(this.array, function(row){ + row.predraw(); + }); + this.array = this.all.slice(0); + }, + $create: function(){ + this.$empty = $('', { 'class': 'footable-empty' }).append($('").addClass(this.row.classes.join(" ")).data("__FooTableCell__",this).append(a("")).data("__FooTableRow__",this),this._setClasses(this.$el),this._setStyle(this.$el),"last"==this.ft.rows.toggleColumn&&this.$toggle.addClass("last-column"),this.$details=a("",{"class":"footable-detail-row"}).append(a("
The below shows how this value would be setThe below shows what the default getWidth function would look like.
This example shows retrieving a column by name assuming a column called "id" exists. The columns object is an instance of {@link FooTable.Columns}.The below shows column definitions for a row defined as { id: Number, name: String, age: Number }. The ID column has a fixed width, the table is initially sorted on the Name column and the Age column will be hidden on phones.
').text(this.emptyString)); + }, + /** + * Performs the actual drawing of the table rows. + * @instance + * @protected + */ + draw: function(){ + var self = this, $tbody = self.ft.$el.children('tbody'), first = true; + // if we have rows + if (self.array.length > 0){ + self.$empty.detach(); + // loop through them appending to the tbody and then drawing + F.arr.each(self.array, function(row){ + if ((self.expandFirst && first) || self.expandAll){ + row.expanded = true; + first = false; + } + row.draw($tbody); + }); + } else { + // otherwise display the $empty row + self.$empty.children('td').attr('colspan', self.ft.columns.visibleColspan); + $tbody.append(self.$empty); + } + }, + /** + * Loads a JSON array of row objects into the table + * @instance + * @param {Array.} data - An array of row objects to load. + * @param {boolean} [append=false] - Whether or not to append the new rows to the current rows array or to replace them entirely. + */ + load: function(data, append){ + var self = this, rows = $.map(data, function(r){ + return new F.Row(self.ft, self.ft.columns.array, r); + }); + F.arr.each(this.array, function(row){ + row.predraw(); + }); + this.all = (F.is.boolean(append) ? append : false) ? this.all.concat(rows) : rows; + this.array = this.all.slice(0); + this.ft.draw(); + }, + /** + * Expands all visible rows. + * @instance + */ + expand: function(){ + F.arr.each(this.array, function(row){ + row.expand(); + }); + }, + /** + * Collapses all visible rows. + * @instance + */ + collapse: function(){ + F.arr.each(this.array, function(row){ + row.collapse(); + }); + } + }); + + F.components.register('rows', F.Rows, 800); + +})(jQuery, FooTable); +(function(F){ + /** + * An array of JSON objects containing the row data or a jQuery promise that resolves returning the row data. + * @type {(Array.|jQuery.Promise)} + * @default [] + */ + F.Defaults.prototype.rows = []; + + /** + * A string to display when there are no rows in the table. + * @type {string} + * @default "No results" + */ + F.Defaults.prototype.empty = 'No results'; + + /** + * Whether or not the toggle is appended to each row. + * @type {boolean} + * @default true + */ + F.Defaults.prototype.showToggle = true; + + /** + * The CSS selector used to filter row click events. If the event.target property matches the selector the row will be toggled. + * @type {string} + * @default "tr,td,.footable-toggle" + */ + F.Defaults.prototype.toggleSelector = 'tr,td,.footable-toggle'; + + /** + * Specifies which column to display the row toggle in. The only supported values are "first" or "last". + * @type {string} + * @default "first" + */ + F.Defaults.prototype.toggleColumn = 'first'; + + /** + * Whether or not the first rows details are expanded by default when displayed on a device that hides any columns. + * @type {boolean} + */ + F.Defaults.prototype.expandFirst = false; + + /** + * Whether or not all row details are expanded by default when displayed on a device that hides any columns. + * @type {boolean} + */ + F.Defaults.prototype.expandAll = false; +})(FooTable); +(function(F){ + /** + * Loads a JSON array of row objects into the table + * @param {Array.} data - An array of row objects to load. + * @param {boolean} [append=false] - Whether or not to append the new rows to the current rows array or to replace them entirely. + */ + F.Table.prototype.loadRows = function(data, append){ + this.rows.load(data, append); + }; +})(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/footable.core.min.js b/media/footable-v3/js/footable.core.min.js new file mode 100644 index 0000000..c452f54 --- /dev/null +++ b/media/footable-v3/js/footable.core.min.js @@ -0,0 +1,9 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +!function(a,b){window.console=window.console||{log:function(){},error:function(){}},a.fn.footable=function(a,c){return a=a||{},this.filter("table").each(function(d,e){b.init(e,a,c)})};var c={events:[]};b.__debug__=JSON.parse(localStorage.getItem("footable_debug"))||!1,b.__debug_options__=JSON.parse(localStorage.getItem("footable_debug_options"))||c,b.debug=function(d,e){return b.is["boolean"](d)?(b.__debug__=d,void(b.__debug__?(localStorage.setItem("footable_debug",JSON.stringify(b.__debug__)),b.__debug_options__=a.extend(!0,{},c,e||{}),b.is.hash(e)&&localStorage.setItem("footable_debug_options",JSON.stringify(b.__debug_options__))):(localStorage.removeItem("footable_debug"),localStorage.removeItem("footable_debug_options")))):b.__debug__},b.get=function(b){return a(b).first().data("__FooTable__")},b.init=function(a,c,d){var e=b.get(a);return e instanceof b.Table&&e.destroy(),new b.Table(a,c,d)},b.getRow=function(b){var c=a(b).closest("tr");return c.hasClass("footable-detail-row")&&(c=c.prev()),c.data("__FooTableRow__")}}(jQuery,FooTable=window.FooTable||{}),function(a){var b=function(){return!0};a.arr={},a.arr.each=function(b,c){if(a.is.array(b)&&a.is.fn(c))for(var d=0,e=b.length;e>d&&c(b[d],d)!==!1;d++);},a.arr.get=function(b,c){var d=[];if(!a.is.array(b))return d;if(!a.is.fn(c))return b;for(var e=0,f=b.length;f>e;e++)c(b[e],e)&&d.push(b[e]);return d},a.arr.any=function(c,d){if(!a.is.array(c))return!1;d=a.is.fn(d)?d:b;for(var e=0,f=c.length;f>e;e++)if(d(c[e],e))return!0;return!1},a.arr.contains=function(b,c){if(!a.is.array(b)||a.is.undef(c))return!1;for(var d=0,e=b.length;e>d;d++)if(b[d]==c)return!0;return!1},a.arr.first=function(c,d){if(!a.is.array(c))return null;d=a.is.fn(d)?d:b;for(var e=0,f=c.length;f>e;e++)if(d(c[e],e))return c[e];return null},a.arr.map=function(b,c){var d=[],e=null;if(!a.is.array(b)||!a.is.fn(c))return d;for(var f=0,g=b.length;g>f;f++)null!=(e=c(b[f],f))&&d.push(e);return d},a.arr.remove=function(b,c){var d=[],e=[];if(!a.is.array(b)||!a.is.fn(c))return e;for(var f=0,g=b.length;g>f;f++)c(b[f],f,e)&&(d.push(f),e.push(b[f]));for(d.sort(function(a,b){return b-a}),f=0,g=d.length;g>f;f++){var h=d[f]-f;b.splice(h,1)}return e},a.arr["delete"]=function(b,c){var d=-1,e=null;if(!a.is.array(b)||a.is.undef(c))return e;for(var f=0,g=b.length;g>f;f++)if(b[f]==c){d=f,e=b[f];break}return-1!=d&&b.splice(d,1),e},a.arr.replace=function(a,b,c){var d=a.indexOf(b);-1!==d&&(a[d]=c)}}(FooTable),function(a){a.is={},a.is.type=function(a,b){return typeof a===b},a.is.defined=function(a){return"undefined"!=typeof a},a.is.undef=function(a){return"undefined"==typeof a},a.is.array=function(a){return"[object Array]"===Object.prototype.toString.call(a)},a.is.date=function(a){return"[object Date]"===Object.prototype.toString.call(a)&&!isNaN(a.getTime())},a.is["boolean"]=function(a){return"[object Boolean]"===Object.prototype.toString.call(a)},a.is.string=function(a){return"[object String]"===Object.prototype.toString.call(a)},a.is.number=function(a){return"[object Number]"===Object.prototype.toString.call(a)&&!isNaN(a)},a.is.fn=function(b){return a.is.defined(window)&&b===window.alert||"[object Function]"===Object.prototype.toString.call(b)},a.is.error=function(a){return"[object Error]"===Object.prototype.toString.call(a)},a.is.object=function(a){return"[object Object]"===Object.prototype.toString.call(a)},a.is.hash=function(b){return a.is.object(b)&&b.constructor===Object&&!b.nodeType&&!b.setInterval},a.is.element=function(a){return"object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&null!==a&&1===a.nodeType&&"string"==typeof a.nodeName},a.is.promise=function(b){return a.is.object(b)&&a.is.fn(b.then)&&a.is.fn(b.promise)},a.is.jq=function(b){return a.is.defined(window.jQuery)&&b instanceof jQuery&&b.length>0},a.is.moment=function(b){return a.is.defined(window.moment)&&a.is.object(b)&&a.is["boolean"](b._isAMomentObject)},a.is.emptyObject=function(b){if(!a.is.hash(b))return!1;for(var c in b)if(b.hasOwnProperty(c))return!1;return!0},a.is.emptyArray=function(b){return a.is.array(b)?0===b.length:!0},a.is.emptyString=function(b){return a.is.string(b)?0===b.length:!0}}(FooTable),function(a){a.str={},a.str.contains=function(b,c,d){return a.is.emptyString(b)||a.is.emptyString(c)?!1:c.length<=b.length&&-1!==(d?b.toUpperCase().indexOf(c.toUpperCase()):b.indexOf(c))},a.str.containsExact=function(b,c,d){return a.is.emptyString(b)||a.is.emptyString(c)||c.length>b.length?!1:new RegExp("\\b"+a.str.escapeRegExp(c)+"\\b",d?"i":"").test(b)},a.str.containsWord=function(b,c,d){if(a.is.emptyString(b)||a.is.emptyString(c)||b.lengthf;f++)if(d?e[f].toUpperCase()==c.toUpperCase():e[f]==c)return!0;return!1},a.str.from=function(b,c){return a.is.emptyString(b)?b:a.str.contains(b,c)?b.substring(b.indexOf(c)+1):b},a.str.startsWith=function(b,c){return a.is.emptyString(b)?b==c:b.slice(0,c.length)==c},a.str.toCamelCase=function(b){return a.is.emptyString(b)?b:b.toUpperCase()===b?b.toLowerCase():b.replace(/^([A-Z])|[-\s_](\w)/g,function(b,c,d){return a.is.string(d)?d.toUpperCase():c.toLowerCase()})},a.str.random=function(b){return b=a.is.emptyString(b)?"":b,b+Math.random().toString(36).substr(2,9)},a.str.escapeRegExp=function(b){return a.is.emptyString(b)?b:b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}(FooTable),function(a){"use strict";function b(){}Object.create||(Object.create=function(){var b=function(){};return function(c){if(arguments.length>1)throw Error("Second argument not supported");if(!a.is.object(c))throw TypeError("Argument must be an object");b.prototype=c;var d=new b;return b.prototype=null,d}}());var c=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/;b.__extend__=function(b,d,e,f){b[d]=a.is.fn(f)&&c.test(e)?function(a,b){return function(){var a,c;return a=this._super,this._super=f,c=b.apply(this,arguments),this._super=a,c}}(d,e):e},b.extend=function(d,e){function f(b,d,e,f){b[d]=a.is.fn(f)&&c.test(e)?function(a,b,c){return function(){var a,d;return a=this._super,this._super=c,d=b.apply(this,arguments),this._super=a,d}}(d,e,f):e}var g=Array.prototype.slice.call(arguments);if(d=g.shift(),e=g.shift(),a.is.hash(d)){var h=Object.create(this.prototype),i=this.prototype;for(var j in d)"__ctor__"!==j&&f(h,j,d[j],i[j]);var k=a.is.fn(h.__ctor__)?h.__ctor__:function(){if(!a.is.fn(this.construct))throw new SyntaxError('FooTable class objects must be constructed with the "new" keyword.');this.construct.apply(this,arguments)};return h.construct=a.is.fn(h.construct)?h.construct:function(){},k.prototype=h,h.constructor=k,k.extend=b.extend,k}a.is.string(d)&&a.is.fn(e)&&f(this.prototype,d,e,this.prototype[d])},a.Class=b,a.ClassFactory=a.Class.extend({construct:function(){this.registered={}},contains:function(b){return a.is.defined(this.registered[b])},names:function(){var a,b=[];for(a in this.registered)this.registered.hasOwnProperty(a)&&b.push(a);return b},register:function(b,c,d){if(a.is.string(b)&&a.is.fn(c)){var e=this.registered[b];this.registered[b]={name:b,klass:c,priority:a.is.number(d)?d:a.is.defined(e)?e.priority:0}}},load:function(b,c,d){var e,f,g=this,h=Array.prototype.slice.call(arguments),i=[],j=[];b=h.shift()||{};for(e in g.registered)if(g.registered.hasOwnProperty(e)){var k=g.registered[e];b.hasOwnProperty(e)&&(f=b[e],a.is.string(f)&&(f=a.getFnPointer(b[e])),a.is.fn(f)&&(k={name:e,klass:f,priority:g.registered[e].priority})),i.push(k)}for(e in b)b.hasOwnProperty(e)&&!g.registered.hasOwnProperty(e)&&(f=b[e],a.is.string(f)&&(f=a.getFnPointer(b[e])),a.is.fn(f)&&i.push({name:e,klass:f,priority:0}));return i.sort(function(a,b){return b.priority-a.priority}),a.arr.each(i,function(b){a.is.fn(b.klass)&&j.push(g._make(b.klass,h))}),j},make:function(b,c,d){var e,f=this,g=Array.prototype.slice.call(arguments);return b=g.shift(),e=f.registered[b],a.is.fn(e.klass)?f._make(e.klass,g):null},_make:function(a,b){function c(){return a.apply(this,b)}return c.prototype=a.prototype,new c}})}(FooTable),function(a,b){b.css2json=function(c){if(b.is.emptyString(c))return{};for(var d,e,f,g={},h=c.split(";"),i=0,j=h.length;j>i;i++)b.is.emptyString(h[i])||(d=h[i].split(":"),b.is.emptyString(d[0])||b.is.emptyString(d[1])||(e=b.str.toCamelCase(a.trim(d[0])),f=a.trim(d[1]),g[e]=f));return g},b.getFnPointer=function(a){if(b.is.emptyString(a))return null;var c=window,d=a.split(".");return b.arr.each(d,function(a){c[a]&&(c=c[a])}),b.is.fn(c)?c:null},b.checkFnValue=function(a,c,d){function e(a,c,d){return b.is.fn(c)?function(){return c.apply(a,arguments)}:d}return d=b.is.fn(d)?d:null,b.is.fn(c)?e(a,c,d):b.is.type(c,"string")?e(a,b.getFnPointer(c),d):d}}(jQuery,FooTable),function(a,b){b.Cell=b.Class.extend({construct:function(a,b,c,d){this.ft=a,this.row=b,this.column=c,this.created=!1,this.define(d)},define:function(c){this.$el=b.is.element(c)||b.is.jq(c)?a(c):null,this.$detail=null;var d=b.is.hash(c)&&b.is.hash(c.options)&&b.is.defined(c.value);this.value=this.column.parser.call(this.column,b.is.jq(this.$el)?this.$el:d?c.value:c,this.ft.o),this.o=a.extend(!0,{classes:null,style:null},d?c.options:{}),this.classes=b.is.jq(this.$el)&&this.$el.attr("class")?this.$el.attr("class").match(/\S+/g):b.is.array(this.o.classes)?this.o.classes:b.is.string(this.o.classes)?this.o.classes.match(/\S+/g):[],this.style=b.is.jq(this.$el)&&this.$el.attr("style")?b.css2json(this.$el.attr("style")):b.is.hash(this.o.style)?this.o.style:b.is.string(this.o.style)?b.css2json(this.o.style):{}},$create:function(){this.created||((this.$el=b.is.jq(this.$el)?this.$el:a("")).data("value",this.value).contents().detach().end().append(this.format(this.value)),this._setClasses(this.$el),this._setStyle(this.$el),this.$detail=a("
")).append(a("")),this.created=!0)},collapse:function(){this.created&&(this.$detail.children("th").html(this.column.title),this.$el.clone().attr("id",this.$el.attr("id")?this.$el.attr("id")+"-detail":void 0).css("display","table-cell").html("").append(this.$el.contents().detach()).replaceAll(this.$detail.children("td").first()),b.is.jq(this.$detail.parent())||this.$detail.appendTo(this.row.$details.find(".footable-details > tbody")))},restore:function(){if(this.created){if(b.is.jq(this.$detail.parent())){var a=this.$detail.children("td").first();this.$el.attr("class",a.attr("class")).attr("style",a.attr("style")).css("display",this.column.hidden||!this.column.visible?"none":"table-cell").append(a.contents().detach())}this.$detail.detach()}},parse:function(){return this.column.parser.call(this.column,this.$el,this.ft.o)},format:function(a){return this.column.formatter.call(this.column,a,this.ft.o)},val:function(c,d){if(b.is.undef(c))return this.value;var e=this,f=b.is.hash(c)&&b.is.hash(c.options)&&b.is.defined(c.value);if(this.o=a.extend(!0,{classes:e.classes,style:e.style},f?c.options:{}),this.value=f?c.value:c,this.classes=b.is.array(this.o.classes)?this.o.classes:b.is.string(this.o.classes)?this.o.classes.match(/\S+/g):[],this.style=b.is.hash(this.o.style)?this.o.style:b.is.string(this.o.style)?b.css2json(this.o.style):{},this.created){this.$el.data("value",this.value).empty();var g=this.$detail.children("td").first().empty(),h=b.is.jq(this.$detail.parent())?g:this.$el;h.append(this.format(this.value)),this._setClasses(h),this._setStyle(h),(b.is["boolean"](d)?d:!0)&&this.row.draw()}},_setClasses:function(a){var c=!b.is.emptyArray(this.column.classes),d=!b.is.emptyArray(this.classes),e=null;a.removeAttr("class"),(c||d)&&(c&&d?e=this.classes.concat(this.column.classes).join(" "):c?e=this.column.classes.join(" "):d&&(e=this.classes.join(" ")),b.is.emptyString(e)||a.addClass(e))},_setStyle:function(c){var d=!b.is.emptyObject(this.column.style),e=!b.is.emptyObject(this.style),f=null;c.removeAttr("style"),(d||e)&&(d&&e?f=a.extend({},this.column.style,this.style):d?f=this.column.style:e&&(f=this.style),b.is.hash(f)&&c.css(f))}})}(jQuery,FooTable),function(a,b){b.Column=b.Class.extend({construct:function(a,c,d){this.ft=a,this.type=b.is.emptyString(d)?"text":d,this.virtual=b.is["boolean"](c.virtual)?c.virtual:!1,this.$el=b.is.jq(c.$el)?c.$el:null,this.index=b.is.number(c.index)?c.index:-1,this.define(c),this.$create()},define:function(a){this.hidden=b.is["boolean"](a.hidden)?a.hidden:!1,this.visible=b.is["boolean"](a.visible)?a.visible:!0,this.name=b.is.string(a.name)?a.name:null,null==this.name&&(this.name="col"+(a.index+1)),this.title=b.is.string(a.title)?a.title:null,!this.virtual&&null==this.title&&b.is.jq(this.$el)&&(this.title=this.$el.html()),null==this.title&&(this.title="Column "+(a.index+1)),this.style=b.is.hash(a.style)?a.style:b.is.string(a.style)?b.css2json(a.style):{},this.classes=b.is.array(a.classes)?a.classes:b.is.string(a.classes)?a.classes.match(/\S+/g):[],this.parser=b.checkFnValue(this,a.parser,this.parser),this.formatter=b.checkFnValue(this,a.formatter,this.formatter)},$create:function(){(this.$el=!this.virtual&&b.is.jq(this.$el)?this.$el:a("")).html(this.title).addClass(this.classes.join(" ")).css(this.style)},parser:function(c){if(b.is.element(c)||b.is.jq(c)){var d=a(c).data("value");return b.is.defined(d)?d:a(c).html()}return b.is.defined(c)&&null!=c?c+"":null},formatter:function(a){return null==a?"":a},createCell:function(a){var c=b.is.jq(a.$el)?a.$el.children("td,th").get(this.index):null,d=b.is.hash(a.value)?a.value[this.name]:null;return new b.Cell(this.ft,a,this,c||d)}}),b.columns=new b.ClassFactory,b.columns.register("text",b.Column)}(jQuery,FooTable),function(a,b){b.Component=b.Class.extend({construct:function(a,c){if(!(a instanceof b.Table))throw new TypeError("The instance parameter must be an instance of FooTable.Table.");this.ft=a,this.enabled=b.is["boolean"](c)?c:!1},preinit:function(a){},init:function(){},destroy:function(){},predraw:function(){},draw:function(){},postdraw:function(){}}),b.components=new b.ClassFactory}(jQuery,FooTable),function(a,b){b.Defaults=function(){this.stopPropagation=!1,this.on=null},b.defaults=new b.Defaults}(jQuery,FooTable),function(a,b){b.Row=b.Class.extend({construct:function(a,b,c){this.ft=a,this.columns=b,this.created=!1,this.define(c)},define:function(c){this.$el=b.is.element(c)||b.is.jq(c)?a(c):null,this.$toggle=a("",{"class":"footable-toggle fooicon fooicon-plus"});var d=b.is.hash(c),e=d&&b.is.hash(c.options)&&b.is.hash(c.value);this.value=d?e?c.value:c:null,this.o=a.extend(!0,{expanded:!1,classes:null,style:null},e?c.options:{}),this.expanded=b.is.jq(this.$el)?this.$el.data("expanded")||this.o.expanded:this.o.expanded,this.classes=b.is.jq(this.$el)&&this.$el.attr("class")?this.$el.attr("class").match(/\S+/g):b.is.array(this.o.classes)?this.o.classes:b.is.string(this.o.classes)?this.o.classes.match(/\S+/g):[],this.style=b.is.jq(this.$el)&&this.$el.attr("style")?b.css2json(this.$el.attr("style")):b.is.hash(this.o.style)?this.o.style:b.is.string(this.o.style)?b.css2json(this.o.style):{},this.cells=this.createCells();var f=this;f.value={},b.arr.each(f.cells,function(a){f.value[a.column.name]=a.val()})},$create:function(){if(!this.created){(this.$el=b.is.jq(this.$el)?this.$el:a("
",{colspan:this.ft.columns.visibleColspan}).append(a("",{"class":"footable-details "+this.ft.classes.join(" ")}).append("")));var c=this;b.arr.each(c.cells,function(a){a.created||a.$create(),c.$el.append(a.$el)}),c.$el.off("click.ft.row").on("click.ft.row",{self:c},c._onToggle),this.created=!0}},createCells:function(){var a=this;return b.arr.map(a.columns,function(b){return b.createCell(a)})},val:function(c,d){var e=this;if(!b.is.hash(c))return b.is.hash(this.value)&&!b.is.emptyObject(this.value)||(this.value={},b.arr.each(this.cells,function(a){e.value[a.column.name]=a.val()})),this.value;this.collapse(!1);var f=b.is.hash(c),g=f&&b.is.hash(c.options)&&b.is.hash(c.value);if(this.o=a.extend(!0,{expanded:e.expanded,classes:e.classes,style:e.style},g?c.options:{}),this.expanded=this.o.expanded,this.classes=b.is.array(this.o.classes)?this.o.classes:b.is.string(this.o.classes)?this.o.classes.match(/\S+/g):[],this.style=b.is.hash(this.o.style)?this.o.style:b.is.string(this.o.style)?b.css2json(this.o.style):{},f)if(g&&(c=c.value),b.is.hash(this.value))for(var h in c)c.hasOwnProperty(h)&&(this.value[h]=c[h]);else this.value=c;else this.value=null;b.arr.each(this.cells,function(a){b.is.defined(e.value[a.column.name])&&a.val(e.value[a.column.name],!1)}),this.created&&(this._setClasses(this.$el),this._setStyle(this.$el),(b.is["boolean"](d)?d:!0)&&this.draw())},_setClasses:function(a){var c=!b.is.emptyArray(this.classes),d=null;a.removeAttr("class"),c&&(d=this.classes.join(" "),b.is.emptyString(d)||a.addClass(d))},_setStyle:function(a){var c=!b.is.emptyObject(this.style),d=null;a.removeAttr("style"),c&&(d=this.style,b.is.hash(d)&&a.css(d))},expand:function(){if(this.created){var a=this;a.ft.raise("expand.ft.row",[a]).then(function(){a.__hidden__=b.arr.map(a.cells,function(a){return a.column.hidden&&a.column.visible?a:null}),a.__hidden__.length>0&&(a.$details.insertAfter(a.$el).children("td").first().attr("colspan",a.ft.columns.visibleColspan),b.arr.each(a.__hidden__,function(a){a.collapse()})),a.$el.attr("data-expanded",!0),a.$toggle.removeClass("fooicon-plus").addClass("fooicon-minus"),a.expanded=!0})}},collapse:function(a){if(this.created){var c=this;c.ft.raise("collapse.ft.row",[c]).then(function(){b.arr.each(c.__hidden__,function(a){a.restore()}),c.$details.detach(),c.$el.removeAttr("data-expanded"),c.$toggle.removeClass("fooicon-minus").addClass("fooicon-plus"),(b.is["boolean"](a)?a:!0)&&(c.expanded=!1)})}},predraw:function(a){this.created&&(this.expanded&&this.collapse(!1),this.$toggle.detach(),a=b.is["boolean"](a)?a:!0,a&&this.$el.detach())},draw:function(a){this.created||this.$create(),b.is.jq(a)&&a.append(this.$el);var c=this;b.arr.each(c.cells,function(a){a.$el.css("display",a.column.hidden||!a.column.visible?"none":"table-cell"),c.ft.rows.showToggle&&c.ft.columns.hasHidden&&("first"==c.ft.rows.toggleColumn&&a.column.index==c.ft.columns.firstVisibleIndex||"last"==c.ft.rows.toggleColumn&&a.column.index==c.ft.columns.lastVisibleIndex)&&a.$el.prepend(c.$toggle),a.$el.add(a.column.$el).removeClass("footable-first-visible footable-last-visible"),a.column.index==c.ft.columns.firstVisibleIndex&&a.$el.add(a.column.$el).addClass("footable-first-visible"),a.column.index==c.ft.columns.lastVisibleIndex&&a.$el.add(a.column.$el).addClass("footable-last-visible")}),this.expanded&&this.expand()},toggle:function(){this.created&&this.ft.columns.hasHidden&&(this.expanded?this.collapse():this.expand())},_onToggle:function(b){var c=b.data.self;a(b.target).is(c.ft.rows.toggleSelector)&&c.toggle()}})}(jQuery,FooTable),function(a,b){b.instances=[],b.Table=b.Class.extend({construct:function(c,d,e){this._resizeTimeout=null,this.id=b.instances.push(this),this.initialized=!1,this.$el=(b.is.jq(c)?c:a(c)).first(),this.$loader=a("
",{"class":"footable-loader"}).append(a("",{"class":"fooicon fooicon-loader"})),this.o=a.extend(!0,{},b.defaults,d),this.data=this.$el.data()||{},this.classes=[],this.components=b.components.load(b.is.hash(this.data.components)?this.data.components:this.o.components,this),this.breakpoints=this.use(FooTable.Breakpoints),this.columns=this.use(FooTable.Columns),this.rows=this.use(FooTable.Rows),this._construct(e)},_construct:function(a){var c=this;this._preinit().then(function(){return c._init()}).always(function(d){return c.$el.show(),b.is.error(d)?void console.error("FooTable: unhandled error thrown during initialization.",d):c.raise("ready.ft.table").then(function(){b.is.fn(a)&&a.call(c,c)})})},_preinit:function(){var a=this;return this.raise("preinit.ft.table",[a.data]).then(function(){var c=(a.$el.attr("class")||"").match(/\S+/g)||[];a.o.ajax=b.checkFnValue(a,a.data.ajax,a.o.ajax),a.o.stopPropagation=b.is["boolean"](a.data.stopPropagation)?a.data.stopPropagation:a.o.stopPropagation;for(var d=0,e=c.length;e>d;d++)b.str.startsWith(c[d],"footable")||a.classes.push(c[d]);return a.$el.hide().after(a.$loader),a.execute(!1,!1,"preinit",a.data)})},_init:function(){var c=this;return c.raise("init.ft.table").then(function(){var d=c.$el.children("thead"),e=c.$el.children("tbody"),f=c.$el.children("tfoot");return c.$el.addClass("footable footable-"+c.id),b.is.hash(c.o.on)&&c.$el.on(c.o.on),0==f.length&&c.$el.append(f=a("
")),0==e.length&&c.$el.append(""),0==d.length&&c.$el.prepend(d=a("")),c.execute(!1,!0,"init").then(function(){return c.$el.data("__FooTable__",c),0==f.children("tr").length&&f.remove(),0==d.children("tr").length&&d.remove(),c.raise("postinit.ft.table").then(function(){return c.draw()}).always(function(){a(window).off("resize.ft"+c.id,c._onWindowResize).on("resize.ft"+c.id,{self:c},c._onWindowResize),c.initialized=!0})})})},destroy:function(){var c=this;return c.raise("destroy.ft.table").then(function(){return c.execute(!0,!0,"destroy").then(function(){c.$el.removeData("__FooTable__").removeClass("footable-"+c.id),b.is.hash(c.o.on)&&c.$el.off(c.o.on),a(window).off("resize.ft"+c.id,c._onWindowResize),c.initialized=!1})}).fail(function(a){b.is.error(a)&&console.error("FooTable: unhandled error thrown while destroying the plugin.",a)})},raise:function(c,d){var e=this,f=b.__debug__&&(b.is.emptyArray(b.__debug_options__.events)||b.arr.any(b.__debug_options__.events,function(a){return b.str.contains(c,a)}));return d=d||[],d.unshift(this),a.Deferred(function(b){var g=a.Event(c);1==e.o.stopPropagation&&e.$el.one(c,function(a){a.stopPropagation()}),f&&console.log("FooTable:"+c+": ",d),e.$el.trigger(g,d),g.isDefaultPrevented()?(f&&console.log('FooTable: default prevented for the "'+c+'" event.'),b.reject(g)):b.resolve(g)})},use:function(a){for(var b=0,c=this.components.length;c>b;b++)if(this.components[b]instanceof a)return this.components[b];return null},draw:function(){var a=this,c=a.$el.clone().insertBefore(a.$el);return a.$el.detach(),a.execute(!1,!0,"predraw").then(function(){return a.raise("predraw.ft.table").then(function(){return a.execute(!1,!0,"draw").then(function(){return a.raise("draw.ft.table").then(function(){return a.execute(!1,!0,"postdraw").then(function(){return a.raise("postdraw.ft.table")})})})})}).fail(function(a){b.is.error(a)&&console.error("FooTable: unhandled error thrown during a draw operation.",a)}).always(function(){c.replaceWith(a.$el),a.$loader.remove()})},execute:function(a,c,d,e,f){var g=this,h=Array.prototype.slice.call(arguments);a=h.shift(),c=h.shift();var i=c?b.arr.get(g.components,function(a){return a.enabled}):g.components.slice(0);return h.unshift(a?i.reverse():i),g._execute.apply(g,h)},_execute:function(c,d,e,f){if(!c||!c.length)return a.when();var g,h=this,i=Array.prototype.slice.call(arguments);return c=i.shift(),d=i.shift(),g=c.shift(),b.is.fn(g[d])?a.Deferred(function(a){try{var c=g[d].apply(g,i);if(b.is.promise(c))return c.then(a.resolve,a.reject);a.resolve(c)}catch(e){a.reject(e)}}).then(function(){return h._execute.apply(h,[c,d].concat(i))}):h._execute.apply(h,[c,d].concat(i))},_onWindowResize:function(a){var b=a.data.self;null!=b._resizeTimeout&&clearTimeout(b._resizeTimeout),b._resizeTimeout=setTimeout(function(){b._resizeTimeout=null,b.raise("resize.ft.table").then(function(){b.breakpoints.check()})},300)}})}(jQuery,FooTable),function(a,b){b.is.undef(window.moment)||(b.DateColumn=b.Column.extend({construct:function(a,c){this._super(a,c,"date"),this.formatString=b.is.string(c.formatString)?c.formatString:"MM-DD-YYYY"},parser:function(c){if(b.is.element(c)||b.is.jq(c)){var d=a(c).data("value");c=b.is.defined(d)?d:a(c).text(),b.is.string(c)&&(c=isNaN(c)?c:+c)}if(b.is.date(c))return moment(c);if(b.is.object(c)&&b.is["boolean"](c._isAMomentObject))return c;if(b.is.string(c)){if(isNaN(c))return moment(c,this.formatString);c=+c}return b.is.number(c)?moment(c):null},formatter:function(a){return b.is.object(a)&&b.is["boolean"](a._isAMomentObject)&&a.isValid()?a.format(this.formatString):""},filterValue:function(c){if((b.is.element(c)||b.is.jq(c))&&(c=a(c).data("filterValue")||a(c).text()),b.is.hash(c)&&b.is.hash(c.options)&&(b.is.string(c.options.filterValue)&&(c=c.options.filterValue),b.is.defined(c.value)&&(c=c.value)),b.is.object(c)&&b.is["boolean"](c._isAMomentObject))return c.format(this.formatString);if(b.is.string(c)){if(isNaN(c))return c;c=+c}return b.is.number(c)||b.is.date(c)?moment(c).format(this.formatString):b.is.defined(c)&&null!=c?c+"":""}}),b.columns.register("date",b.DateColumn))}(jQuery,FooTable),function(a,b){b.HTMLColumn=b.Column.extend({construct:function(a,b){this._super(a,b,"html")},parser:function(c){if(b.is.string(c)&&(c=a(a.trim(c))),b.is.element(c)&&(c=a(c)),b.is.jq(c)){var d=c.prop("tagName").toLowerCase();if("td"==d||"th"==d){var e=c.data("value");return b.is.defined(e)?e:c.contents()}return c}return null}}),b.columns.register("html",b.HTMLColumn)}(jQuery,FooTable),function(a,b){b.NumberColumn=b.Column.extend({construct:function(a,c){this._super(a,c,"number"),this.decimalSeparator=b.is.string(c.decimalSeparator)?c.decimalSeparator:".",this.thousandSeparator=b.is.string(c.thousandSeparator)?c.thousandSeparator:",",this.decimalSeparatorRegex=new RegExp(b.str.escapeRegExp(this.decimalSeparator),"g"),this.thousandSeparatorRegex=new RegExp(b.str.escapeRegExp(this.thousandSeparator),"g"),this.cleanRegex=new RegExp("[^0-9"+b.str.escapeRegExp(this.decimalSeparator)+"]","g")},parser:function(c){if(b.is.element(c)||b.is.jq(c)){var d=a(c).data("value");c=b.is.defined(d)?d:a(c).text().replace(this.cleanRegex,"")}return b.is.string(c)&&(c=c.replace(this.thousandSeparatorRegex,"").replace(this.decimalSeparatorRegex,"."),c=parseFloat(c)),b.is.number(c)?c:null},formatter:function(a){if(null==a)return"";var b=(a+"").split(".");return 2==b.length&&b[0].length>3&&(b[0]=b[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,this.thousandSeparator)),b.join(this.decimalSeparator)}}),b.columns.register("number",b.NumberColumn)}(jQuery,FooTable),function(a,b){b.Breakpoint=b.Class.extend({construct:function(a,b){this.name=a,this.width=b}})}(jQuery,FooTable),function(a,b){b.Breakpoints=b.Component.extend({construct:function(a){this._super(a,!0),this.o=a.o,this.current=null,this.array=[],this.cascade=this.o.cascade,this.useParentWidth=this.o.useParentWidth,this.hidden=null,this._classNames="",this.getWidth=b.checkFnValue(this,this.o.getWidth,this.getWidth)},preinit:function(a){var c=this;return this.ft.raise("preinit.ft.breakpoints",[a]).then(function(){c.cascade=b.is["boolean"](a.cascade)?a.cascade:c.cascade,c.o.breakpoints=b.is.hash(a.breakpoints)?a.breakpoints:c.o.breakpoints,c.getWidth=b.checkFnValue(c,a.getWidth,c.getWidth),null==c.o.breakpoints&&(c.o.breakpoints={xs:480,sm:768,md:992,lg:1200});for(var d in c.o.breakpoints)c.o.breakpoints.hasOwnProperty(d)&&(c.array.push(new b.Breakpoint(d,c.o.breakpoints[d])),c._classNames+="breakpoint-"+d+" ");c.array.sort(function(a,b){return b.width-a.width})})},init:function(){var a=this;return this.ft.raise("init.ft.breakpoints").then(function(){a.current=a.get()})},draw:function(){this.ft.$el.removeClass(this._classNames).addClass("breakpoint-"+this.current.name)},calculate:function(){for(var a,c=this,d=null,e=[],f=null,g=c.getWidth(),h=0,i=c.array.length;i>h;h++)a=c.array[h],(!d&&h==i-1||g>=a.width&&(f instanceof b.Breakpoint?gd;d++)if(this.cascade?b.str.containsWord(this.hidden,c[d]):c[d]==this.current.name)return!1;return!0},check:function(){var a=this,c=a.get();c instanceof b.Breakpoint&&c!=a.current&&a.ft.raise("before.ft.breakpoints",[a.current,c]).then(function(){var b=a.current;return a.current=c,a.ft.draw().then(function(){a.ft.raise("after.ft.breakpoints",[a.current,b])})})},get:function(a){return b.is.undef(a)?this.calculate():a instanceof b.Breakpoint?a:b.is.string(a)?b.arr.first(this.array,function(b){return b.name==a}):b.is.number(a)&&a>=0&&af&&(f=a.index)}),f++;for(var g,h,i=0;f>i;i++)g={},b.arr.each(c,function(a){return a.index==i?(g=a,!1):void 0}),h={},b.arr.each(d,function(a){return a.index==i?(h=a,!1):void 0}),e.push(a.extend(!0,{},g,h))}return e}var f,g,h=[],i=[],j=d.ft.$el.find("tr.footable-header, thead > tr:last:has([data-breakpoints]), tbody > tr:first:has([data-breakpoints]), thead > tr:last, tbody > tr:first").first();if(j.length>0){var k=j.parent().is("tbody")&&j.children().length==j.children("td").length;k||(d.$header=j.addClass("footable-header")),j.children("td,th").each(function(b,c){f=a(c),g=f.data(),g.index=b,g.$el=f,g.virtual=k,i.push(g)}),k&&(d.showHeader=!1)}b.is.array(d.o.columns)&&!b.is.emptyArray(d.o.columns)?(b.arr.each(d.o.columns,function(a,b){a.index=b,h.push(a)}),d.parseFinalize(c,e(h,i))):b.is.promise(d.o.columns)?d.o.columns.then(function(a){b.arr.each(a,function(a,b){a.index=b,h.push(a)}),d.parseFinalize(c,e(h,i))},function(a){c.reject(Error("Columns ajax request error: "+a.status+" ("+a.statusText+")"))}):d.parseFinalize(c,e(h,i))})},parseFinalize:function(a,c){var d,e=this,f=[];b.arr.each(c,function(a){(d=b.columns.contains(a.type)?b.columns.make(a.type,e.ft,a):new b.Column(e.ft,a))&&f.push(d)}),b.is.emptyArray(f)?a.reject(Error("No columns supplied.")):(f.sort(function(a,b){return a.index-b.index}),a.resolve(f))},preinit:function(a){var c=this;return c.ft.raise("preinit.ft.columns",[a]).then(function(){return c.parse(a).then(function(d){c.array=d,c.showHeader=b.is["boolean"](a.showHeader)?a.showHeader:c.showHeader})})},init:function(){var a=this;return this.ft.raise("init.ft.columns",[a.array]).then(function(){a.$create()})},destroy:function(){var a=this;this.ft.raise("destroy.ft.columns").then(function(){a._fromHTML||a.$header.remove()})},predraw:function(){var a=this,c=!0;a.visibleColspan=0,a.firstVisibleIndex=0,a.lastVisibleIndex=0,a.hasHidden=!1,b.arr.each(a.array,function(b){b.hidden=!a.ft.breakpoints.visible(b.breakpoints),!b.hidden&&b.visible&&(c&&(a.firstVisibleIndex=b.index,c=!1),a.lastVisibleIndex=b.index,a.visibleColspan++),b.hidden&&(a.hasHidden=!0)}),a.ft.$el.toggleClass("breakpoint",a.hasHidden)},draw:function(){b.arr.each(this.array,function(a){a.$el.css("display",a.hidden||!a.visible?"none":"table-cell")}),!this.showHeader&&b.is.jq(this.$header.parent())&&this.$header.detach()},$create:function(){var c=this;c.$header=b.is.jq(c.$header)?c.$header:a("",{"class":"footable-header" +}),c.$header.children("th,td").detach(),b.arr.each(c.array,function(a){c.$header.append(a.$el)}),c.showHeader&&!b.is.jq(c.$header.parent())&&c.ft.$el.children("thead").append(c.$header)},get:function(a){return a instanceof b.Column?a:b.is.string(a)?b.arr.first(this.array,function(b){return b.name==a}):b.is.number(a)?b.arr.first(this.array,function(b){return b.index==a}):b.is.fn(a)?b.arr.get(this.array,a):null},ensure:function(a){var c=this,d=[];return b.is.array(a)?(b.arr.each(a,function(a){d.push(c.get(a))}),d):d}}),b.components.register("columns",b.Columns,900)}(jQuery,FooTable),function(a){a.Defaults.prototype.columns=[],a.Defaults.prototype.showHeader=!0}(FooTable),function(a,b){b.Rows=b.Component.extend({construct:function(a){this._super(a,!0),this.o=a.o,this.array=[],this.all=[],this.showToggle=a.o.showToggle,this.toggleSelector=a.o.toggleSelector,this.toggleColumn=a.o.toggleColumn,this.emptyString=a.o.empty,this.expandFirst=a.o.expandFirst,this.expandAll=a.o.expandAll,this.$empty=null,this._fromHTML=b.is.emptyArray(a.o.rows)&&!b.is.promise(a.o.rows)},parse:function(){var c=this;return a.Deferred(function(a){var d=c.ft.$el.children("tbody").children("tr");b.is.array(c.o.rows)&&c.o.rows.length>0?c.parseFinalize(a,c.o.rows):b.is.promise(c.o.rows)?c.o.rows.then(function(b){c.parseFinalize(a,b)},function(b){a.reject(Error("Rows ajax request error: "+b.status+" ("+b.statusText+")"))}):b.is.jq(d)?(c.parseFinalize(a,d),d.detach()):c.parseFinalize(a,[])})},parseFinalize:function(c,d){var e=this,f=a.map(d,function(a){return new b.Row(e.ft,e.ft.columns.array,a)});c.resolve(f)},preinit:function(a){var c=this;return c.ft.raise("preinit.ft.rows",[a]).then(function(){return c.parse().then(function(d){c.all=d,c.array=c.all.slice(0),c.showToggle=b.is["boolean"](a.showToggle)?a.showToggle:c.showToggle,c.toggleSelector=b.is.string(a.toggleSelector)?a.toggleSelector:c.toggleSelector,c.toggleColumn=b.is.string(a.toggleColumn)?a.toggleColumn:c.toggleColumn,"first"!=c.toggleColumn&&"last"!=c.toggleColumn&&(c.toggleColumn="first"),c.emptyString=b.is.string(a.empty)?a.empty:c.emptyString,c.expandFirst=b.is["boolean"](a.expandFirst)?a.expandFirst:c.expandFirst,c.expandAll=b.is["boolean"](a.expandAll)?a.expandAll:c.expandAll})})},init:function(){var a=this;return a.ft.raise("init.ft.rows",[a.all]).then(function(){a.$create()})},destroy:function(){var a=this;this.ft.raise("destroy.ft.rows").then(function(){b.arr.each(a.array,function(b){b.predraw(!a._fromHTML)})})},predraw:function(){b.arr.each(this.array,function(a){a.predraw()}),this.array=this.all.slice(0)},$create:function(){this.$empty=a("",{"class":"footable-empty"}).append(a("'); + self.ft.$el.append($tfoot); + } + self.$row = $('', { 'class': 'footable-editing' }).append(self.$cell).appendTo($tfoot); + }, + /** + * Creates the show button for the editing component. + * @instance + * @protected + * @returns {(string|HTMLElement|jQuery)} + */ + $buttonShow: function(){ + return ''; + }, + /** + * Creates the hide button for the editing component. + * @instance + * @protected + * @returns {(string|HTMLElement|jQuery)} + */ + $buttonHide: function(){ + return ''; + }, + /** + * Creates the add button for the editing component. + * @instance + * @protected + * @returns {(string|HTMLElement|jQuery)} + */ + $buttonAdd: function(){ + return ' '; + }, + /** + * Creates the edit button for the editing component. + * @instance + * @protected + * @returns {(string|HTMLElement|jQuery)} + */ + $buttonEdit: function(){ + return ' '; + }, + /** + * Creates the delete button for the editing component. + * @instance + * @protected + * @returns {(string|HTMLElement|jQuery)} + */ + $buttonDelete: function(){ + return ''; + }, + /** + * Creates the view button for the editing component. + * @instance + * @protected + * @returns {(string|HTMLElement|jQuery)} + */ + $buttonView: function(){ + return ' '; + }, + /** + * Creates the button group for the row buttons. + * @instance + * @protected + * @returns {(string|HTMLElement|jQuery)} + */ + $rowButtons: function(){ + if (F.is.jq(this._$buttons)) return this._$buttons.clone(); + this._$buttons = $('
'); + if (this.allowView) this._$buttons.append(this.$buttonView()); + if (this.allowEdit) this._$buttons.append(this.$buttonEdit()); + if (this.allowDelete) this._$buttons.append(this.$buttonDelete()); + return this._$buttons; + }, + /** + * Performs the drawing of the component. + */ + draw: function(){ + this.$cell.attr('colspan', this.ft.columns.visibleColspan); + }, + /** + * Handles the edit button click event. + * @instance + * @private + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @fires FooTable.Editing#"edit.ft.editing" + */ + _onEditClick: function(e){ + e.preventDefault(); + var self = e.data.self, row = $(this).closest('tr').data('__FooTableRow__'); + if (row instanceof F.Row){ + /** + * The edit.ft.editing event is raised before its callback is executed. + * Calling preventDefault on this event will prevent the callback from being executed. + * @event FooTable.Editing#"edit.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {FooTable.Row} row - The row to be edited. + */ + self.ft.raise('edit.ft.editing', [row]).then(function(){ + self.callbacks.editRow.call(self.ft, row); + }); + } + }, + /** + * Handles the delete button click event. + * @instance + * @private + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @fires FooTable.Editing#"delete.ft.editing" + */ + _onDeleteClick: function(e){ + e.preventDefault(); + var self = e.data.self, row = $(this).closest('tr').data('__FooTableRow__'); + if (row instanceof F.Row){ + /** + * The delete.ft.editing event is raised before its callback is executed. + * Calling preventDefault on this event will prevent the callback from being executed. + * @event FooTable.Editing#"delete.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {FooTable.Row} row - The row to be deleted. + */ + self.ft.raise('delete.ft.editing', [row]).then(function(){ + self.callbacks.deleteRow.call(self.ft, row); + }); + } + }, + /** + * Handles the view button click event. + * @instance + * @private + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @fires FooTable.Editing#"view.ft.editing" + */ + _onViewClick: function(e){ + e.preventDefault(); + var self = e.data.self, row = $(this).closest('tr').data('__FooTableRow__'); + if (row instanceof F.Row){ + /** + * The view.ft.editing event is raised before its callback is executed. + * Calling preventDefault on this event will prevent the callback from being executed. + * @event FooTable.Editing#"view.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {FooTable.Row} row - The row to be viewed. + */ + self.ft.raise('view.ft.editing', [row]).then(function(){ + self.callbacks.viewRow.call(self.ft, row); + }); + } + }, + /** + * Handles the add button click event. + * @instance + * @private + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @fires FooTable.Editing#"add.ft.editing" + */ + _onAddClick: function(e){ + e.preventDefault(); + var self = e.data.self; + /** + * The add.ft.editing event is raised before its callback is executed. + * Calling preventDefault on this event will prevent the callback from being executed. + * @event FooTable.Editing#"add.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + self.ft.raise('add.ft.editing').then(function(){ + self.callbacks.addRow.call(self.ft); + }); + }, + /** + * Handles the show button click event. + * @instance + * @private + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @fires FooTable.Editing#"show.ft.editing" + */ + _onShowClick: function(e){ + e.preventDefault(); + var self = e.data.self; + /** + * The show.ft.editing event is raised before its callback is executed. + * Calling preventDefault on this event will prevent the callback from being executed. + * @event FooTable.Editing#"show.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + self.ft.raise('show.ft.editing').then(function(){ + self.ft.$el.addClass('footable-editing-show'); + self.column.visible = true; + self.ft.draw(); + }); + }, + /** + * Handles the hide button click event. + * @instance + * @private + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @fires FooTable.Editing#"show.ft.editing" + */ + _onHideClick: function(e){ + e.preventDefault(); + var self = e.data.self; + /** + * The hide.ft.editing event is raised before its callback is executed. + * Calling preventDefault on this event will prevent the callback from being executed. + * @event FooTable.Editing#"hide.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + self.ft.raise('hide.ft.editing').then(function(){ + self.ft.$el.removeClass('footable-editing-show'); + self.column.visible = false; + self.ft.draw(); + }); + } + }); + + F.components.register('editing', F.Editing, 850); + +})(jQuery, FooTable); + +(function($, F){ + + F.EditingColumn = F.Column.extend(/** @lends FooTable.EditingColumn */{ + /** + * The Editing column class is used to create the column containing the editing buttons. + * @constructs + * @extends FooTable.Column + * @param {FooTable.Table} instance - The parent {@link FooTable.Table} this column belongs to. + * @param {FooTable.Editing} editing - The parent {@link FooTable.Editing} component this column is used with. + * @param {object} definition - An object containing all the properties to set for the column. + * @returns {FooTable.EditingColumn} + */ + construct: function(instance, editing, definition){ + this._super(instance, definition, 'editing'); + this.editing = editing; + }, + /** + * After the column has been defined this ensures that the $el property is a jQuery object by either creating or updating the current value. + * @instance + * @protected + * @this FooTable.Column + */ + $create: function(){ + (this.$el = !this.virtual && F.is.jq(this.$el) ? this.$el : $('"),b.ft.$el.append(d)),b.$row=a("",{"class":"footable-editing"}).append(b.$cell).appendTo(d)},$buttonShow:function(){return'"},$buttonHide:function(){return'"},$buttonAdd:function(){return' "},$buttonEdit:function(){return' "},$buttonDelete:function(){return'"},$buttonView:function(){return' "},$rowButtons:function(){return b.is.jq(this._$buttons)?this._$buttons.clone():(this._$buttons=a('
'),this.allowView&&this._$buttons.append(this.$buttonView()),this.allowEdit&&this._$buttons.append(this.$buttonEdit()),this.allowDelete&&this._$buttons.append(this.$buttonDelete()),this._$buttons)},draw:function(){this.$cell.attr("colspan",this.ft.columns.visibleColspan)},_onEditClick:function(c){c.preventDefault();var d=c.data.self,e=a(this).closest("tr").data("__FooTableRow__");e instanceof b.Row&&d.ft.raise("edit.ft.editing",[e]).then(function(){d.callbacks.editRow.call(d.ft,e)})},_onDeleteClick:function(c){c.preventDefault();var d=c.data.self,e=a(this).closest("tr").data("__FooTableRow__");e instanceof b.Row&&d.ft.raise("delete.ft.editing",[e]).then(function(){d.callbacks.deleteRow.call(d.ft,e)})},_onViewClick:function(c){c.preventDefault();var d=c.data.self,e=a(this).closest("tr").data("__FooTableRow__");e instanceof b.Row&&d.ft.raise("view.ft.editing",[e]).then(function(){d.callbacks.viewRow.call(d.ft,e)})},_onAddClick:function(a){a.preventDefault();var b=a.data.self;b.ft.raise("add.ft.editing").then(function(){b.callbacks.addRow.call(b.ft)})},_onShowClick:function(a){a.preventDefault();var b=a.data.self;b.ft.raise("show.ft.editing").then(function(){b.ft.$el.addClass("footable-editing-show"),b.column.visible=!0,b.ft.draw()})},_onHideClick:function(a){a.preventDefault();var b=a.data.self;b.ft.raise("hide.ft.editing").then(function(){b.ft.$el.removeClass("footable-editing-show"),b.column.visible=!1,b.ft.draw()})}}),b.components.register("editing",b.Editing,850)}(jQuery,FooTable),function(a,b){b.EditingColumn=b.Column.extend({construct:function(a,b,c){this._super(a,c,"editing"),this.editing=b},$create:function(){(this.$el=!this.virtual&&b.is.jq(this.$el)?this.$el:a("', {'class': 'footable-filtering'}).prependTo(self.ft.$el.children('thead')); + self.$cell = $(' + * query = "Dave AND Mary" - "Dave" is the left side of the query. + * query = "Dave AND Mary OR John" - "Dave and Mary" is the left side of the query. + */ + this.left = null; + /** + * The right side of the query if one exists. OR takes precedence over AND. + * @type {FooTable.Query} + * @example + * query = "Dave AND Mary" - "Mary" is the right side of the query. + * query = "Dave AND Mary OR John" - "John" is the right side of the query. + */ + this.right = null; + /** + * The parsed parts of the query. This contains the information used to actually perform a match against a string. + * @type {Array} + */ + this.parts = []; + /** + * The type of operand to apply to the results of the individual parts of the query. + * @type {string} + */ + this.operator = null; + this.val(query); + }, + /** + * Gets or sets the value for the query. During set the value is parsed setting all properties as required. + * @param {string} [value] - If supplied the value to set for this query. + * @returns {(string|undefined)} + */ + val: function(value){ + // get + if (F.is.emptyString(value)) return this._value; + + // set + if (F.is.emptyString(this._original)) this._original = value; + else if (this._original == value) return; + + this._value = value; + this._parse(); + }, + /** + * Tests the supplied string against the query. + * @param {string} str - The string to test. + * @returns {boolean} + */ + match: function(str){ + if (F.is.emptyString(this.operator) || this.operator === 'OR') + return this._left(str, false) || this._match(str, false) || this._right(str, false); + if (this.operator === 'AND') + return this._left(str, true) && this._match(str, true) && this._right(str, true); + }, + /** + * Matches this queries parts array against the supplied string. + * @param {string} str - The string to test. + * @param {boolean} def - The default value to return based on the operand. + * @returns {boolean} + * @private + */ + _match: function(str, def){ + var self = this, result = false, empty = F.is.emptyString(str); + if (F.is.emptyArray(self.parts) && self.left instanceof F.Query) return def; + if (F.is.emptyArray(self.parts)) return result; + if (self.space === 'OR'){ + // with OR we give the str every part to test and if any match it is a success, we do exit early if a negated match occurs + F.arr.each(self.parts, function(p){ + if (p.empty && empty){ + result = true; + if (p.negate){ + result = false; + return result; + } + } else { + var match = (p.exact ? F.str.containsExact : F.str.contains)(str, p.query, self.ignoreCase); + if (match && !p.negate) result = true; + if (match && p.negate) { + result = false; + return result; + } + } + }); + } else { + // otherwise with AND we check until the first failure and then exit + result = true; + F.arr.each(self.parts, function(p){ + if (p.empty){ + if ((!empty && !p.negate) || (empty && p.negate)) result = false; + return result; + } else { + var match = (p.exact ? F.str.containsExact : F.str.contains)(str, p.query, self.ignoreCase); + if ((!match && !p.negate) || (match && p.negate)) result = false; + return result; + } + }); + } + return result; + }, + /** + * Matches the left side of the query if one exists with the supplied string. + * @param {string} str - The string to test. + * @param {boolean} def - The default value to return based on the operand. + * @returns {boolean} + * @private + */ + _left: function(str, def){ + return (this.left instanceof F.Query) ? this.left.match(str) : def; + }, + /** + * Matches the right side of the query if one exists with the supplied string. + * @param {string} str - The string to test. + * @param {boolean} def - The default value to return based on the operand. + * @returns {boolean} + * @private + */ + _right: function(str, def){ + return (this.right instanceof F.Query) ? this.right.match(str) : def; + }, + /** + * Parses the private {@link FooTable.Query#_value} property and populates the object. + * @private + */ + _parse: function(){ + if (F.is.emptyString(this._value)) return; + // OR takes precedence so test for it first + if (/\sOR\s/.test(this._value)){ + // we have an OR so split the value on the first occurrence of OR to get the left and right sides of the statement + this.operator = 'OR'; + var or = this._value.split(/(?:\sOR\s)(.*)?/); + this.left = new F.Query(or[0], this.space, this.connectors, this.ignoreCase); + this.right = new F.Query(or[1], this.space, this.connectors, this.ignoreCase); + } else if (/\sAND\s/.test(this._value)) { + // there are no more OR's so start with AND + this.operator = 'AND'; + var and = this._value.split(/(?:\sAND\s)(.*)?/); + this.left = new F.Query(and[0], this.space, this.connectors, this.ignoreCase); + this.right = new F.Query(and[1], this.space, this.connectors, this.ignoreCase); + } else { + // we have no more statements to parse so set the parts array by parsing each part of the remaining query + var self = this; + this.parts = F.arr.map(this._value.match(/(?:[^\s"]+|"[^"]*")+/g), function(str){ + return self._part(str); + }); + } + }, + /** + * Parses a single part of a query into an object to use during matching. + * @param {string} str - The string representation of the part. + * @returns {{query: string, negate: boolean, phrase: boolean, exact: boolean}} + * @private + */ + _part: function(str){ + var p = { + query: str, + negate: false, + phrase: false, + exact: false, + empty: false + }; + // support for NEGATE operand - (minus sign). Remove this first so we can get onto phrase checking + if (F.str.startsWith(p.query, '-')){ + p.query = F.str.from(p.query, '-'); + p.negate = true; + } + // support for PHRASES (exact matches) + if (/^"(.*?)"$/.test(p.query)){ // if surrounded in quotes strip them and nothing else + p.query = p.query.replace(/^"(.*?)"$/, '$1'); + p.phrase = true; + p.exact = true; + } else if (this.connectors && /(?:\w)+?([-_\+\.])(?:\w)+?/.test(p.query)) { // otherwise replace supported phrase connectors (-_+.) with spaces + p.query = p.query.replace(/(?:\w)+?([-_\+\.])(?:\w)+?/g, function(match, p1){ + return match.replace(p1, ' '); + }); + p.phrase = true; + } + p.empty = p.phrase && F.is.emptyString(p.query); + return p; + } + }); + +})(FooTable); +(function(F){ + + /** + * The value used by the filtering component during filter operations. Must be a string and can be set using the data-filter-value attribute on the cell itself. + * If this is not supplied it is set to the result of the toString method called on the value for the cell. Added by the {@link FooTable.Filtering} component. + * @type {string} + * @default null + */ + F.Cell.prototype.filterValue = null; + + // this is used to define the filtering specific properties on cell creation + F.Cell.prototype.__filtering_define__ = function(valueOrElement){ + this.filterValue = this.column.filterValue.call(this.column, valueOrElement); + }; + + // this is used to update the filterValue property whenever the cell value is changed + F.Cell.prototype.__filtering_val__ = function(value){ + if (F.is.defined(value)){ + // set only + this.filterValue = this.column.filterValue.call(this.column, value); + } + }; + + // overrides the public define method and replaces it with our own + F.Cell.extend('define', function(valueOrElement){ + this._super(valueOrElement); + this.__filtering_define__(valueOrElement); + }); + // overrides the public val method and replaces it with our own + F.Cell.extend('val', function(value){ + var val = this._super(value); + this.__filtering_val__(value); + return val; + }); +})(FooTable); +(function($, F){ + /** + * Whether or not the column can be used during filtering. Added by the {@link FooTable.Filtering} component. + * @type {boolean} + * @default true + */ + F.Column.prototype.filterable = true; + + /** + * This is supplied either the cell value or jQuery object to parse. A string value must be returned from this method and will be used during filtering operations. + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {string} + * @this FooTable.Column + */ + F.Column.prototype.filterValue = function(valueOrElement){ + // if we have an element or a jQuery object use jQuery to get the value + if (F.is.element(valueOrElement) || F.is.jq(valueOrElement)){ + var data = $(valueOrElement).data('filterValue'); + return F.is.defined(data) ? ''+data : $(valueOrElement).text(); + } + // if options are supplied with the value + if (F.is.hash(valueOrElement) && F.is.hash(valueOrElement.options)){ + if (F.is.string(valueOrElement.options.filterValue)) return valueOrElement.options.filterValue; + if (F.is.defined(valueOrElement.value)) valueOrElement = valueOrElement.value; + } + if (F.is.defined(valueOrElement) && valueOrElement != null) return valueOrElement+''; // use the native toString of the value + return ''; // otherwise we have no value so return an empty string + }; + + // this is used to define the filtering specific properties on column creation + F.Column.prototype.__filtering_define__ = function(definition){ + this.filterable = F.is.boolean(definition.filterable) ? definition.filterable : this.filterable; + this.filterValue = F.checkFnValue(this, definition.filterValue, this.filterValue); + }; + + // overrides the public define method and replaces it with our own + F.Column.extend('define', function(definition){ + this._super(definition); // call the base so we don't have to redefine any previously set properties + this.__filtering_define__(definition); // then call our own + }); +})(jQuery, FooTable); +(function(F){ + /** + * An object containing the filtering options for the plugin. Added by the {@link FooTable.Filtering} component. + * @type {object} + * @prop {boolean} enabled=false - Whether or not to allow filtering on the table. + * @prop {({name: string, query: (string|FooTable.Query), columns: (Array.|Array.|Array.)}|Array.)} filters - The filters to apply to the current {@link FooTable.Rows#array}. + * @prop {number} delay=1200 - The delay in milliseconds before the query is auto applied after a change (any value equal to or less than zero will disable this). + * @prop {number} min=1 - The minimum number of characters allowed in the search input before it is auto applied. + * @prop {string} space="AND" - Specifies how whitespace in a filter query is handled. + * @prop {string} placeholder="Search" - The string used as the placeholder for the search input. + * @prop {string} dropdownTitle=null - The title to display at the top of the search input column select. + * @prop {string} position="right" - The string used to specify the alignment of the search input. + * @prop {string} connectors=true - Whether or not to replace phrase connectors (+.-_) with space before executing the query. + * @prop {boolean} ignoreCase=true - Whether or not ignore case when matching. + * @prop {boolean} exactMatch=false - Whether or not search queries are treated as phrases when matching. + */ + F.Defaults.prototype.filtering = { + enabled: false, + filters: [], + delay: 1200, + min: 1, + space: 'AND', + placeholder: 'Search', + dropdownTitle: null, + position: 'right', + connectors: true, + ignoreCase: true, + exactMatch: false + }; +})(FooTable); +(function(F){ + /** + * Checks if the row is filtered using the supplied filters. + * @this FooTable.Row + * @param {Array.} filters - The filters to apply. + * @returns {boolean} + */ + F.Row.prototype.filtered = function(filters){ + var result = true, self = this; + F.arr.each(filters, function(f){ + if ((result = f.matchRow(self)) == false) return false; + }); + return result; + }; +})(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/footable.filtering.min.js b/media/footable-v3/js/footable.filtering.min.js new file mode 100644 index 0000000..7f4f63b --- /dev/null +++ b/media/footable-v3/js/footable.filtering.min.js @@ -0,0 +1,8 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +!function(a){a.Filter=a.Class.extend({construct:function(b,c,d,e,f,g,h){this.name=b,this.space=!a.is.string(e)||"OR"!=e&&"AND"!=e?"AND":e,this.connectors=a.is["boolean"](f)?f:!0,this.ignoreCase=a.is["boolean"](g)?g:!0,this.hidden=a.is["boolean"](h)?h:!1,this.query=c instanceof a.Query?c:new a.Query(c,this.space,this.connectors,this.ignoreCase),this.columns=d},match:function(b){return a.is.string(b)?(a.is.string(this.query)&&(this.query=new a.Query(this.query,this.space,this.connectors,this.ignoreCase)),this.query instanceof a.Query?this.query.match(b):!1):!1},matchRow:function(b){var c=this,d=a.arr.map(b.cells,function(b){return a.arr.contains(c.columns,b.column)?b.filterValue:null}).join(" ");return c.match(d)}})}(FooTable),function(a,b){b.Filtering=b.Component.extend({construct:function(a){this._super(a,a.o.filtering.enabled),this.filters=a.o.filtering.filters,this.delay=a.o.filtering.delay,this.min=a.o.filtering.min,this.space=a.o.filtering.space,this.connectors=a.o.filtering.connectors,this.ignoreCase=a.o.filtering.ignoreCase,this.exactMatch=a.o.filtering.exactMatch,this.placeholder=a.o.filtering.placeholder,this.dropdownTitle=a.o.filtering.dropdownTitle,this.position=a.o.filtering.position,this.$row=null,this.$cell=null,this.$dropdown=null,this.$input=null,this.$button=null,this._filterTimeout=null,this._exactRegExp=/^"(.*?)"$/},preinit:function(a){var c=this;return c.ft.raise("preinit.ft.filtering").then(function(){c.ft.$el.hasClass("footable-filtering")&&(c.enabled=!0),c.enabled=b.is["boolean"](a.filtering)?a.filtering:c.enabled,c.enabled&&(c.space=b.is.string(a.filterSpace)?a.filterSpace:c.space,c.min=b.is.number(a.filterMin)?a.filterMin:c.min,c.connectors=b.is["boolean"](a.filterConnectors)?a.filterConnectors:c.connectors,c.ignoreCase=b.is["boolean"](a.filterIgnoreCase)?a.filterIgnoreCase:c.ignoreCase,c.exactMatch=b.is["boolean"](a.filterExactMatch)?a.filterExactMatch:c.exactMatch,c.delay=b.is.number(a.filterDelay)?a.filterDelay:c.delay,c.placeholder=b.is.string(a.filterPlaceholder)?a.filterPlaceholder:c.placeholder,c.dropdownTitle=b.is.string(a.filterDropdownTitle)?a.filterDropdownTitle:c.dropdownTitle,c.filters=b.is.array(a.filterFilters)?c.ensure(a.filterFilters):c.ensure(c.filters),c.ft.$el.hasClass("footable-filtering-left")&&(c.position="left"),c.ft.$el.hasClass("footable-filtering-center")&&(c.position="center"),c.ft.$el.hasClass("footable-filtering-right")&&(c.position="right"),c.position=b.is.string(a.filterPosition)?a.filterPosition:c.position)},function(){c.enabled=!1})},init:function(){var a=this;return a.ft.raise("init.ft.filtering").then(function(){a.$create()},function(){a.enabled=!1})},destroy:function(){var a=this;return a.ft.raise("destroy.ft.filtering").then(function(){a.ft.$el.removeClass("footable-filtering").find("thead > tr.footable-filtering").remove()})},$create:function(){var c,d=this,e=a("
",{"class":"form-group footable-filtering-search"}).append(a("
",{"class":"footable-filtering"}).prependTo(d.ft.$el.children("thead")),d.$cell=a("").addClass(this.row.classes.join(" ")).data("__FooTableCell__",this).append(a("")).data("__FooTableRow__",this),this._setClasses(this.$el),this._setStyle(this.$el),"last"==this.ft.rows.toggleColumn&&this.$toggle.addClass("last-column"),this.$details=a("",{"class":"footable-detail-row"}).append(a("
").text(this.emptyString))},draw:function(){var a=this,c=a.ft.$el.children("tbody"),d=!0;a.array.length>0?(a.$empty.detach(),b.arr.each(a.array,function(b){(a.expandFirst&&d||a.expandAll)&&(b.expanded=!0,d=!1),b.draw(c)})):(a.$empty.children("td").attr("colspan",a.ft.columns.visibleColspan),c.append(a.$empty))},load:function(c,d){var e=this,f=a.map(c,function(a){return new b.Row(e.ft,e.ft.columns.array,a)});b.arr.each(this.array,function(a){a.predraw()}),this.all=(b.is["boolean"](d)?d:!1)?this.all.concat(f):f,this.array=this.all.slice(0),this.ft.draw()},expand:function(){b.arr.each(this.array,function(a){a.expand()})},collapse:function(){b.arr.each(this.array,function(a){a.collapse()})}}),b.components.register("rows",b.Rows,800)}(jQuery,FooTable),function(a){a.Defaults.prototype.rows=[],a.Defaults.prototype.empty="No results",a.Defaults.prototype.showToggle=!0,a.Defaults.prototype.toggleSelector="tr,td,.footable-toggle",a.Defaults.prototype.toggleColumn="first",a.Defaults.prototype.expandFirst=!1,a.Defaults.prototype.expandAll=!1}(FooTable),function(a){a.Table.prototype.loadRows=function(a,b){this.rows.load(a,b)}}(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/footable.editing.js b/media/footable-v3/js/footable.editing.js new file mode 100644 index 0000000..ec2e186 --- /dev/null +++ b/media/footable-v3/js/footable.editing.js @@ -0,0 +1,802 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +(function($, F){ + + F.Editing = F.Component.extend(/** @lends FooTable.Editing */{ + /** + * The editing component adds a column with edit and delete buttons to each row as well as a single add row button in the footer. + * @constructs + * @extends FooTable.Component + * @param {FooTable.Table} table - The parent {@link FooTable.Table} object for the component. + * @returns {FooTable.Editing} + */ + construct: function(table){ + // call the base constructor + this._super(table, table.o.editing.enabled); + + /** + * Whether or not to automatically page to a new row when it is added to the table. + * @type {boolean} + */ + this.pageToNew = table.o.editing.pageToNew; + + /** + * Whether or not the editing column and add row button are always visible. + * @type {boolean} + */ + this.alwaysShow = table.o.editing.alwaysShow; + + /** + * The options for the editing column. @see {@link FooTable.EditingColumn} for more info. + * @type {object} + * @prop {string} classes="footable-editing" - A space separated string of class names to apply to all cells in the column. + * @prop {string} name="editing" - The name of the column. + * @prop {string} title="" - The title displayed in the header row of the table for the column. + * @prop {boolean} filterable=false - Whether or not the column should be filterable when using the filtering component. + * @prop {boolean} sortable=false - Whether or not the column should be sortable when using the sorting component. + */ + this.column = $.extend(true, {}, table.o.editing.column, {visible: this.alwaysShow}); + + /** + * The position of the editing column in the table as well as the alignment of the buttons. + * @type {string} + */ + this.position = table.o.editing.position; + + + /** + * The text that appears in the show button. This can contain HTML. + * @type {string} + */ + this.showText = table.o.editing.showText; + + /** + * The text that appears in the hide button. This can contain HTML. + * @type {string} + */ + this.hideText = table.o.editing.hideText; + + /** + * The text that appears in the add button. This can contain HTML. + * @type {string} + */ + this.addText = table.o.editing.addText; + + /** + * The text that appears in the edit button. This can contain HTML. + * @type {string} + */ + this.editText = table.o.editing.editText; + + /** + * The text that appears in the delete button. This can contain HTML. + * @type {string} + */ + this.deleteText = table.o.editing.deleteText; + + /** + * The text that appears in the view button. This can contain HTML. + * @type {string} + */ + this.viewText = table.o.editing.viewText; + + /** + * Whether or not to show the Add Row button. + * @type {boolean} + */ + this.allowAdd = table.o.editing.allowAdd; + + /** + * Whether or not to show the Edit Row button. + * @type {boolean} + */ + this.allowEdit = table.o.editing.allowEdit; + + /** + * Whether or not to show the Delete Row button. + * @type {boolean} + */ + this.allowDelete = table.o.editing.allowDelete; + + /** + * Whether or not to show the View Row button. + * @type {boolean} + */ + this.allowView = table.o.editing.allowView; + + /** + * Caches the row button elements to help with performance. + * @type {(null|jQuery)} + * @private + */ + this._$buttons = null; + + /** + * This object is used to contain the callbacks for the add, edit and delete row buttons. + * @type {object} + * @prop {function} addRow + * @prop {function} editRow + * @prop {function} deleteRow + * @prop {function} viewRow + */ + this.callbacks = { + addRow: F.checkFnValue(this, table.o.editing.addRow), + editRow: F.checkFnValue(this, table.o.editing.editRow), + deleteRow: F.checkFnValue(this, table.o.editing.deleteRow), + viewRow: F.checkFnValue(this, table.o.editing.viewRow) + }; + }, + /* PROTECTED */ + /** + * Checks the supplied data and options for the editing component. + * @instance + * @protected + * @param {object} data - The jQuery data object from the parent table. + * @fires FooTable.Editing#"preinit.ft.editing" + */ + preinit: function(data){ + var self = this; + /** + * The preinit.ft.editing event is raised before the UI is created and provides the tables jQuery data object for additional options parsing. + * Calling preventDefault on this event will disable the component. + * @event FooTable.Editing#"preinit.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {object} data - The jQuery data object of the table raising the event. + */ + this.ft.raise('preinit.ft.editing', [data]).then(function(){ + if (self.ft.$el.hasClass('footable-editing')) + self.enabled = true; + + self.enabled = F.is.boolean(data.editing) + ? data.editing + : self.enabled; + + if (!self.enabled) return; + + self.pageToNew = F.is.boolean(data.editingPageToNew) ? data.editingPageToNew : self.pageToNew; + + self.alwaysShow = F.is.boolean(data.editingAlwaysShow) ? data.editingAlwaysShow : self.alwaysShow; + + self.position = F.is.string(data.editingPosition) ? data.editingPosition : self.position; + + self.showText = F.is.string(data.editingShowText) ? data.editingShowText : self.showText; + + self.hideText = F.is.string(data.editingHideText) ? data.editingHideText : self.hideText; + + self.addText = F.is.string(data.editingAddText) ? data.editingAddText : self.addText; + + self.editText = F.is.string(data.editingEditText) ? data.editingEditText : self.editText; + + self.deleteText = F.is.string(data.editingDeleteText) ? data.editingDeleteText : self.deleteText; + + self.viewText = F.is.string(data.editingViewText) ? data.editingViewText : self.viewText; + + self.allowAdd = F.is.boolean(data.editingAllowAdd) ? data.editingAllowAdd : self.allowAdd; + + self.allowEdit = F.is.boolean(data.editingAllowEdit) ? data.editingAllowEdit : self.allowEdit; + + self.allowDelete = F.is.boolean(data.editingAllowDelete) ? data.editingAllowDelete : self.allowDelete; + + self.allowView = F.is.boolean(data.editingAllowView) ? data.editingAllowView : self.allowView; + + self.column = new F.EditingColumn(self.ft, self, $.extend(true, {}, self.column, data.editingColumn, {visible: self.alwaysShow})); + + if (self.ft.$el.hasClass('footable-editing-left')) + self.position = 'left'; + + if (self.ft.$el.hasClass('footable-editing-right')) + self.position = 'right'; + + if (self.position === 'right'){ + self.column.index = self.ft.columns.array.length; + } else { + self.column.index = 0; + for (var i = 0, len = self.ft.columns.array.length; i < len; i++){ + self.ft.columns.array[i].index += 1; + } + } + self.ft.columns.array.push(self.column); + self.ft.columns.array.sort(function(a, b){ return a.index - b.index; }); + + self.callbacks.addRow = F.checkFnValue(self, data.editingAddRow, self.callbacks.addRow); + self.callbacks.editRow = F.checkFnValue(self, data.editingEditRow, self.callbacks.editRow); + self.callbacks.deleteRow = F.checkFnValue(self, data.editingDeleteRow, self.callbacks.deleteRow); + self.callbacks.viewRow = F.checkFnValue(self, data.editingViewRow, self.callbacks.viewRow); + }, function(){ + self.enabled = false; + }); + }, + /** + * Initializes the editing component for the plugin using the supplied table and options. + * @instance + * @protected + * @fires FooTable.Editing#"init.ft.editing" + */ + init: function(){ + /** + * The init.ft.editing event is raised before its UI is generated. + * Calling preventDefault on this event will disable the component. + * @event FooTable.Editing#"init.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + var self = this; + this.ft.raise('init.ft.editing').then(function(){ + self.$create(); + }, function(){ + self.enabled = false; + }); + }, + /** + * Destroys the editing component removing any UI generated from the table. + * @instance + * @protected + * @fires FooTable.Editing#"destroy.ft.editing" + */ + destroy: function () { + /** + * The destroy.ft.editing event is raised before its UI is removed. + * Calling preventDefault on this event will prevent the component from being destroyed. + * @event FooTable.Editing#"destroy.ft.editing" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + var self = this; + this.ft.raise('destroy.ft.editing').then(function(){ + self.ft.$el.removeClass('footable-editing footable-editing-always-show footable-editing-no-add footable-editing-no-edit footable-editing-no-delete footable-editing-no-view') + .off('click.ft.editing').find('tfoot > tr.footable-editing').remove(); + }); + }, + /** + * Creates the editing UI from the current options setting the various jQuery properties of this component. + * @instance + * @protected + */ + $create: function(){ + var self = this, position = self.position === 'right' ? 'footable-editing-right' : 'footable-editing-left'; + self.ft.$el.addClass('footable-editing').addClass(position) + .on('click.ft.editing', '.footable-show', {self: self}, self._onShowClick) + .on('click.ft.editing', '.footable-hide', {self: self}, self._onHideClick) + .on('click.ft.editing', '.footable-edit', {self: self}, self._onEditClick) + .on('click.ft.editing', '.footable-delete', {self: self}, self._onDeleteClick) + .on('click.ft.editing', '.footable-view', {self: self}, self._onViewClick) + .on('click.ft.editing', '.footable-add', {self: self}, self._onAddClick); + + self.$cell = $('').attr('colspan', self.ft.columns.visibleColspan).append(self.$buttonShow()); + if (self.allowAdd){ + self.$cell.append(self.$buttonAdd()); + } + self.$cell.append(self.$buttonHide()); + + if (self.alwaysShow){ + self.ft.$el.addClass('footable-editing-always-show'); + } + + if (!self.allowAdd) self.ft.$el.addClass('footable-editing-no-add'); + if (!self.allowEdit) self.ft.$el.addClass('footable-editing-no-edit'); + if (!self.allowDelete) self.ft.$el.addClass('footable-editing-no-delete'); + if (!self.allowView) self.ft.$el.addClass('footable-editing-no-view'); + + var $tfoot = self.ft.$el.children('tfoot'); + if ($tfoot.length == 0){ + $tfoot = $('
', {'class': 'footable-editing'})).html(this.title); + }, + /** + * This is supplied either the cell value or jQuery object to parse. Any value can be returned from this method and + * will be provided to the {@link FooTable.EditingColumn#format} function + * to generate the cell contents. + * @instance + * @protected + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {(jQuery)} + */ + parser: function(valueOrElement){ + if (F.is.string(valueOrElement)) valueOrElement = $($.trim(valueOrElement)); + if (F.is.element(valueOrElement)) valueOrElement = $(valueOrElement); + if (F.is.jq(valueOrElement)){ + var tagName = valueOrElement.prop('tagName').toLowerCase(); + if (tagName == 'td' || tagName == 'th') return valueOrElement.data('value') || valueOrElement.contents(); + return valueOrElement; + } + return null; + }, + /** + * Creates a cell to be used in the supplied row for this column. + * @param {FooTable.Row} row - The row to create the cell for. + * @returns {FooTable.Cell} + */ + createCell: function(row){ + var $buttons = this.editing.$rowButtons(), $cell = $('').append($buttons); + if (F.is.jq(row.$el)){ + if (this.index === 0){ + $cell.prependTo(row.$el); + } else { + $cell.insertAfter(row.$el.children().eq(this.index-1)); + } + } + return new F.Cell(this.ft, row, this, $cell || $cell.html()); + } + }); + + F.columns.register('editing', F.EditingColumn); + +})(jQuery, FooTable); +(function($, F) { + + /** + * An object containing the editing options for the plugin. Added by the {@link FooTable.Editing} component. + * @type {object} + * @prop {boolean} enabled=false - Whether or not to allow editing on the table. + * @prop {boolean} pageToNew=true - Whether or not to automatically page to a new row when it is added to the table. + * @prop {string} position="right" - The position of the editing column in the table as well as the alignment of the buttons. + * @prop {boolean} alwaysShow=false - Whether or not the editing column and add row button are always visible. + * @prop {function} addRow - The callback function to execute when the add row button is clicked. + * @prop {function} editRow - The callback function to execute when the edit row button is clicked. + * @prop {function} deleteRow - The callback function to execute when the delete row button is clicked. + * @prop {function} viewRow - The callback function to execute when the view row button is clicked. + * @prop {string} showText - The text that appears in the show button. This can contain HTML. + * @prop {string} hideText - The text that appears in the hide button. This can contain HTML. + * @prop {string} addText - The text that appears in the add button. This can contain HTML. + * @prop {string} editText - The text that appears in the edit button. This can contain HTML. + * @prop {string} deleteText - The text that appears in the delete button. This can contain HTML. + * @prop {string} viewText - The text that appears in the view button. This can contain HTML. + * @prop {boolean} allowAdd - Whether or not to show the Add Row button. + * @prop {boolean} allowEdit - Whether or not to show the Edit Row button. + * @prop {boolean} allowDelete - Whether or not to show the Delete Row button. + * @prop {boolean} allowView - Whether or not to show the View Row button. + * @prop {object} column - The options for the editing column. @see {@link FooTable.EditingColumn} for more info. + * @prop {string} column.classes="footable-editing" - A space separated string of class names to apply to all cells in the column. + * @prop {string} column.name="editing" - The name of the column. + * @prop {string} column.title="" - The title displayed in the header row of the table for the column. + * @prop {boolean} column.filterable=false - Whether or not the column should be filterable when using the filtering component. + * @prop {boolean} column.sortable=false - Whether or not the column should be sortable when using the sorting component. + */ + F.Defaults.prototype.editing = { + enabled: false, + pageToNew: true, + position: 'right', + alwaysShow: false, + addRow: function(){}, + editRow: function(row){}, + deleteRow: function(row){}, + viewRow: function(row){}, + showText: ' Edit rows', + hideText: 'Cancel', + addText: 'New row', + editText: '', + deleteText: '', + viewText: '', + allowAdd: true, + allowEdit: true, + allowDelete: true, + allowView: false, + column: { + classes: 'footable-editing', + name: 'editing', + title: '', + filterable: false, + sortable: false + } + }; + +})(jQuery, FooTable); + +(function($, F){ + + if (F.is.defined(F.Paging)){ + /** + * Holds a shallow clone of the un-paged {@link FooTable.Rows#array} value before paging occurs and superfluous rows are removed. Added by the {@link FooTable.Editing} component. + * @instance + * @public + * @type {Array} + */ + F.Paging.prototype.unpaged = []; + + // override the default predraw method with one that sets the unpaged property. + F.Paging.extend('predraw', function(){ + this.unpaged = this.ft.rows.array.slice(0); // create a shallow clone for later use + this._super(); // call the original method + }); + } + +})(jQuery, FooTable); +(function($, F){ + + /** + * Adds the row to the table. + * @param {boolean} [redraw=true] - Whether or not to redraw the table, defaults to true but for bulk operations this + * can be set to false and then followed by a call to the {@link FooTable.Table#draw} method. + * @returns {jQuery.Deferred} + */ + F.Row.prototype.add = function(redraw){ + redraw = F.is.boolean(redraw) ? redraw : true; + var self = this; + return $.Deferred(function(d){ + var index = self.ft.rows.all.push(self) - 1; + if (redraw){ + return self.ft.draw().then(function(){ + d.resolve(index); + }); + } else { + d.resolve(index); + } + }); + }; + + /** + * Removes the row from the table. + * @param {boolean} [redraw=true] - Whether or not to redraw the table, defaults to true but for bulk operations this + * can be set to false and then followed by a call to the {@link FooTable.Table#draw} method. + * @returns {jQuery.Deferred} + */ + F.Row.prototype.delete = function(redraw){ + redraw = F.is.boolean(redraw) ? redraw : true; + var self = this; + return $.Deferred(function(d){ + var index = self.ft.rows.all.indexOf(self); + if (F.is.number(index) && index >= 0 && index < self.ft.rows.all.length){ + self.ft.rows.all.splice(index, 1); + if (redraw){ + return self.ft.draw().then(function(){ + d.resolve(self); + }); + } + } + d.resolve(self); + }); + }; + + if (F.is.defined(F.Paging)){ + // override the default add method with one that supports paging + F.Row.extend('add', function(redraw){ + redraw = F.is.boolean(redraw) ? redraw : true; + var self = this, + added = this._super(redraw), + editing = self.ft.use(F.Editing), + paging; + if (editing && editing.pageToNew && (paging = self.ft.use(F.Paging)) && redraw){ + return added.then(function(){ + var index = paging.unpaged.indexOf(self); // find this row in the unpaged array (this array will be sorted and filtered) + var page = Math.ceil((index + 1) / paging.size); // calculate the page the new row is on + if (paging.current !== page){ // goto the page if we need to + return paging.goto(page); + } + }); + } + return added; + }); + } + + if (F.is.defined(F.Sorting)){ + // override the default val method with one that supports sorting and paging + F.Row.extend('val', function(data, redraw){ + redraw = F.is.boolean(redraw) ? redraw : true; + var result = this._super(data); + if (!F.is.hash(data)){ + return result; + } + var self = this; + if (redraw){ + self.ft.draw().then(function(){ + var editing = self.ft.use(F.Editing), paging; + if (F.is.defined(F.Paging) && editing && editing.pageToNew && (paging = self.ft.use(F.Paging))){ + var index = paging.unpaged.indexOf(self); // find this row in the unpaged array (this array will be sorted and filtered) + var page = Math.ceil((index + 1) / paging.size); // calculate the page the new row is on + if (paging.current !== page){ // goto the page if we need to + return paging.goto(page); + } + } + }); + } + return result; + }); + } + +})(jQuery, FooTable); +(function(F){ + + /** + * Adds a row to the underlying {@link FooTable.Rows#all} array. + * @param {(object|FooTable.Row)} dataOrRow - A hash containing the row values or an actual {@link FooTable.Row} object. + * @param {boolean} [redraw=true] - Whether or not to redraw the table, defaults to true but for bulk operations this + * can be set to false and then followed by a call to the {@link FooTable.Table#draw} method. + */ + F.Rows.prototype.add = function(dataOrRow, redraw){ + var row = dataOrRow; + if (F.is.hash(dataOrRow)){ + row = new FooTable.Row(this.ft, this.ft.columns.array, dataOrRow); + } + if (row instanceof FooTable.Row){ + row.add(redraw); + } + }; + + /** + * Updates a row in the underlying {@link FooTable.Rows#all} array. + * @param {(number|FooTable.Row)} indexOrRow - The index to update or the actual {@link FooTable.Row} object. + * @param {object} data - A hash containing the new row values. + * @param {boolean} [redraw=true] - Whether or not to redraw the table, defaults to true but for bulk operations this + * can be set to false and then followed by a call to the {@link FooTable.Table#draw} method. + */ + F.Rows.prototype.update = function(indexOrRow, data, redraw){ + var len = this.ft.rows.all.length, + row = indexOrRow; + if (F.is.number(indexOrRow) && indexOrRow >= 0 && indexOrRow < len){ + row = this.ft.rows.all[indexOrRow]; + } + if (row instanceof FooTable.Row && F.is.hash(data)){ + row.val(data, redraw); + } + }; + + /** + * Deletes a row from the underlying {@link FooTable.Rows#all} array. + * @param {(number|FooTable.Row)} indexOrRow - The index to delete or the actual {@link FooTable.Row} object. + * @param {boolean} [redraw=true] - Whether or not to redraw the table, defaults to true but for bulk operations this + * can be set to false and then followed by a call to the {@link FooTable.Table#draw} method. + */ + F.Rows.prototype.delete = function(indexOrRow, redraw){ + var len = this.ft.rows.all.length, + row = indexOrRow; + if (F.is.number(indexOrRow) && indexOrRow >= 0 && indexOrRow < len){ + row = this.ft.rows.all[indexOrRow]; + } + if (row instanceof FooTable.Row){ + row.delete(redraw); + } + }; + +})(FooTable); diff --git a/media/footable-v3/js/footable.editing.min.js b/media/footable-v3/js/footable.editing.min.js new file mode 100644 index 0000000..c7b23ca --- /dev/null +++ b/media/footable-v3/js/footable.editing.min.js @@ -0,0 +1,8 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +!function(a,b){b.Editing=b.Component.extend({construct:function(c){this._super(c,c.o.editing.enabled),this.pageToNew=c.o.editing.pageToNew,this.alwaysShow=c.o.editing.alwaysShow,this.column=a.extend(!0,{},c.o.editing.column,{visible:this.alwaysShow}),this.position=c.o.editing.position,this.showText=c.o.editing.showText,this.hideText=c.o.editing.hideText,this.addText=c.o.editing.addText,this.editText=c.o.editing.editText,this.deleteText=c.o.editing.deleteText,this.viewText=c.o.editing.viewText,this.allowAdd=c.o.editing.allowAdd,this.allowEdit=c.o.editing.allowEdit,this.allowDelete=c.o.editing.allowDelete,this.allowView=c.o.editing.allowView,this._$buttons=null,this.callbacks={addRow:b.checkFnValue(this,c.o.editing.addRow),editRow:b.checkFnValue(this,c.o.editing.editRow),deleteRow:b.checkFnValue(this,c.o.editing.deleteRow),viewRow:b.checkFnValue(this,c.o.editing.viewRow)}},preinit:function(c){var d=this;this.ft.raise("preinit.ft.editing",[c]).then(function(){if(d.ft.$el.hasClass("footable-editing")&&(d.enabled=!0),d.enabled=b.is["boolean"](c.editing)?c.editing:d.enabled,d.enabled){if(d.pageToNew=b.is["boolean"](c.editingPageToNew)?c.editingPageToNew:d.pageToNew,d.alwaysShow=b.is["boolean"](c.editingAlwaysShow)?c.editingAlwaysShow:d.alwaysShow,d.position=b.is.string(c.editingPosition)?c.editingPosition:d.position,d.showText=b.is.string(c.editingShowText)?c.editingShowText:d.showText,d.hideText=b.is.string(c.editingHideText)?c.editingHideText:d.hideText,d.addText=b.is.string(c.editingAddText)?c.editingAddText:d.addText,d.editText=b.is.string(c.editingEditText)?c.editingEditText:d.editText,d.deleteText=b.is.string(c.editingDeleteText)?c.editingDeleteText:d.deleteText,d.viewText=b.is.string(c.editingViewText)?c.editingViewText:d.viewText,d.allowAdd=b.is["boolean"](c.editingAllowAdd)?c.editingAllowAdd:d.allowAdd,d.allowEdit=b.is["boolean"](c.editingAllowEdit)?c.editingAllowEdit:d.allowEdit,d.allowDelete=b.is["boolean"](c.editingAllowDelete)?c.editingAllowDelete:d.allowDelete,d.allowView=b.is["boolean"](c.editingAllowView)?c.editingAllowView:d.allowView,d.column=new b.EditingColumn(d.ft,d,a.extend(!0,{},d.column,c.editingColumn,{visible:d.alwaysShow})),d.ft.$el.hasClass("footable-editing-left")&&(d.position="left"),d.ft.$el.hasClass("footable-editing-right")&&(d.position="right"),"right"===d.position)d.column.index=d.ft.columns.array.length;else{d.column.index=0;for(var e=0,f=d.ft.columns.array.length;f>e;e++)d.ft.columns.array[e].index+=1}d.ft.columns.array.push(d.column),d.ft.columns.array.sort(function(a,b){return a.index-b.index}),d.callbacks.addRow=b.checkFnValue(d,c.editingAddRow,d.callbacks.addRow),d.callbacks.editRow=b.checkFnValue(d,c.editingEditRow,d.callbacks.editRow),d.callbacks.deleteRow=b.checkFnValue(d,c.editingDeleteRow,d.callbacks.deleteRow),d.callbacks.viewRow=b.checkFnValue(d,c.editingViewRow,d.callbacks.viewRow)}},function(){d.enabled=!1})},init:function(){var a=this;this.ft.raise("init.ft.editing").then(function(){a.$create()},function(){a.enabled=!1})},destroy:function(){var a=this;this.ft.raise("destroy.ft.editing").then(function(){a.ft.$el.removeClass("footable-editing footable-editing-always-show footable-editing-no-add footable-editing-no-edit footable-editing-no-delete footable-editing-no-view").off("click.ft.editing").find("tfoot > tr.footable-editing").remove()})},$create:function(){var b=this,c="right"===b.position?"footable-editing-right":"footable-editing-left";b.ft.$el.addClass("footable-editing").addClass(c).on("click.ft.editing",".footable-show",{self:b},b._onShowClick).on("click.ft.editing",".footable-hide",{self:b},b._onHideClick).on("click.ft.editing",".footable-edit",{self:b},b._onEditClick).on("click.ft.editing",".footable-delete",{self:b},b._onDeleteClick).on("click.ft.editing",".footable-view",{self:b},b._onViewClick).on("click.ft.editing",".footable-add",{self:b},b._onAddClick),b.$cell=a("").attr("colspan",b.ft.columns.visibleColspan).append(b.$buttonShow()),b.allowAdd&&b.$cell.append(b.$buttonAdd()),b.$cell.append(b.$buttonHide()),b.alwaysShow&&b.ft.$el.addClass("footable-editing-always-show"),b.allowAdd||b.ft.$el.addClass("footable-editing-no-add"),b.allowEdit||b.ft.$el.addClass("footable-editing-no-edit"),b.allowDelete||b.ft.$el.addClass("footable-editing-no-delete"),b.allowView||b.ft.$el.addClass("footable-editing-no-view");var d=b.ft.$el.children("tfoot");0==d.length&&(d=a("
",{"class":"footable-editing"})).html(this.title)},parser:function(c){if(b.is.string(c)&&(c=a(a.trim(c))),b.is.element(c)&&(c=a(c)),b.is.jq(c)){var d=c.prop("tagName").toLowerCase();return"td"==d||"th"==d?c.data("value")||c.contents():c}return null},createCell:function(c){var d=this.editing.$rowButtons(),e=a("").append(d);return b.is.jq(c.$el)&&(0===this.index?e.prependTo(c.$el):e.insertAfter(c.$el.children().eq(this.index-1))),new b.Cell(this.ft,c,this,e||e.html())}}),b.columns.register("editing",b.EditingColumn)}(jQuery,FooTable),function(a,b){b.Defaults.prototype.editing={enabled:!1,pageToNew:!0,position:"right",alwaysShow:!1,addRow:function(){},editRow:function(a){},deleteRow:function(a){},viewRow:function(a){},showText:' Edit rows',hideText:"Cancel",addText:"New row",editText:'',deleteText:'',viewText:'',allowAdd:!0,allowEdit:!0,allowDelete:!0,allowView:!1,column:{classes:"footable-editing",name:"editing",title:"",filterable:!1,sortable:!1}}}(jQuery,FooTable),function(a,b){b.is.defined(b.Paging)&&(b.Paging.prototype.unpaged=[],b.Paging.extend("predraw",function(){this.unpaged=this.ft.rows.array.slice(0),this._super()}))}(jQuery,FooTable),function(a,b){b.Row.prototype.add=function(c){c=b.is["boolean"](c)?c:!0;var d=this;return a.Deferred(function(a){var b=d.ft.rows.all.push(d)-1;return c?d.ft.draw().then(function(){a.resolve(b)}):void a.resolve(b)})},b.Row.prototype["delete"]=function(c){c=b.is["boolean"](c)?c:!0;var d=this;return a.Deferred(function(a){var e=d.ft.rows.all.indexOf(d);return b.is.number(e)&&e>=0&&e=0&&e>b&&(f=this.ft.rows.all[b]),f instanceof FooTable.Row&&a.is.hash(c)&&f.val(c,d)},a.Rows.prototype["delete"]=function(b,c){var d=this.ft.rows.all.length,e=b;a.is.number(b)&&b>=0&&d>b&&(e=this.ft.rows.all[b]),e instanceof FooTable.Row&&e["delete"](c)}}(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/footable.filtering.js b/media/footable-v3/js/footable.filtering.js new file mode 100644 index 0000000..5b077a7 --- /dev/null +++ b/media/footable-v3/js/footable.filtering.js @@ -0,0 +1,1044 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +(function(F){ + F.Filter = F.Class.extend(/** @lends FooTable.Filter */{ + /** + * The filter object contains the query to filter by and the columns to apply it to. + * @constructs + * @extends FooTable.Class + * @param {string} name - The name for the filter. + * @param {(string|FooTable.Query)} query - The query for the filter. + * @param {Array.} columns - The columns to apply the query to. + * @param {string} [space="AND"] - How the query treats space chars. + * @param {boolean} [connectors=true] - Whether or not to replace phrase connectors (+.-_) with spaces. + * @param {boolean} [ignoreCase=true] - Whether or not ignore case when matching. + * @param {boolean} [hidden=true] - Whether or not this is a hidden filter. + * @returns {FooTable.Filter} + */ + construct: function(name, query, columns, space, connectors, ignoreCase, hidden){ + /** + * The name of the filter. + * @instance + * @type {string} + */ + this.name = name; + /** + * A string specifying how the filter treats space characters. Can be either "OR" or "AND". + * @instance + * @type {string} + */ + this.space = F.is.string(space) && (space == 'OR' || space == 'AND') ? space : 'AND'; + /** + * Whether or not to replace phrase connectors (+.-_) with spaces before executing the query. + * @instance + * @type {boolean} + */ + this.connectors = F.is.boolean(connectors) ? connectors : true; + /** + * Whether or not ignore case when matching. + * @instance + * @type {boolean} + */ + this.ignoreCase = F.is.boolean(ignoreCase) ? ignoreCase : true; + /** + * Whether or not this is a hidden filter. + * @instance + * @type {boolean} + */ + this.hidden = F.is.boolean(hidden) ? hidden : false; + /** + * The query for the filter. + * @instance + * @type {(string|FooTable.Query)} + */ + this.query = query instanceof F.Query ? query : new F.Query(query, this.space, this.connectors, this.ignoreCase); + /** + * The columns to apply the query to. + * @instance + * @type {Array.} + */ + this.columns = columns; + }, + /** + * Checks if the current filter matches the supplied string. + * If the current query property is a string it will be auto converted to a {@link FooTable.Query} object to perform the match. + * @instance + * @param {string} str - The string to check. + * @returns {boolean} + */ + match: function(str){ + if (!F.is.string(str)) return false; + if (F.is.string(this.query)){ + this.query = new F.Query(this.query, this.space, this.connectors, this.ignoreCase); + } + return this.query instanceof F.Query ? this.query.match(str) : false; + }, + /** + * Checks if the current filter matches the supplied {@link FooTable.Row}. + * @instance + * @param {FooTable.Row} row - The row to check. + * @returns {boolean} + */ + matchRow: function(row){ + var self = this, text = F.arr.map(row.cells, function(cell){ + return F.arr.contains(self.columns, cell.column) ? cell.filterValue : null; + }).join(' '); + return self.match(text); + } + }); + +})(FooTable); +(function ($, F) { + F.Filtering = F.Component.extend(/** @lends FooTable.Filtering */{ + /** + * The filtering component adds a search input and column selector dropdown to the table allowing users to filter the using space delimited queries. + * @constructs + * @extends FooTable.Component + * @param {FooTable.Table} table - The parent {@link FooTable.Table} object for the component. + * @returns {FooTable.Filtering} + */ + construct: function (table) { + // call the constructor of the base class + this._super(table, table.o.filtering.enabled); + + /* PUBLIC */ + /** + * The filters to apply to the current {@link FooTable.Rows#array}. + * @instance + * @type {Array.} + */ + this.filters = table.o.filtering.filters; + /** + * The delay in milliseconds before the query is auto applied after a change. + * @instance + * @type {number} + */ + this.delay = table.o.filtering.delay; + /** + * The minimum number of characters allowed in the search input before it is auto applied. + * @instance + * @type {number} + */ + this.min = table.o.filtering.min; + /** + * Specifies how whitespace in a filter query is handled. + * @instance + * @type {string} + */ + this.space = table.o.filtering.space; + /** + * Whether or not to replace phrase connectors (+.-_) with spaces before executing the query. + * @instance + * @type {boolean} + */ + this.connectors = table.o.filtering.connectors; + /** + * Whether or not ignore case when matching. + * @instance + * @type {boolean} + */ + this.ignoreCase = table.o.filtering.ignoreCase; + /** + * Whether or not search queries are treated as phrases when matching. + * @instance + * @type {boolean} + */ + this.exactMatch = table.o.filtering.exactMatch; + /** + * The placeholder text to display within the search $input. + * @instance + * @type {string} + */ + this.placeholder = table.o.filtering.placeholder; + /** + * The title to display at the top of the search input column select. + * @type {string} + */ + this.dropdownTitle = table.o.filtering.dropdownTitle; + /** + * The position of the $search input within the filtering rows cell. + * @type {string} + */ + this.position = table.o.filtering.position; + /** + * The jQuery row object that contains all the filtering specific elements. + * @instance + * @type {jQuery} + */ + this.$row = null; + /** + * The jQuery cell object that contains the search input and column selector. + * @instance + * @type {jQuery} + */ + this.$cell = null; + /** + * The jQuery object of the column selector dropdown. + * @instance + * @type {jQuery} + */ + this.$dropdown = null; + /** + * The jQuery object of the search input. + * @instance + * @type {jQuery} + */ + this.$input = null; + /** + * The jQuery object of the search button. + * @instance + * @type {jQuery} + */ + this.$button = null; + + /* PRIVATE */ + /** + * The timeout ID for the filter changed event. + * @instance + * @private + * @type {?number} + */ + this._filterTimeout = null; + /** + * The regular expression used to check for encapsulating quotations. + * @instance + * @private + * @type {RegExp} + */ + this._exactRegExp = /^"(.*?)"$/; + }, + + /* PROTECTED */ + /** + * Checks the supplied data and options for the filtering component. + * @instance + * @protected + * @param {object} data - The jQuery data object from the parent table. + * @fires FooTable.Filtering#"preinit.ft.filtering" + */ + preinit: function(data){ + var self = this; + /** + * The preinit.ft.filtering event is raised before the UI is created and provides the tables jQuery data object for additional options parsing. + * Calling preventDefault on this event will disable the component. + * @event FooTable.Filtering#"preinit.ft.filtering" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {object} data - The jQuery data object of the table raising the event. + */ + return self.ft.raise('preinit.ft.filtering').then(function(){ + // first check if filtering is enabled via the class being applied + if (self.ft.$el.hasClass('footable-filtering')) + self.enabled = true; + // then check if the data-filtering-enabled attribute has been set + self.enabled = F.is.boolean(data.filtering) + ? data.filtering + : self.enabled; + + // if filtering is not enabled exit early as we don't need to do anything else + if (!self.enabled) return; + + self.space = F.is.string(data.filterSpace) + ? data.filterSpace + : self.space; + + self.min = F.is.number(data.filterMin) + ? data.filterMin + : self.min; + + self.connectors = F.is.boolean(data.filterConnectors) + ? data.filterConnectors + : self.connectors; + + self.ignoreCase = F.is.boolean(data.filterIgnoreCase) + ? data.filterIgnoreCase + : self.ignoreCase; + + self.exactMatch = F.is.boolean(data.filterExactMatch) + ? data.filterExactMatch + : self.exactMatch; + + self.delay = F.is.number(data.filterDelay) + ? data.filterDelay + : self.delay; + + self.placeholder = F.is.string(data.filterPlaceholder) + ? data.filterPlaceholder + : self.placeholder; + + self.dropdownTitle = F.is.string(data.filterDropdownTitle) + ? data.filterDropdownTitle + : self.dropdownTitle; + + self.filters = F.is.array(data.filterFilters) + ? self.ensure(data.filterFilters) + : self.ensure(self.filters); + + if (self.ft.$el.hasClass('footable-filtering-left')) + self.position = 'left'; + if (self.ft.$el.hasClass('footable-filtering-center')) + self.position = 'center'; + if (self.ft.$el.hasClass('footable-filtering-right')) + self.position = 'right'; + + self.position = F.is.string(data.filterPosition) + ? data.filterPosition + : self.position; + },function(){ + self.enabled = false; + }); + }, + /** + * Initializes the filtering component for the plugin. + * @instance + * @protected + * @fires FooTable.Filtering#"init.ft.filtering" + */ + init: function () { + var self = this; + /** + * The init.ft.filtering event is raised before its UI is generated. + * Calling preventDefault on this event will disable the component. + * @event FooTable.Filtering#"init.ft.filtering" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + return self.ft.raise('init.ft.filtering').then(function(){ + self.$create(); + }, function(){ + self.enabled = false; + }); + }, + /** + * Destroys the filtering component removing any UI from the table. + * @instance + * @protected + * @fires FooTable.Filtering#"destroy.ft.filtering" + */ + destroy: function () { + /** + * The destroy.ft.filtering event is raised before its UI is removed. + * Calling preventDefault on this event will prevent the component from being destroyed. + * @event FooTable.Filtering#"destroy.ft.filtering" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + var self = this; + return self.ft.raise('destroy.ft.filtering').then(function(){ + self.ft.$el.removeClass('footable-filtering') + .find('thead > tr.footable-filtering').remove(); + }); + }, + /** + * Creates the filtering UI from the current options setting the various jQuery properties of this component. + * @instance + * @protected + * @this FooTable.Filtering + */ + $create: function () { + var self = this; + // generate the cell that actually contains all the UI. + var $form_grp = $('
', {'class': 'form-group footable-filtering-search'}) + .append($('
').attr('colspan', self.ft.columns.visibleColspan).appendTo(self.$row); + self.$form = $('
', {'class': 'form-inline'}).append($form_grp).appendTo(self.$cell); + + self.$input = $('', {type: 'text', 'class': 'form-control', placeholder: self.placeholder}); + + self.$button = $('
The below shows what is meant by the "left" side of a queryThe below shows what is meant by the "right" side of a query
").attr("colspan",d.ft.columns.visibleColspan).appendTo(d.$row),d.$form=a("",{"class":"form-inline"}).append(e).appendTo(d.$cell),d.$input=a("",{type:"text","class":"form-control",placeholder:d.placeholder}),d.$button=a("")).data("value",this.value).contents().detach().end().append(this.format(this.value)),this._setClasses(this.$el),this._setStyle(this.$el),this.$detail=a("
")).append(a("")),this.created=!0)},collapse:function(){this.created&&(this.$detail.children("th").html(this.column.title),this.$detail.children("td").first().attr("class",this.$el.attr("class")).attr("style",this.$el.attr("style")).css("display","table-cell").append(this.$el.contents().detach()),b.is.jq(this.$detail.parent())||this.$detail.appendTo(this.row.$details.find(".footable-details > tbody")))},restore:function(){if(this.created){if(b.is.jq(this.$detail.parent())){var a=this.$detail.children("td").first();this.$el.attr("class",a.attr("class")).attr("style",a.attr("style")).css("display",this.column.hidden||!this.column.visible?"none":"table-cell").append(a.contents().detach())}this.$detail.detach()}},parse:function(){return this.column.parser.call(this.column,this.$el,this.ft.o)},format:function(a){return this.column.formatter.call(this.column,a,this.ft.o)},val:function(c,d){if(b.is.undef(c))return this.value;var e=this,f=b.is.hash(c)&&b.is.hash(c.options)&&b.is.defined(c.value);if(this.o=a.extend(!0,{classes:e.classes,style:e.style},f?c.options:{}),this.value=f?c.value:c,this.classes=b.is.array(this.o.classes)?this.o.classes:b.is.string(this.o.classes)?this.o.classes.match(/\S+/g):[],this.style=b.is.hash(this.o.style)?this.o.style:b.is.string(this.o.style)?b.css2json(this.o.style):{},this.created){this.$el.data("value",this.value).empty();var g=this.$detail.children("td").first().empty(),h=b.is.jq(this.$detail.parent())?g:this.$el;h.append(this.format(this.value)),this._setClasses(h),this._setStyle(h),(b.is["boolean"](d)?d:!0)&&this.row.draw()}},_setClasses:function(a){var c=!b.is.emptyArray(this.column.classes),d=!b.is.emptyArray(this.classes),e=null;a.removeAttr("class"),(c||d)&&(c&&d?e=this.classes.concat(this.column.classes).join(" "):c?e=this.column.classes.join(" "):d&&(e=this.classes.join(" ")),b.is.emptyString(e)||a.addClass(e))},_setStyle:function(c){var d=!b.is.emptyObject(this.column.style),e=!b.is.emptyObject(this.style),f=null;c.removeAttr("style"),(d||e)&&(d&&e?f=a.extend({},this.column.style,this.style):d?f=this.column.style:e&&(f=this.style),b.is.hash(f)&&c.css(f))}})}(jQuery,FooTable),function(a,b){b.Column=b.Class.extend({construct:function(a,c,d){this.ft=a,this.type=b.is.emptyString(d)?"text":d,this.virtual=b.is["boolean"](c.virtual)?c.virtual:!1,this.$el=b.is.jq(c.$el)?c.$el:null,this.index=b.is.number(c.index)?c.index:-1,this.define(c),this.$create()},define:function(a){this.hidden=b.is["boolean"](a.hidden)?a.hidden:!1,this.visible=b.is["boolean"](a.visible)?a.visible:!0,this.name=b.is.string(a.name)?a.name:null,null==this.name&&(this.name="col"+(a.index+1)),this.title=b.is.string(a.title)?a.title:null,!this.virtual&&null==this.title&&b.is.jq(this.$el)&&(this.title=this.$el.html()),null==this.title&&(this.title="Column "+(a.index+1)),this.style=b.is.hash(a.style)?a.style:b.is.string(a.style)?b.css2json(a.style):{},this.classes=b.is.array(a.classes)?a.classes:b.is.string(a.classes)?a.classes.match(/\S+/g):[],this.parser=b.checkFnValue(this,a.parser,this.parser),this.formatter=b.checkFnValue(this,a.formatter,this.formatter)},$create:function(){(this.$el=!this.virtual&&b.is.jq(this.$el)?this.$el:a("")).html(this.title)},parser:function(c){return b.is.element(c)||b.is.jq(c)?a(c).data("value")||a(c).text():b.is.defined(c)&&null!=c?c+"":null},formatter:function(a){return null==a?"":a},createCell:function(a){var c=b.is.jq(a.$el)?a.$el.children("td,th").get(this.index):null,d=b.is.hash(a.value)?a.value[this.name]:null;return new b.Cell(this.ft,a,this,c||d)}}),b.columns=new b.ClassFactory,b.columns.register("text",b.Column)}(jQuery,FooTable),function(a,b){b.Defaults=function(){this.stopPropagation=!1,this.on=null},b.defaults=new b.Defaults}(jQuery,FooTable),function(a,b){b.Row=b.Class.extend({construct:function(a,b,c){this.ft=a,this.columns=b,this.created=!1,this.define(c),this.val()},define:function(c){this.$el=b.is.element(c)||b.is.jq(c)?a(c):null,this.$toggle=a("",{"class":"footable-toggle fooicon fooicon-plus"});var d=b.is.hash(c),e=d&&b.is.hash(c.options)&&b.is.hash(c.value);this.value=d?e?c.value:c:null,this.o=a.extend(!0,{expanded:!1,classes:null,style:null},e?c.options:{}),this.expanded=b.is.jq(this.$el)?this.$el.data("expanded")||this.o.expanded:this.o.expanded,this.classes=b.is.jq(this.$el)&&this.$el.attr("class")?this.$el.attr("class").match(/\S+/g):b.is.array(this.o.classes)?this.o.classes:b.is.string(this.o.classes)?this.o.classes.match(/\S+/g):[],this.style=b.is.jq(this.$el)&&this.$el.attr("style")?b.css2json(this.$el.attr("style")):b.is.hash(this.o.style)?this.o.style:b.is.string(this.o.style)?b.css2json(this.o.style):{},this.cells=this.createCells()},$create:function(){if(!this.created){(this.$el=b.is.jq(this.$el)?this.$el:a("
",{colspan:this.ft.columns.visibleColspan}).append(a("",{"class":"footable-details "+this.ft.classes.join(" ")}).append("")));var c=this;b.arr.each(c.cells,function(a){a.created||a.$create(),c.$el.append(a.$el)}),c.$el.off("click.ft.row").on("click.ft.row",{self:c},c._onToggle),this.created=!0}},createCells:function(){var a=this;return b.arr.map(a.columns,function(b){return b.createCell(a)})},val:function(c){var d=this;if(!b.is.hash(c))return b.is.hash(this.value)&&!b.is.emptyObject(this.value)||(this.value={},b.arr.each(this.cells,function(a){d.value[a.column.name]=a.val()})),this.value;this.collapse(!1);var e=b.is.hash(c),f=e&&b.is.hash(c.options)&&b.is.hash(c.value);this.o=a.extend(!0,{expanded:d.expanded,classes:d.classes,style:d.style},f?c.options:{}),this.expanded=this.o.expanded,this.classes=b.is.array(this.o.classes)?this.o.classes:b.is.string(this.o.classes)?this.o.classes.match(/\S+/g):[],this.style=b.is.hash(this.o.style)?this.o.style:b.is.string(this.o.style)?b.css2json(this.o.style):{},this.value=e?f?c.value:c:null,b.arr.each(this.cells,function(a){b.is.defined(d.value[a.column.name])&&a.val(d.value[a.column.name],!1)}),this.created&&(this._setClasses(this.$el),this._setStyle(this.$el),this.draw())},_setClasses:function(a){var c=!b.is.emptyArray(this.classes),d=null;a.removeAttr("class"),c&&(d=this.classes.join(" "),b.is.emptyString(d)||a.addClass(d))},_setStyle:function(a){var c=!b.is.emptyObject(this.style),d=null;a.removeAttr("style"),c&&(d=this.style,b.is.hash(d)&&a.css(d))},expand:function(){this.created&&(this.__hidden__=b.arr.map(this.cells,function(a){return a.column.hidden&&a.column.visible?a:null}),this.__hidden__.length>0&&(this.$details.insertAfter(this.$el).children("td").first().attr("colspan",this.ft.columns.visibleColspan),b.arr.each(this.__hidden__,function(a){a.collapse()})),this.$el.attr("data-expanded",!0),this.$toggle.removeClass("fooicon-plus").addClass("fooicon-minus"),this.expanded=!0)},collapse:function(a){this.created&&(b.arr.each(this.__hidden__,function(a){a.restore()}),this.$details.detach(),this.$el.removeAttr("data-expanded"),this.$toggle.removeClass("fooicon-minus").addClass("fooicon-plus"),(b.is["boolean"](a)?a:!0)&&(this.expanded=!1))},predraw:function(){this.created&&(this.expanded&&this.collapse(!1),this.$toggle.detach(),this.$el.detach())},draw:function(a){this.created||this.$create(),b.is.jq(a)&&a.append(this.$el);var c=this;b.arr.each(c.cells,function(a){a.$el.css("display",a.column.hidden||!a.column.visible?"none":"table-cell"),c.ft.rows.showToggle&&c.ft.columns.hasHidden&&("first"==c.ft.rows.toggleColumn&&a.column.index==c.ft.columns.firstVisibleIndex||"last"==c.ft.rows.toggleColumn&&a.column.index==c.ft.columns.lastVisibleIndex)&&a.$el.prepend(c.$toggle)}),this.expanded&&this.expand()},toggle:function(){this.created&&this.ft.columns.hasHidden&&(this.expanded?this.collapse():this.expand())},_onToggle:function(b){var c=b.data.self;a(b.target).is("tr,td,.footable-toggle")&&c.toggle()}})}(jQuery,FooTable),function(a,b){b.instances=[],b.Table=b.Class.extend({construct:function(c,d,e){this._resizeTimeout=null,this.id=b.instances.push(this),this.initialized=!1,this.$el=(b.is.jq(c)?c:a(c)).first(),this.o=a.extend(!0,{},b.defaults,d),this.classes=[],this.breakpoints=b.components.internal.make("breakpoints",this),this.columns=b.components.internal.make("columns",this),this.rows=b.components.internal.make("rows",this),this.components={internal:[this.breakpoints,this.columns,this.rows],core:b.components.core.load(this),custom:b.components.load(this)};var f=this;f._preinit().then(function(){return f._init().then(function(){b.is.fn(e)&&e.call(f,f)})},function(a){b.is.error(a)&&console.error("FooTable: unhandled error thrown during initialization.",a)})},_preinit:function(){var c=this;return this.raise("preinit.ft.table").then(function(){var d=c.$el.attr("class").match(/\S+/g),e=c.$el.data()||{};c.o.ajax=b.checkFnValue(c,e.ajax,c.o.ajax),c.o.stopPropagation=b.is["boolean"](e.stopPropagation)?e.stopPropagation:c.o.stopPropagation;for(var f=0,g=d.length;g>f;f++)b.str.startsWith(d[f],"footable")||c.classes.push(d[f]);var h=a("
",{"class":"footable-loader"}).append(a("",{"class":"fooicon fooicon-loader"}));return c.$el.hide().after(h),c.execute(!1,!1,"preinit",e).always(function(){c.$el.show(),h.remove()})})},_init:function(){var c=this;return c.raise("init.ft.table").then(function(){var d=c.$el.children("thead"),e=c.$el.children("tbody"),f=c.$el.children("tfoot");return c.$el.addClass("footable footable-"+c.id),b.is.hash(c.o.on)&&c.$el.on(c.o.on),0==f.length&&c.$el.append(f=a("
")),0==e.length&&c.$el.append(""),0==d.length&&c.$el.prepend(d=a("")),c.execute(!1,!0,"init").then(function(){return c.$el.data("__FooTable__",c),0==f.children("tr").length&&f.remove(),0==d.children("tr").length&&d.remove(),c.draw().then(function(){a(window).off("resize.ft"+c.id,c._onWindowResize).on("resize.ft"+c.id,{self:c},c._onWindowResize),c.initialized=!0})})})},destroy:function(){var a=this;return a.raise("destroy.ft.table").then(function(){return a.execute(!0,!0,"destroy").then(function(){a.$el.removeData("__FooTable__"),b.is.hash(a.o.on)&&a.$el.off(a.o.on),a.initialized=!1})},function(a){b.is.error(a)&&console.error("FooTable: unhandled error thrown while destroying the plugin.",a)})},raise:function(c,d){var e=this,f=b.__debug__&&(b.is.emptyArray(b.__debug_options__.events)||b.arr.any(b.__debug_options__.events,function(a){return b.str.contains(c,a)}));return d=d||[],d.unshift(this),a.Deferred(function(b){var g=a.Event(c);1==e.o.stopPropagation&&e.$el.one(c,function(a){a.stopPropagation()}),f&&console.log("FooTable:"+c+": ",d),e.$el.trigger(g,d),g.isDefaultPrevented()?(f&&console.log('FooTable: default prevented for the "'+c+'" event.'),b.reject(g)):b.resolve(g)})},use:function(a){for(var b=this.components.internal.concat(this.components.core,this.components.custom),c=0,d=b.length;d>c;c++)if(b[c]instanceof a)return b[c];return null},draw:function(){var a=this;return a.execute(!1,!0,"predraw").then(function(){return a.raise("predraw.ft.table").then(function(){return a.execute(!1,!0,"draw").then(function(){return a.raise("draw.ft.table").then(function(){return a.execute(!1,!0,"postdraw").then(function(){a.raise("postdraw.ft.table")})})})})},function(a){b.is.error(a)&&console.error("FooTable: unhandled error thrown during a draw operation.",a)})},execute:function(a,c,d,e,f){var g=this,h=Array.prototype.slice.call(arguments);a=h.shift(),c=h.shift();var i=g.components.internal.slice(0),j=c?b.arr.get(g.components.core,function(a){return a.enabled}):g.components.core.slice(0),k=c?b.arr.get(g.components.custom,function(a){return a.enabled}):g.components.custom.slice(0);return h.unshift(a?k.reverse():i),g._execute.apply(g,h).then(function(){return h.shift(),h.unshift(a?j.reverse():j),g._execute.apply(g,h).then(function(){return h.shift(),h.unshift(a?i.reverse():k),g._execute.apply(g,h)})},function(a){b.is.error(a)&&console.error('FooTable: unhandled error thrown while executing "'+d+'".',a)})},_execute:function(c,d,e,f){if(!c||!c.length)return a.when();var g,h=this,i=Array.prototype.slice.call(arguments);return c=i.shift(),d=i.shift(),g=c.shift(),b.is.fn(g[d])?a.Deferred(function(a){try{var c=g[d].apply(g,i);if(b.is.promise(c))return c.then(a.resolve,a.reject);a.resolve(c)}catch(e){a.reject(e)}}).then(function(){return h._execute.apply(h,[c,d].concat(i))}):h._execute.apply(h,[c,d].concat(i))},_onWindowResize:function(a){var b=a.data.self;null!=b._resizeTimeout&&clearTimeout(b._resizeTimeout),b._resizeTimeout=setTimeout(function(){b._resizeTimeout=null,b.raise("resize.ft.table").then(function(){b.breakpoints.check()})},300)}})}(jQuery,FooTable),function(a,b){b.is.undef(window.moment)||(b.DateColumn=b.Column.extend({construct:function(a,c){this._super(a,c,"date"),this.formatString=b.is.string(c.formatString)?c.formatString:"MM-DD-YYYY"},parser:function(c){if((b.is.element(c)||b.is.jq(c))&&(c=a(c).data("value")||a(c).text(),b.is.string(c)&&(c=isNaN(c)?c:+c)),b.is.date(c))return moment(c);if(b.is.object(c)&&b.is["boolean"](c._isAMomentObject))return c;if(b.is.string(c)){if(isNaN(c))return moment(c,this.formatString);c=+c}return b.is.number(c)?moment(c):null},formatter:function(a){return b.is.object(a)&&b.is["boolean"](a._isAMomentObject)?a.format(this.formatString):""},filterValue:function(c){if((b.is.element(c)||b.is.jq(c))&&(c=a(c).data("filterValue")||a(c).text()),b.is.hash(c)&&b.is.hash(c.options)&&(b.is.string(c.options.filterValue)&&(c=c.options.filterValue),b.is.defined(c.value)&&(c=c.value)),b.is.object(c)&&b.is["boolean"](c._isAMomentObject))return c.format(this.formatString);if(b.is.string(c)){if(isNaN(c))return c;c=+c}return b.is.number(c)||b.is.date(c)?moment(c).format(this.formatString):b.is.defined(c)&&null!=c?c+"":""}}),b.columns.register("date",b.DateColumn))}(jQuery,FooTable),function(a,b){b.HTMLColumn=b.Column.extend({construct:function(a,b){this._super(a,b,"html")},parser:function(c){if(b.is.string(c)&&(c=a(a.trim(c))),b.is.element(c)&&(c=a(c)),b.is.jq(c)){var d=c.prop("tagName").toLowerCase();return"td"==d||"th"==d?c.data("value")||c.contents():c}return null}}),b.columns.register("html",b.HTMLColumn)}(jQuery,FooTable),function(a,b){b.NumberColumn=b.Column.extend({construct:function(a,c){this._super(a,c,"number"),this.decimalSeparator=b.is.string(c.decimalSeparator)?c.decimalSeparator:".",this.thousandSeparator=b.is.string(c.thousandSeparator)?c.thousandSeparator:".",this.decimalSeparatorRegex=new RegExp(b.str.escapeRegExp(this.decimalSeparator),"g"),this.thousandSeparatorRegex=new RegExp(b.str.escapeRegExp(this.thousandSeparator),"g"),this.cleanRegex=new RegExp("[^0-9"+b.str.escapeRegExp(this.decimalSeparator)+"]","g")},parser:function(c){return(b.is.element(c)||b.is.jq(c))&&(c=a(c).data("value")||a(c).text().replace(this.cleanRegex,"")),b.is.string(c)&&(c=c.replace(this.thousandSeparatorRegex,"").replace(this.decimalSeparatorRegex,"."),c=parseFloat(c)),b.is.number(c)?c:null},formatter:function(a){if(null==a)return"";var b=(a+"").split(".");return 2==b.length&&b[0].length>3&&(b[0]=b[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,this.thousandSeparator)),b.join(this.decimalSeparator)}}),b.columns.register("number",b.NumberColumn)}(jQuery,FooTable),function(a,b){b.Component=b.Class.extend({construct:function(a,c){if(!(a instanceof b.Table))throw new TypeError("The instance parameter must be an instance of FooTable.Table.");this.ft=a,this.enabled=b.is["boolean"](c)?c:!1},preinit:null,init:null,destroy:null,predraw:null,draw:null,postdraw:null}),b.components=new b.ClassFactory,b.components.core=new b.ClassFactory,b.components.internal=new b.ClassFactory}(jQuery,FooTable),function(a,b){b.Breakpoint=b.Class.extend({construct:function(a,b){this.name=a,this.width=b}})}(jQuery,FooTable),function(a,b){b.Breakpoints=b.Component.extend({construct:function(a){this._super(a,!0),this.o=a.o,this.current=null,this.array=[],this.cascade=this.o.cascade,this.useParentWidth=this.o.useParentWidth,this.hidden=null,this._classNames="",this.getWidth=b.checkFnValue(this,this.o.getWidth,this.getWidth)},preinit:function(a){var c=this;return this.ft.raise("preinit.ft.breakpoints",[a]).then(function(){c.cascade=b.is["boolean"](a.cascade)?a.cascade:c.cascade,c.o.breakpoints=b.is.hash(a.breakpoints)?a.breakpoints:c.o.breakpoints,c.getWidth=b.checkFnValue(c,a.getWidth,c.getWidth),null==c.o.breakpoints&&(c.o.breakpoints={xs:480,sm:768,md:992,lg:1200});for(var d in c.o.breakpoints)c.o.breakpoints.hasOwnProperty(d)&&(c.array.push(new b.Breakpoint(d,c.o.breakpoints[d])),c._classNames+="breakpoint-"+d+" ");c.array.sort(function(a,b){return b.width-a.width})})},init:function(){var a=this;return this.ft.raise("init.ft.breakpoints").then(function(){a.current=a.get()})},draw:function(){this.ft.$el.removeClass(this._classNames).addClass("breakpoint-"+this.current.name)},calculate:function(){for(var a,c=this,d=null,e=[],f=null,g=c.getWidth(),h=0,i=c.array.length;i>h;h++)a=c.array[h],(!d&&h==i-1||g>=a.width&&(f instanceof b.Breakpoint?g<=f.width:!0))&&(d=a),d||e.push(a.name),f=a;return e.push(d.name),c.hidden=e.join(" "),d},visible:function(a){if(b.is.emptyString(a))return!0;if("all"===a)return!1;for(var c=a.split(" "),d=0,e=c.length;e>d;d++)if(this.cascade?b.str.containsWord(this.hidden,c[d]):c[d]==this.current.name)return!1;return!0},check:function(){var a=this,c=a.get();c instanceof b.Breakpoint&&c!=a.current&&a.ft.raise("before.ft.breakpoints",[a.current,c]).then(function(){var b=a.current;return a.current=c,a.ft.draw().then(function(){a.ft.raise("after.ft.breakpoints",[a.current,b])})})},get:function(a){return b.is.undef(a)?this.calculate():a instanceof b.Breakpoint?a:b.is.string(a)?b.arr.first(this.array,function(b){return b.name==a}):b.is.number(a)&&a>=0&&af&&(f=a.index)}),f++;for(var g,h,i=0;f>i;i++)g={},b.arr.each(c,function(a){return a.index==i?(g=a,!1):void 0}),h={},b.arr.each(d,function(a){return a.index==i?(h=a,!1):void 0}),e.push(a.extend(!0,{},g,h))}return e}var f,g,h=[],i=[],j=d.ft.$el.find("tr.footable-header");if(0==j.length&&(j=d.ft.$el.find("thead > tr:last:has([data-breakpoints])")),0==j.length&&(j=d.ft.$el.find("tbody > tr:first:has([data-breakpoints])")),j.length>0){var k=j.parent().is("tbody")&&j.children().length==j.children("td").length;k||(d.$header=j.addClass("footable-header")),j.children("td,th").each(function(b,c){f=a(c),g=f.data(),g.index=b,g.$el=f,g.virtual=k,i.push(g)}),k&&(d.showHeader=!1)}b.is.array(d.o.columns)?(b.arr.each(d.o.columns,function(a,b){a.index=b,h.push(a)}),d.parseFinalize(c,e(h,i))):b.is.promise(d.o.columns)?d.o.columns.then(function(a){b.arr.each(a,function(a,b){a.index=b,h.push(a)}),d.parseFinalize(c,e(h,i))},function(a){c.reject(Error("Columns ajax request error: "+a.status+" ("+a.statusText+")"))}):d.parseFinalize(c,e(h,i))})},parseFinalize:function(a,c){var d,e=this,f=[];b.arr.each(c,function(a){(d=b.columns.contains(a.type)?b.columns.make(a.type,e.ft,a):new b.Column(e.ft,a))&&f.push(d)}),b.is.emptyArray(f)?a.reject(Error("No columns supplied.")):(f.sort(function(a,b){return a.index-b.index}),a.resolve(f))},preinit:function(a){var c=this;return c.ft.raise("preinit.ft.columns",[a]).then(function(){return c.parse(a).then(function(d){c.array=d,c.showHeader=b.is["boolean"](a.showHeader)?a.showHeader:c.showHeader})})},init:function(){var a=this;return this.ft.raise("init.ft.columns",[a.array]).then(function(){a.$create()})},predraw:function(){var a=this,c=!0;a.visibleColspan=0,a.firstVisibleIndex=0,a.lastVisibleIndex=0,a.hasHidden=!1,b.arr.each(a.array,function(b){b.hidden=!a.ft.breakpoints.visible(b.breakpoints),!b.hidden&&b.visible&&(c&&(a.firstVisibleIndex=b.index,c=!1),a.lastVisibleIndex=b.index, +a.visibleColspan++),b.hidden&&(a.hasHidden=!0)})},draw:function(){b.arr.each(this.array,function(a){a.$el.css("display",a.hidden||!a.visible?"none":"table-cell")}),!this.showHeader&&b.is.jq(this.$header.parent())&&this.$header.detach()},$create:function(){var c=this;c.$header=b.is.jq(c.$header)?c.$header:a("",{"class":"footable-header"}),c.$header.children("th,td").detach(),b.arr.each(c.array,function(a){c.$header.append(a.$el)}),c.showHeader&&!b.is.jq(c.$header.parent())&&c.ft.$el.children("thead").append(c.$header)},get:function(a){return a instanceof b.Column?a:b.is.string(a)?b.arr.first(this.array,function(b){return b.name==a}):b.is.number(a)?b.arr.first(this.array,function(b){return b.index==a}):b.is.fn(a)?b.arr.get(this.array,a):null},ensure:function(a){var c=this,d=[];return b.is.array(a)?(b.arr.each(a,function(a){d.push(c.get(a))}),d):d}}),b.components.internal.register("columns",b.Columns,5)}(jQuery,FooTable),function(a){a.Defaults.prototype.columns=[],a.Defaults.prototype.showHeader=!0}(FooTable),function(a,b){b.Rows=b.Component.extend({construct:function(a){this._super(a,!0),this.o=a.o,this.array=[],this.all=[],this.showToggle=a.o.showToggle,this.toggleColumn=a.o.toggleColumn,this.emptyString=a.o.empty,this.expandFirst=a.o.expandFirst,this.$empty=null},parse:function(){var c=this;return a.Deferred(function(a){var d=c.ft.$el.children("tbody").children("tr");b.is.jq(d)?(c.parseFinalize(a,d),d.detach()):b.is.array(c.o.rows)&&c.o.rows.length>0?c.parseFinalize(a,c.o.rows):b.is.promise(c.o.rows)?c.o.rows.then(function(b){c.parseFinalize(a,b)},function(b){a.reject(Error("Rows ajax request error: "+b.status+" ("+b.statusText+")"))}):c.parseFinalize(a,[])})},parseFinalize:function(c,d){var e=this,f=a.map(d,function(a){return new b.Row(e.ft,e.ft.columns.array,a)});c.resolve(f)},preinit:function(a){var c=this;return c.ft.raise("preinit.ft.rows",[a]).then(function(){return c.parse().then(function(d){c.all=d,c.array=c.all.slice(0),c.showToggle=b.is["boolean"](a.showToggle)?a.showToggle:c.showToggle,c.toggleColumn=b.is.string(a.toggleColumn)?a.toggleColumn:c.toggleColumn,"first"!=c.toggleColumn&&"last"!=c.toggleColumn&&(c.toggleColumn="first"),c.emptyString=b.is.string(a.empty)?a.empty:c.emptyString,c.expandFirst=b.is["boolean"](a.expandFirst)?a.expandFirst:c.expandFirst})})},init:function(){var a=this;return a.ft.raise("init.ft.rows",[a.all]).then(function(){a.$create()})},predraw:function(){b.arr.each(this.array,function(a){a.predraw()}),this.array=this.all.slice(0)},$create:function(){this.$empty=a("",{"class":"footable-empty"}).append(a("",{"class":"footable-filtering"}).prependTo(d.ft.$el.children("thead")),d.$cell=a(""),c.ft.$el.append(f)),c.$row=a("",{"class":"footable-paging"}).append(c.$cell).appendTo(f),c.$pagination=a("
    ",{"class":"pagination"}).on("click.footable","a.footable-page-link",{self:c},c._onPageClicked),c.$count=a("",{"class":"label label-default"}),c.$pagination.empty(),d&&(c.$pagination.append(e("first",c.strings.first,"footable-page-nav")),c.$pagination.append(e("prev",c.strings.prev,"footable-page-nav")),c.limit>0&&c.limit0&&c.limit",{"class":"divider"}),c.$count),c._total=c.total}},first:function(){return this._set(1)},prev:function(){return this._set(this.current-1>0?this.current-1:1)},next:function(){return this._set(this.current+1this.total?this.total:1>a?1:a)},prevPages:function(){var a=this.$pagination.children("li.footable-page.visible:first").data("page")-1;this._setVisible(a,!0),this._setNavigation(!1)},nextPages:function(){var a=this.$pagination.children("li.footable-page.visible:last").data("page")+1;this._setVisible(a,!1),this._setNavigation(!1)},pageSize:function(a){return b.is.number(a)?(this.size=a,this.total=Math.ceil(this.ft.rows.all.length/this.size),b.is.jq(this.$row)&&this.$row.remove(),this.$create(),void this.ft.draw()):this.size},_set:function(c){var d=this,e=new b.Pager(d.total,d.current,d.size,c,c>d.current);return d.ft.raise("before.ft.paging",[e]).then(function(){return e.page=e.page>e.total?e.total:e.page,e.page=e.page<1?1:e.page,d.current==c?a.when():(d._previous=d.current,d.current=e.page,d.ft.draw().then(function(){d.ft.raise("after.ft.paging",[e])}))})},_setNavigation:function(a){1==this.current?this.$pagination.children('li[data-page="first"],li[data-page="prev"]').addClass("disabled"):this.$pagination.children('li[data-page="first"],li[data-page="prev"]').removeClass("disabled"),this.current==this.total?this.$pagination.children('li[data-page="next"],li[data-page="last"]').addClass("disabled"):this.$pagination.children('li[data-page="next"],li[data-page="last"]').removeClass("disabled"),1==(this.$pagination.children("li.footable-page.visible:first").data("page")||1)?this.$pagination.children('li[data-page="prev-limit"]').addClass("disabled"):this.$pagination.children('li[data-page="prev-limit"]').removeClass("disabled"),(this.$pagination.children("li.footable-page.visible:last").data("page")||this.limit)==this.total?this.$pagination.children('li[data-page="next-limit"]').addClass("disabled"):this.$pagination.children('li[data-page="next-limit"]').removeClass("disabled"),this.limit>0&&this.total0&&this.total>this.limit){if(!this.$pagination.children('li.footable-page[data-page="'+a+'"]').hasClass("visible")){var c=0,d=0;1==b?(d=a>this.total?this.total:a,c=d-this.limit):(c=1>a?0:a-1,d=c+this.limit),0>c&&(c=0,d=this.limit>this.total?this.total:this.limit),d>this.total&&(d=this.total,c=this.total-this.limit<0?0:this.total-this.limit),this.$pagination.children("li.footable-page").removeClass("visible").slice(c,d).addClass("visible")}}else this.$pagination.children("li.footable-page").removeClass("visible").slice(0,this.total).addClass("visible");var e=this.size*(a-1)+1,f=this.size*a;0==this.ft.rows.array.length?(e=0,f=0):f=f>this._total?this._total:f,this._setCount(a,this.total,e,f,this._total)},_setCount:function(a,b,c,d,e){this.$count.text(this.countFormat.replace(/\{CP}/g,a).replace(/\{TP}/g,b).replace(/\{PF}/g,c).replace(/\{PL}/g,d).replace(/\{TR}/g,e))},_onPageClicked:function(b){if(b.preventDefault(),!a(b.target).closest("li").is(".active,.disabled")){var c=b.data.self,d=a(this).data("page");switch(d){case"first":return void c.first();case"prev":return void c.prev();case"next":return void c.next();case"last":return void c.last();case"prev-limit":return void c.prevPages();case"next-limit":return void c.nextPages();default:return void c._set(d)}}}}),b.components.core.register("paging",b.Paging,0)}(jQuery,FooTable),function(a){a.Defaults.prototype.paging={enabled:!1,countFormat:"{CP} of {TP}",current:1,limit:5,position:"center",size:10,strings:{first:"«",prev:"‹",next:"›",last:"»",prevPages:"...",nextPages:"..."}}}(FooTable),function(a){a.Table.prototype.gotoPage=function(b){return this.use(a.Paging)["goto"](b)},a.Table.prototype.nextPage=function(){return this.use(a.Paging).next()},a.Table.prototype.prevPage=function(){return this.use(a.Paging).prev()},a.Table.prototype.firstPage=function(){return this.use(a.Paging).first()},a.Table.prototype.lastPage=function(){return this.use(a.Paging).last()},a.Table.prototype.nextPages=function(){return this.use(a.Paging).nextPages()},a.Table.prototype.prevPages=function(){return this.use(a.Paging).prevPages()},a.Table.prototype.pageSize=function(b){return this.use(a.Paging).pageSize(b)}}(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/footable.paging.js b/media/footable-v3/js/footable.paging.js new file mode 100644 index 0000000..65de708 --- /dev/null +++ b/media/footable-v3/js/footable.paging.js @@ -0,0 +1,761 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +(function($, F){ + + F.Pager = F.Class.extend(/** @lends FooTable.Pager */{ + /** + * The pager object contains the page number and direction to page to. + * @constructs + * @extends FooTable.Class + * @param {number} total - The total number of pages available. + * @param {number} current - The current page number. + * @param {number} size - The number of rows per page. + * @param {number} page - The page number to goto. + * @param {boolean} forward - A boolean indicating the direction of paging, TRUE = forward, FALSE = back. + * @returns {FooTable.Pager} + */ + construct: function(total, current, size, page, forward){ + /** + * The total number of pages available. + * @type {number} + */ + this.total = total; + /** + * The current page number. + * @type {number} + */ + this.current = current; + /** + * The number of rows per page. + * @type {number} + */ + this.size = size; + /** + * The page number to goto. + * @type {number} + */ + this.page = page; + /** + * A boolean indicating the direction of paging, TRUE = forward, FALSE = back. + * @type {boolean} + */ + this.forward = forward; + } + }); + +})(jQuery, FooTable); +(function($, F){ + F.Paging = F.Component.extend(/** @lends FooTable.Paging */{ + /** + * The paging component adds a pagination control to the table allowing users to navigate table rows via pages. + * @constructs + * @extends FooTable.Component + * @param {FooTable.Table} table - The parent {@link FooTable.Table} object for the component. + * @returns {FooTable.Filtering} + */ + construct: function(table){ + // call the base constructor + this._super(table, table.o.paging.enabled); + + /* PROTECTED */ + /** + * An object containing the strings used by the paging buttons. + * @type {{ first: string, prev: string, next: string, last: string }} + */ + this.strings = table.o.paging.strings; + + /* PUBLIC */ + /** + * The current page number to display. + * @instance + * @type {number} + */ + this.current = table.o.paging.current; + /** + * The number of rows to display per page. + * @instance + * @type {number} + */ + this.size = table.o.paging.size; + /** + * The maximum number of page links to display at once. + * @instance + * @type {number} + */ + this.limit = table.o.paging.limit; + /** + * The position of the pagination control within the paging rows cell. + * @instance + * @type {string} + */ + this.position = table.o.paging.position; + /** + * The format string used to generate the text displayed under the pagination control. + * @instance + * @type {string} + */ + this.countFormat = table.o.paging.countFormat; + /** + * The total number of pages. + * @instance + * @type {number} + */ + this.total = -1; + /** + * The number of rows in the {@link FooTable.Rows#array} before paging is applied. + * @instance + * @type {number} + */ + this.totalRows = 0; + /** + * A number indicating the previous page displayed. + * @instance + * @type {number} + */ + this.previous = -1; + /** + * The count string generated using the {@link FooTable.Filtering#countFormat} option. This value is only set after the first call to the {@link FooTable.Filtering#predraw} method. + * @instance + * @type {string} + */ + this.formattedCount = null; + /** + * The jQuery row object that contains all the paging specific elements. + * @instance + * @type {jQuery} + */ + this.$row = null; + /** + * The jQuery cell object that contains the pagination control and total count. + * @instance + * @type {jQuery} + */ + this.$cell = null; + /** + * The jQuery object that contains the links for the pagination control. + * @instance + * @type {jQuery} + */ + this.$pagination = null; + /** + * The jQuery object that contains the row count. + * @instance + * @type {jQuery} + */ + this.$count = null; + /** + * Whether or not the pagination row is detached from the table. + * @instance + * @type {boolean} + */ + this.detached = true; + + /* PRIVATE */ + /** + * Used to hold the number of page links created. + * @instance + * @type {number} + * @private + */ + this._createdLinks = 0; + }, + + /* PROTECTED */ + /** + * Checks the supplied data and options for the paging component. + * @instance + * @protected + * @param {object} data - The jQuery data object from the parent table. + * @fires FooTable.Paging#"preinit.ft.paging" + */ + preinit: function(data){ + var self = this; + /** + * The preinit.ft.paging event is raised before the UI is created and provides the tables jQuery data object for additional options parsing. + * Calling preventDefault on this event will disable the component. + * @event FooTable.Paging#"preinit.ft.paging" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {object} data - The jQuery data object of the table raising the event. + */ + this.ft.raise('preinit.ft.paging', [data]).then(function(){ + if (self.ft.$el.hasClass('footable-paging')) + self.enabled = true; + self.enabled = F.is.boolean(data.paging) + ? data.paging + : self.enabled; + + if (!self.enabled) return; + + self.size = F.is.number(data.pagingSize) + ? data.pagingSize + : self.size; + + self.current = F.is.number(data.pagingCurrent) + ? data.pagingCurrent + : self.current; + + self.limit = F.is.number(data.pagingLimit) + ? data.pagingLimit + : self.limit; + + if (self.ft.$el.hasClass('footable-paging-left')) + self.position = 'left'; + if (self.ft.$el.hasClass('footable-paging-center')) + self.position = 'center'; + if (self.ft.$el.hasClass('footable-paging-right')) + self.position = 'right'; + + self.position = F.is.string(data.pagingPosition) + ? data.pagingPosition + : self.position; + + self.countFormat = F.is.string(data.pagingCountFormat) + ? data.pagingCountFormat + : self.countFormat; + + self.total = Math.ceil(self.ft.rows.all.length / self.size); + }, function(){ + self.enabled = false; + }); + }, + /** + * Initializes the paging component for the plugin using the supplied table and options. + * @instance + * @protected + * @fires FooTable.Paging#"init.ft.paging" + */ + init: function(){ + /** + * The init.ft.paging event is raised before its UI is generated. + * Calling preventDefault on this event will disable the component. + * @event FooTable.Paging#"init.ft.paging" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + var self = this; + this.ft.raise('init.ft.paging').then(function(){ + self.$create(); + }, function(){ + self.enabled = false; + }); + }, + /** + * Destroys the paging component removing any UI generated from the table. + * @instance + * @protected + * @fires FooTable.Paging#"destroy.ft.paging" + */ + destroy: function () { + /** + * The destroy.ft.paging event is raised before its UI is removed. + * Calling preventDefault on this event will prevent the component from being destroyed. + * @event FooTable.Paging#"destroy.ft.paging" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + */ + var self = this; + this.ft.raise('destroy.ft.paging').then(function(){ + self.ft.$el.removeClass('footable-paging') + .find('tfoot > tr.footable-paging').remove(); + self.detached = true; + self._createdLinks = 0; + }); + }, + /** + * Performs the actual paging against the {@link FooTable.Rows#current} array removing all rows that are not on the current visible page. + * @instance + * @protected + */ + predraw: function(){ + this.total = Math.ceil(this.ft.rows.array.length / this.size); + this.current = this.current > this.total ? this.total : (this.current < 1 ? 1 : this.current); + this.totalRows = this.ft.rows.array.length; + if (this.totalRows > this.size){ + this.ft.rows.array = this.ft.rows.array.splice((this.current - 1) * this.size, this.size); + } + this.formattedCount = this.format(this.countFormat); + }, + /** + * Updates the paging UI setting the state of the pagination control. + * @instance + * @protected + */ + draw: function(){ + if (this.total <= 1){ + if (!this.detached){ + this.$row.detach(); + this.detached = true; + } + } else { + if (this.detached){ + var $tfoot = this.ft.$el.children('tfoot'); + if ($tfoot.length == 0){ + $tfoot = $('
'); + this.ft.$el.append($tfoot); + } + this.$row.appendTo($tfoot); + this.detached = false; + } + this.$cell.attr('colspan', this.ft.columns.visibleColspan); + this._createLinks(); + this._setVisible(this.current, this.current > this.previous); + this._setNavigation(true); + this.$count.text(this.formattedCount); + } + }, + /** + * Creates the paging UI from the current options setting the various jQuery properties of this component. + * @instance + * @protected + */ + $create: function(){ + this._createdLinks = 0; + var position = 'footable-paging-center'; + switch (this.position){ + case 'left': position = 'footable-paging-left'; break; + case 'right': position = 'footable-paging-right'; break; + } + this.ft.$el.addClass('footable-paging').addClass(position); + this.$cell = $(''); + this.ft.$el.append($tfoot); + } + this.$row = $('', { 'class': 'footable-paging' }).append(this.$cell).appendTo($tfoot); + this.$pagination = $('"),this.ft.$el.append(b)),this.$row.appendTo(b),this.detached=!1}this.$cell.attr("colspan",this.ft.columns.visibleColspan),this._createLinks(),this._setVisible(this.current,this.current>this.previous),this._setNavigation(!0),this.$count.text(this.formattedCount)}},$create:function(){this._createdLinks=0;var b="footable-paging-center";switch(this.position){case"left":b="footable-paging-left";break;case"right":b="footable-paging-right"}this.ft.$el.addClass("footable-paging").addClass(b),this.$cell=a(""),this.ft.$el.append(c)),this.$row=a("",{"class":"footable-paging"}).append(this.$cell).appendTo(c),this.$pagination=a(" + * "sorter": function(a, b){ + * if (a is less than b by some ordering criterion) { + * return -1; + * } + * if (a is greater than b by the ordering criterion) { + * return 1; + * } + * // a must be equal to b + * return 0; + * } + */ + F.Column.prototype.sorter = function(a, b){ + if (typeof a === 'string') a = a.toLowerCase(); + if (typeof b === 'string') b = b.toLowerCase(); + if (a === b) return 0; + if (a < b) return -1; + return 1; + }; + + /** + * This is supplied either the cell value or jQuery object to parse. A value must be returned from this method and will be used during sorting operations. + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {*} + * @this FooTable.Column + */ + F.Column.prototype.sortValue = function(valueOrElement){ + // if we have an element or a jQuery object use jQuery to get the value + if (F.is.element(valueOrElement) || F.is.jq(valueOrElement)){ + var data = $(valueOrElement).data('sortValue'); + return F.is.defined(data) ? data : this.parser(valueOrElement); + } + // if options are supplied with the value + if (F.is.hash(valueOrElement) && F.is.hash(valueOrElement.options)){ + if (F.is.string(valueOrElement.options.sortValue)) return valueOrElement.options.sortValue; + if (F.is.defined(valueOrElement.value)) valueOrElement = valueOrElement.value; + } + if (F.is.defined(valueOrElement) && valueOrElement != null) return valueOrElement; + return null; + }; + + // this is used to define the sorting specific properties on column creation + F.Column.prototype.__sorting_define__ = function(definition){ + this.sorter = F.checkFnValue(this, definition.sorter, this.sorter); + this.direction = F.is.type(definition.direction, 'string') ? F.Sorting.dir(definition.direction) : null; + this.sortable = F.is.boolean(definition.sortable) ? definition.sortable : true; + this.sorted = F.is.boolean(definition.sorted) ? definition.sorted : false; + this.sortValue = F.checkFnValue(this, definition.sortValue, this.sortValue); + }; + + // overrides the public define method and replaces it with our own + F.Column.extend('define', function(definition){ + this._super(definition); + this.__sorting_define__(definition); + }); + +})(jQuery, FooTable); +(function(F){ + /** + * An object containing the sorting options for the plugin. Added by the {@link FooTable.Sorting} component. + * @type {object} + * @prop {boolean} enabled=false - Whether or not to allow sorting on the table. + */ + F.Defaults.prototype.sorting = { + enabled: false + }; +})(FooTable); +(function($, F){ + + F.HTMLColumn.extend('__sorting_define__', function(definition){ + this._super(definition); + this.sortUse = F.is.string(definition.sortUse) && $.inArray(definition.sortUse, ['html','text']) !== -1 ? definition.sortUse : 'html'; + }); + + /** + * This is supplied either the cell value or jQuery object to parse. A value must be returned from this method and will be used during sorting operations. + * @param {(*|jQuery)} valueOrElement - The value or jQuery cell object. + * @returns {*} + * @this FooTable.HTMLColumn + */ + F.HTMLColumn.prototype.sortValue = function(valueOrElement){ + // if we have an element or a jQuery object use jQuery to get the data value or pass it off to the parser + if (F.is.element(valueOrElement) || F.is.jq(valueOrElement)){ + var data = $(valueOrElement).data('sortValue'); + return F.is.defined(data) ? data : $.trim($(valueOrElement)[this.sortUse]()); + } + // if options are supplied with the value + if (F.is.hash(valueOrElement) && F.is.hash(valueOrElement.options)){ + if (F.is.string(valueOrElement.options.sortValue)) return valueOrElement.options.sortValue; + if (F.is.defined(valueOrElement.value)) valueOrElement = valueOrElement.value; + } + if (F.is.defined(valueOrElement) && valueOrElement != null) return valueOrElement; + return null; + }; + +})(jQuery, FooTable); +(function(F){ + /** + * Sort the table using the specified column and direction. Added by the {@link FooTable.Sorting} component. + * @instance + * @param {(string|number|FooTable.Column)} column - The column name, index or the actual {@link FooTable.Column} object to sort by. + * @param {string} [direction="ASC"] - The direction to sort by, either ASC or DESC. + * @returns {jQuery.Promise} + * @fires FooTable.Sorting#"change.ft.sorting" + * @fires FooTable.Sorting#"changed.ft.sorting" + * @see FooTable.Sorting#sort + */ + F.Table.prototype.sort = function(column, direction){ + return this.use(F.Sorting).sort(column, direction); + }; +})(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/footable.sorting.min.js b/media/footable-v3/js/footable.sorting.min.js new file mode 100644 index 0000000..c73f118 --- /dev/null +++ b/media/footable-v3/js/footable.sorting.min.js @@ -0,0 +1,8 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +!function(a,b){b.Sorter=b.Class.extend({construct:function(a,b){this.column=a,this.direction=b}})}(jQuery,FooTable),function(a,b){b.Sorting=b.Component.extend({construct:function(a){this._super(a,a.o.sorting.enabled),this.o=a.o.sorting,this.column=null,this.allowed=!0,this.initial=null},preinit:function(a){var c=this;this.ft.raise("preinit.ft.sorting",[a]).then(function(){c.ft.$el.hasClass("footable-sorting")&&(c.enabled=!0),c.enabled=b.is["boolean"](a.sorting)?a.sorting:c.enabled,c.enabled&&(c.column=b.arr.first(c.ft.columns.array,function(a){return a.sorted}))},function(){c.enabled=!1})},init:function(){var c=this;this.ft.raise("init.ft.sorting").then(function(){if(!c.initial){var d=!!c.column;c.initial={isset:d,rows:c.ft.rows.all.slice(0),column:d?c.column.name:null,direction:d?c.column.direction:null}}b.arr.each(c.ft.columns.array,function(b){b.sortable&&b.$el.addClass("footable-sortable").append(a("",{"class":"fooicon fooicon-sort"}))}),c.ft.$el.on("click.footable",".footable-sortable",{self:c},c._onSortClicked)},function(){c.enabled=!1})},destroy:function(){var a=this;this.ft.raise("destroy.ft.paging").then(function(){a.ft.$el.off("click.footable",".footable-sortable",a._onSortClicked),a.ft.$el.children("thead").children("tr.footable-header").children(".footable-sortable").removeClass("footable-sortable footable-asc footable-desc").find("span.fooicon").remove()})},predraw:function(){if(this.column){var a=this,b=a.column;a.ft.rows.array.sort(function(a,c){return"DESC"==b.direction?b.sorter(c.cells[b.index].sortValue,a.cells[b.index].sortValue):b.sorter(a.cells[b.index].sortValue,c.cells[b.index].sortValue)})}},draw:function(){if(this.column){var a=this,b=a.ft.$el.find("thead > tr > .footable-sortable"),c=a.column.$el;b.removeClass("footable-asc footable-desc").children(".fooicon").removeClass("fooicon-sort fooicon-sort-asc fooicon-sort-desc"),b.not(c).children(".fooicon").addClass("fooicon-sort"),c.addClass("DESC"==a.column.direction?"footable-desc":"footable-asc").children(".fooicon").addClass("DESC"==a.column.direction?"fooicon-sort-desc":"fooicon-sort-asc")}},sort:function(a,b){return this._sort(a,b)},toggleAllowed:function(a){a=b.is["boolean"](a)?a:!this.allowed,this.allowed=a,this.ft.$el.toggleClass("footable-sorting-disabled",!this.allowed)},hasChanged:function(){return!(!this.initial||!this.column||this.column.name===this.initial.column&&(this.column.direction===this.initial.direction||null===this.initial.direction&&"ASC"===this.column.direction))},reset:function(){this.initial&&(this.initial.isset?this.sort(this.initial.column,this.initial.direction):(this.column&&(this.column.$el.removeClass("footable-asc footable-desc"),this.column=null),this.ft.rows.all=this.initial.rows,this.ft.draw()))},_sort:function(c,d){if(!this.allowed)return a.Deferred().reject("sorting disabled");var e=this,f=new b.Sorter(e.ft.columns.get(c),b.Sorting.dir(d));return e.ft.raise("before.ft.sorting",[f]).then(function(){return b.arr.each(e.ft.columns.array,function(a){a!=e.column&&(a.direction=null)}),e.column=e.ft.columns.get(f.column),e.column&&(e.column.direction=b.Sorting.dir(f.direction)),e.ft.draw().then(function(){e.ft.raise("after.ft.sorting",[f])})})},_onSortClicked:function(b){var c=b.data.self,d=a(this).closest("th,td"),e=d.is(".footable-asc, .footable-desc")?d.hasClass("footable-desc")?"ASC":"DESC":"ASC";c._sort(d.index(),e)}}),b.Sorting.dir=function(a){return!b.is.string(a)||"ASC"!=a&&"DESC"!=a?"ASC":a},b.components.register("sorting",b.Sorting,600)}(jQuery,FooTable),function(a){a.Cell.prototype.sortValue=null,a.Cell.prototype.__sorting_define__=function(a){this.sortValue=this.column.sortValue.call(this.column,a)},a.Cell.prototype.__sorting_val__=function(b){a.is.defined(b)&&(this.sortValue=this.column.sortValue.call(this.column,b))},a.Cell.extend("define",function(a){this._super(a),this.__sorting_define__(a)}),a.Cell.extend("val",function(a){var b=this._super(a);return this.__sorting_val__(a),b})}(FooTable),function(a,b){b.Column.prototype.direction=null,b.Column.prototype.sortable=!0,b.Column.prototype.sorted=!1,b.Column.prototype.sorter=function(a,b){return"string"==typeof a&&(a=a.toLowerCase()),"string"==typeof b&&(b=b.toLowerCase()),a===b?0:b>a?-1:1},b.Column.prototype.sortValue=function(c){if(b.is.element(c)||b.is.jq(c)){var d=a(c).data("sortValue");return b.is.defined(d)?d:this.parser(c)}if(b.is.hash(c)&&b.is.hash(c.options)){if(b.is.string(c.options.sortValue))return c.options.sortValue;b.is.defined(c.value)&&(c=c.value)}return b.is.defined(c)&&null!=c?c:null},b.Column.prototype.__sorting_define__=function(a){this.sorter=b.checkFnValue(this,a.sorter,this.sorter),this.direction=b.is.type(a.direction,"string")?b.Sorting.dir(a.direction):null,this.sortable=b.is["boolean"](a.sortable)?a.sortable:!0,this.sorted=b.is["boolean"](a.sorted)?a.sorted:!1,this.sortValue=b.checkFnValue(this,a.sortValue,this.sortValue)},b.Column.extend("define",function(a){this._super(a),this.__sorting_define__(a)})}(jQuery,FooTable),function(a){a.Defaults.prototype.sorting={enabled:!1}}(FooTable),function(a,b){b.HTMLColumn.extend("__sorting_define__",function(c){this._super(c),this.sortUse=b.is.string(c.sortUse)&&-1!==a.inArray(c.sortUse,["html","text"])?c.sortUse:"html"}),b.HTMLColumn.prototype.sortValue=function(c){if(b.is.element(c)||b.is.jq(c)){var d=a(c).data("sortValue");return b.is.defined(d)?d:a.trim(a(c)[this.sortUse]())}if(b.is.hash(c)&&b.is.hash(c.options)){if(b.is.string(c.options.sortValue))return c.options.sortValue;b.is.defined(c.value)&&(c=c.value)}return b.is.defined(c)&&null!=c?c:null}}(jQuery,FooTable),function(a){a.Table.prototype.sort=function(b,c){return this.use(a.Sorting).sort(b,c)}}(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/footable.state.js b/media/footable-v3/js/footable.state.js new file mode 100644 index 0000000..20584ea --- /dev/null +++ b/media/footable-v3/js/footable.state.js @@ -0,0 +1,362 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +(function($, F){ + + // global int to use if the table has no ID + var _uid = 0, + // a hash value for the current url + _url_hash = (function(str){ + var i, l, hval = 0x811c9dc5; + for (i = 0, l = str.length; i < l; i++) { + hval ^= str.charCodeAt(i); + hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24); + } + return hval >>> 0; + })(location.origin + location.pathname); + + F.State = F.Component.extend(/** @lends FooTable.State */{ + /** + * The state component adds the ability for the table to remember its basic state for filtering, paging and sorting. + * @constructs + * @extends FooTable.Component + * @param {FooTable.Table} table - The parent {@link FooTable.Table} object for the component. + * @returns {FooTable.State} + */ + construct: function(table){ + // call the constructor of the base class + this._super(table, table.o.state.enabled); + // Change this value if an update to this component requires any stored data to be reset + this._key = '1'; + /** + * The key to use to store the state for this table. + * @type {(null|string)} + */ + this.key = this._key + (F.is.string(table.o.state.key) ? table.o.state.key : this._uid()); + /** + * Whether or not to allow the filtering component to store it's state. + * @type {boolean} + */ + this.filtering = F.is.boolean(table.o.state.filtering) ? table.o.state.filtering : true; + /** + * Whether or not to allow the paging component to store it's state. + * @type {boolean} + */ + this.paging = F.is.boolean(table.o.state.paging) ? table.o.state.paging : true; + /** + * Whether or not to allow the sorting component to store it's state. + * @type {boolean} + */ + this.sorting = F.is.boolean(table.o.state.sorting) ? table.o.state.sorting : true; + }, + /* PROTECTED */ + /** + * Checks the supplied data and options for the state component. + * @instance + * @protected + * @param {object} data - The jQuery data object from the parent table. + * @fires FooTable.State#"preinit.ft.state" + * @this FooTable.State + */ + preinit: function(data){ + var self = this; + /** + * The preinit.ft.state event is raised before the UI is created and provides the tables jQuery data object for additional options parsing. + * Calling preventDefault on this event will disable the component. + * @event FooTable.State#"preinit.ft.state" + * @param {jQuery.Event} e - The jQuery.Event object for the event. + * @param {FooTable.Table} ft - The instance of the plugin raising the event. + * @param {object} data - The jQuery data object of the table raising the event. + */ + this.ft.raise('preinit.ft.state', [data]).then(function(){ + + self.enabled = F.is.boolean(data.state) + ? data.state + : self.enabled; + + if (!self.enabled) return; + + self.key = self._key + (F.is.string(data.stateKey) ? data.stateKey : self.key); + + self.filtering = F.is.boolean(data.stateFiltering) ? data.stateFiltering : self.filtering; + + self.paging = F.is.boolean(data.statePaging) ? data.statePaging : self.paging; + + self.sorting = F.is.boolean(data.stateSorting) ? data.stateSorting : self.sorting; + + }, function(){ + self.enabled = false; + }); + }, + /** + * Gets the state value for the specified key for this table. + * @instance + * @param {string} key - The key to get the value for. + * @returns {(*|null)} + */ + get: function(key){ + return JSON.parse(localStorage.getItem(this.key + ':' + key)); + }, + /** + * Sets the state value for the specified key for this table. + * @instance + * @param {string} key - The key to set the value for. + * @param {*} data - The value to store for the key. This value must be JSON.stringify friendly. + */ + set: function(key, data){ + localStorage.setItem(this.key + ':' + key, JSON.stringify(data)); + }, + /** + * Clears the state value for the specified key for this table. + * @instance + * @param {string} key - The key to clear the value for. + */ + remove: function(key){ + localStorage.removeItem(this.key + ':' + key); + }, + /** + * Executes the {@link FooTable.Component#readState} function on all components. + * @instance + */ + read: function(){ + this.ft.execute(false, true, 'readState'); + }, + /** + * Executes the {@link FooTable.Component#writeState} function on all components. + * @instance + */ + write: function(){ + this.ft.execute(false, true, 'writeState'); + }, + /** + * Executes the {@link FooTable.Component#clearState} function on all components. + * @instance + */ + clear: function(){ + this.ft.execute(false, true, 'clearState'); + }, + /** + * Generates a unique identifier for the current {@link FooTable.Table} if one is not supplied through the options. + * This value is a combination of the url hash and either the element ID or an incremented global int value. + * @instance + * @returns {*} + * @private + */ + _uid: function(){ + var id = this.ft.$el.attr('id'); + return _url_hash + '_' + (F.is.string(id) ? id : ++_uid); + } + }); + + F.components.register('state', F.State, 700); + +})(jQuery, FooTable); +(function(F){ + + /** + * This method is called from the {@link FooTable.State#read} method and allows a component to retrieve its' stored state. + * @instance + * @protected + * @function + */ + F.Component.prototype.readState = function(){}; + + /** + * This method is called from the {@link FooTable.State#write} method and allows a component to write its' current state to the store. + * @instance + * @protected + * @function + */ + F.Component.prototype.writeState = function(){}; + + /** + * This method is called from the {@link FooTable.State#clear} method and allows a component to clear any stored state. + * @instance + * @protected + * @function + */ + F.Component.prototype.clearState = function(){}; + +})(FooTable); +(function(F){ + + /** + * An object containing the state options for the plugin. Added by the {@link FooTable.State} component. + * @type {object} + * @prop {boolean} enabled=false - Whether or not to allow state to be stored for the table. This overrides the individual component enable options. + * @prop {boolean} filtering=true - Whether or not to allow the filtering state to be stored. + * @prop {boolean} paging=true - Whether or not to allow the filtering state to be stored. + * @prop {boolean} sorting=true - Whether or not to allow the filtering state to be stored. + * @prop {string} key=null - The unique key to use to store the table's data. + */ + F.Defaults.prototype.state = { + enabled: false, + filtering: true, + paging: true, + sorting: true, + key: null + }; + +})(FooTable); +(function(F){ + + if (!F.Filtering) return; + + /** + * Allows the filtering component to retrieve its' stored state. + */ + F.Filtering.prototype.readState = function(){ + if (this.ft.state.filtering){ + var state = this.ft.state.get('filtering'); + if (F.is.hash(state) && !F.is.emptyArray(state.filters)){ + this.filters = this.ensure(state.filters); + } + } + }; + + /** + * Allows the filtering component to write its' current state to the store. + */ + F.Filtering.prototype.writeState = function(){ + if (this.ft.state.filtering) { + var filters = F.arr.map(this.filters, function (f) { + return { + name: f.name, + query: f.query instanceof F.Query ? f.query.val() : f.query, + columns: F.arr.map(f.columns, function (c) { + return c.name; + }), + hidden: f.hidden, + space: f.space, + connectors: f.connectors, + ignoreCase: f.ignoreCase + }; + }); + this.ft.state.set('filtering', {filters: filters}); + } + }; + + /** + * Allows the filtering component to clear any stored state. + */ + F.Filtering.prototype.clearState = function(){ + if (this.ft.state.filtering) { + this.ft.state.remove('filtering'); + } + }; + +})(FooTable); +(function(F){ + + if (!F.Paging) return; + + /** + * Allows the paging component to retrieve its' stored state. + */ + F.Paging.prototype.readState = function(){ + if (this.ft.state.paging) { + var state = this.ft.state.get('paging'); + if (F.is.hash(state)) { + this.current = state.current; + this.size = state.size; + } + } + }; + + /** + * Allows the paging component to write its' current state to the store. + */ + F.Paging.prototype.writeState = function(){ + if (this.ft.state.paging) { + this.ft.state.set('paging', { + current: this.current, + size: this.size + }); + } + }; + + /** + * Allows the paging component to clear any stored state. + */ + F.Paging.prototype.clearState = function(){ + if (this.ft.state.paging) { + this.ft.state.remove('paging'); + } + }; + +})(FooTable); +(function(F){ + + if (!F.Sorting) return; + + /** + * Allows the sorting component to retrieve its' stored state. + */ + F.Sorting.prototype.readState = function(){ + if (this.ft.state.sorting) { + var state = this.ft.state.get('sorting'); + if (F.is.hash(state)) { + var column = this.ft.columns.get(state.column); + if (column instanceof F.Column) { + this.column = column; + this.column.direction = state.direction; + } + } + } + }; + + /** + * Allows the sorting component to write its' current state to the store. + */ + F.Sorting.prototype.writeState = function(){ + if (this.ft.state.sorting && this.column instanceof F.Column){ + this.ft.state.set('sorting', { + column: this.column.name, + direction: this.column.direction + }); + } + }; + + /** + * Allows the sorting component to clear any stored state. + */ + F.Sorting.prototype.clearState = function(){ + if (this.ft.state.sorting) { + this.ft.state.remove('sorting'); + } + }; + +})(FooTable); +(function(F){ + + // hook into the _construct method so we can add the state property to the table. + F.Table.extend('_construct', function(ready){ + this.state = this.use(FooTable.State); + this._super(ready); + }); + + // hook into the _preinit method so we can trigger a plugin wide read state operation. + F.Table.extend('_preinit', function(){ + var self = this; + return self._super().then(function(){ + if (self.state.enabled){ + self.state.read(); + } + }); + }); + + // hook into the draw method so we can trigger a plugin wide write state operation. + F.Table.extend('draw', function(){ + var self = this; + return self._super().then(function(){ + if (self.state.enabled){ + self.state.write(); + } + }); + }); + +})(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/footable.state.min.js b/media/footable-v3/js/footable.state.min.js new file mode 100644 index 0000000..d542d96 --- /dev/null +++ b/media/footable-v3/js/footable.state.min.js @@ -0,0 +1,8 @@ +/* +* FooTable v3 - FooTable is a jQuery plugin that aims to make HTML tables on smaller devices look awesome. +* @version 3.1.4 +* @link http://fooplugins.com +* @copyright Steven Usher & Brad Vincent 2015 +* @license Released under the GPLv3 license. +*/ +!function(a,b){var c=0,d=function(a){var b,c,d=2166136261;for(b=0,c=a.length;c>b;b++)d^=a.charCodeAt(b),d+=(d<<1)+(d<<4)+(d<<7)+(d<<8)+(d<<24);return d>>>0}(location.origin+location.pathname);b.State=b.Component.extend({construct:function(a){this._super(a,a.o.state.enabled),this._key="1",this.key=this._key+(b.is.string(a.o.state.key)?a.o.state.key:this._uid()),this.filtering=b.is["boolean"](a.o.state.filtering)?a.o.state.filtering:!0,this.paging=b.is["boolean"](a.o.state.paging)?a.o.state.paging:!0,this.sorting=b.is["boolean"](a.o.state.sorting)?a.o.state.sorting:!0},preinit:function(a){var c=this;this.ft.raise("preinit.ft.state",[a]).then(function(){c.enabled=b.is["boolean"](a.state)?a.state:c.enabled,c.enabled&&(c.key=c._key+(b.is.string(a.stateKey)?a.stateKey:c.key),c.filtering=b.is["boolean"](a.stateFiltering)?a.stateFiltering:c.filtering,c.paging=b.is["boolean"](a.statePaging)?a.statePaging:c.paging,c.sorting=b.is["boolean"](a.stateSorting)?a.stateSorting:c.sorting)},function(){c.enabled=!1})},get:function(a){return JSON.parse(localStorage.getItem(this.key+":"+a))},set:function(a,b){localStorage.setItem(this.key+":"+a,JSON.stringify(b))},remove:function(a){localStorage.removeItem(this.key+":"+a)},read:function(){this.ft.execute(!1,!0,"readState")},write:function(){this.ft.execute(!1,!0,"writeState")},clear:function(){this.ft.execute(!1,!0,"clearState")},_uid:function(){var a=this.ft.$el.attr("id");return d+"_"+(b.is.string(a)?a:++c)}}),b.components.register("state",b.State,700)}(jQuery,FooTable),function(a){a.Component.prototype.readState=function(){},a.Component.prototype.writeState=function(){},a.Component.prototype.clearState=function(){}}(FooTable),function(a){a.Defaults.prototype.state={enabled:!1,filtering:!0,paging:!0,sorting:!0,key:null}}(FooTable),function(a){a.Filtering&&(a.Filtering.prototype.readState=function(){if(this.ft.state.filtering){var b=this.ft.state.get("filtering");a.is.hash(b)&&!a.is.emptyArray(b.filters)&&(this.filters=this.ensure(b.filters))}},a.Filtering.prototype.writeState=function(){if(this.ft.state.filtering){var b=a.arr.map(this.filters,function(b){return{name:b.name,query:b.query instanceof a.Query?b.query.val():b.query,columns:a.arr.map(b.columns,function(a){return a.name}),hidden:b.hidden,space:b.space,connectors:b.connectors,ignoreCase:b.ignoreCase}});this.ft.state.set("filtering",{filters:b})}},a.Filtering.prototype.clearState=function(){this.ft.state.filtering&&this.ft.state.remove("filtering")})}(FooTable),function(a){a.Paging&&(a.Paging.prototype.readState=function(){if(this.ft.state.paging){var b=this.ft.state.get("paging");a.is.hash(b)&&(this.current=b.current,this.size=b.size)}},a.Paging.prototype.writeState=function(){this.ft.state.paging&&this.ft.state.set("paging",{current:this.current,size:this.size})},a.Paging.prototype.clearState=function(){this.ft.state.paging&&this.ft.state.remove("paging")})}(FooTable),function(a){a.Sorting&&(a.Sorting.prototype.readState=function(){if(this.ft.state.sorting){var b=this.ft.state.get("sorting");if(a.is.hash(b)){var c=this.ft.columns.get(b.column);c instanceof a.Column&&(this.column=c,this.column.direction=b.direction)}}},a.Sorting.prototype.writeState=function(){this.ft.state.sorting&&this.column instanceof a.Column&&this.ft.state.set("sorting",{column:this.column.name,direction:this.column.direction})},a.Sorting.prototype.clearState=function(){this.ft.state.sorting&&this.ft.state.remove("sorting")})}(FooTable),function(a){a.Table.extend("_construct",function(a){this.state=this.use(FooTable.State),this._super(a)}),a.Table.extend("_preinit",function(){var a=this;return a._super().then(function(){a.state.enabled&&a.state.read()})}),a.Table.extend("draw",function(){var a=this;return a._super().then(function(){a.state.enabled&&a.state.write()})})}(FooTable); \ No newline at end of file diff --git a/media/footable-v3/js/index.html b/media/footable-v3/js/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/footable-v3/js/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/footable/css/fonts/footable.eot b/media/footable/css/fonts/footable.eot deleted file mode 100644 index 3722979..0000000 Binary files a/media/footable/css/fonts/footable.eot and /dev/null differ diff --git a/media/footable/css/fonts/footable.svg b/media/footable/css/fonts/footable.svg deleted file mode 100644 index 5a6e1fd..0000000 --- a/media/footable/css/fonts/footable.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/media/footable/css/fonts/footable.ttf b/media/footable/css/fonts/footable.ttf deleted file mode 100644 index 2d5c84a..0000000 Binary files a/media/footable/css/fonts/footable.ttf and /dev/null differ diff --git a/media/footable/css/fonts/footable.woff b/media/footable/css/fonts/footable.woff deleted file mode 100644 index 4864dbb..0000000 Binary files a/media/footable/css/fonts/footable.woff and /dev/null differ diff --git a/media/footable/css/footable.core.css b/media/footable/css/footable.core.css deleted file mode 100644 index d8accfb..0000000 --- a/media/footable/css/footable.core.css +++ /dev/null @@ -1,178 +0,0 @@ -@font-face { - font-family: 'footable'; - src: url('fonts/footable.eot'); - src: url('fonts/footable.eot?#iefix') format('embedded-opentype'), url('fonts/footable.woff') format('woff'), url('fonts/footable.ttf') format('truetype'), url('fonts/footable.svg#footable') format('svg'); - font-weight: normal; - font-style: normal; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - @font-face { - font-family: 'footable'; - src: url('fonts/footable.svg#footable') format('svg'); - font-weight: normal; - font-style: normal; - } -} -.footable { - width: 100%; - /** SORTING **/ - - /** PAGINATION **/ - -} -.footable.breakpoint > tbody > tr.footable-detail-show > td { - border-bottom: none; -} -.footable.breakpoint > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e001"; -} -.footable.breakpoint > tbody > tr:hover:not(.footable-row-detail) { - cursor: pointer; -} -.footable.breakpoint > tbody > tr > td.footable-cell-detail { - background: #eee; - border-top: none; -} -.footable.breakpoint > tbody > tr > td > span.footable-toggle { - display: inline-block; - font-family: 'footable'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - -webkit-font-smoothing: antialiased; - padding-right: 5px; - font-size: 14px; - color: #888888; -} -.footable.breakpoint > tbody > tr > td > span.footable-toggle:before { - content: "\e000"; -} -.footable.breakpoint.toggle-circle > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e005"; -} -.footable.breakpoint.toggle-circle > tbody > tr > td > span.footable-toggle:before { - content: "\e004"; -} -.footable.breakpoint.toggle-circle-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e003"; -} -.footable.breakpoint.toggle-circle-filled > tbody > tr > td > span.footable-toggle:before { - content: "\e002"; -} -.footable.breakpoint.toggle-square > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e007"; -} -.footable.breakpoint.toggle-square > tbody > tr > td > span.footable-toggle:before { - content: "\e006"; -} -.footable.breakpoint.toggle-square-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e009"; -} -.footable.breakpoint.toggle-square-filled > tbody > tr > td > span.footable-toggle:before { - content: "\e008"; -} -.footable.breakpoint.toggle-arrow > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e00f"; -} -.footable.breakpoint.toggle-arrow > tbody > tr > td > span.footable-toggle:before { - content: "\e011"; -} -.footable.breakpoint.toggle-arrow-small > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e013"; -} -.footable.breakpoint.toggle-arrow-small > tbody > tr > td > span.footable-toggle:before { - content: "\e015"; -} -.footable.breakpoint.toggle-arrow-circle > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e01b"; -} -.footable.breakpoint.toggle-arrow-circle > tbody > tr > td > span.footable-toggle:before { - content: "\e01d"; -} -.footable.breakpoint.toggle-arrow-circle-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e00b"; -} -.footable.breakpoint.toggle-arrow-circle-filled > tbody > tr > td > span.footable-toggle:before { - content: "\e00d"; -} -.footable.breakpoint.toggle-arrow-tiny > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e01f"; -} -.footable.breakpoint.toggle-arrow-tiny > tbody > tr > td > span.footable-toggle:before { - content: "\e021"; -} -.footable.breakpoint.toggle-arrow-alt > tbody > tr.footable-detail-show > td > span.footable-toggle:before { - content: "\e017"; -} -.footable.breakpoint.toggle-arrow-alt > tbody > tr > td > span.footable-toggle:before { - content: "\e019"; -} -.footable.breakpoint.toggle-medium > tbody > tr > td > span.footable-toggle { - font-size: 18px; -} -.footable.breakpoint.toggle-large > tbody > tr > td > span.footable-toggle { - font-size: 24px; -} -.footable > thead > tr > th { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: -moz-none; - -ms-user-select: none; - user-select: none; -} -.footable > thead > tr > th.footable-sortable:hover { - cursor: pointer; -} -.footable > thead > tr > th.footable-sorted > span.footable-sort-indicator:before { - content: "\e013"; -} -.footable > thead > tr > th.footable-sorted-desc > span.footable-sort-indicator:before { - content: "\e012"; -} -.footable > thead > tr > th > span.footable-sort-indicator { - display: inline-block; - font-family: 'footable'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - -webkit-font-smoothing: antialiased; - padding-left: 5px; -} -.footable > thead > tr > th > span.footable-sort-indicator:before { - content: "\e022"; -} -.footable > tfoot .pagination { - margin: 0; -} -.footable.no-paging .hide-if-no-paging { - display: none; -} -.footable-row-detail-inner { - display: table; -} -.footable-row-detail-row { - display: table-row; - line-height: 1.5em; -} -.footable-row-detail-group { - display: block; - line-height: 2em; - font-size: 1.2em; - font-weight: bold; -} -.footable-row-detail-name { - display: table-cell; - font-weight: bold; - padding-right: 0.5em; -} -.footable-row-detail-value { - display: table-cell; -} -.footable-odd { - background-color: #f7f7f7; -} diff --git a/media/footable/css/footable.core.min.css b/media/footable/css/footable.core.min.css deleted file mode 100644 index 22ad843..0000000 --- a/media/footable/css/footable.core.min.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:'footable';src:url('fonts/footable.eot');src:url('fonts/footable.eot?#iefix') format('embedded-opentype'),url('fonts/footable.woff') format('woff'),url('fonts/footable.ttf') format('truetype'),url('fonts/footable.svg#footable') format('svg');font-weight:normal;font-style:normal}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:'footable';src:url('fonts/footable.svg#footable') format('svg');font-weight:normal;font-style:normal}}.footable{width:100%}.footable.breakpoint>tbody>tr.footable-detail-show>td{border-bottom:0}.footable.breakpoint>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e001"}.footable.breakpoint>tbody>tr:hover:not(.footable-row-detail){cursor:pointer}.footable.breakpoint>tbody>tr>td.footable-cell-detail{background:#eee;border-top:0}.footable.breakpoint>tbody>tr>td>span.footable-toggle{display:inline-block;font-family:'footable';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;padding-right:5px;font-size:14px;color:#888}.footable.breakpoint>tbody>tr>td>span.footable-toggle:before{content:"\e000"}.footable.breakpoint.toggle-circle>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e005"}.footable.breakpoint.toggle-circle>tbody>tr>td>span.footable-toggle:before{content:"\e004"}.footable.breakpoint.toggle-circle-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e003"}.footable.breakpoint.toggle-circle-filled>tbody>tr>td>span.footable-toggle:before{content:"\e002"}.footable.breakpoint.toggle-square>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e007"}.footable.breakpoint.toggle-square>tbody>tr>td>span.footable-toggle:before{content:"\e006"}.footable.breakpoint.toggle-square-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e009"}.footable.breakpoint.toggle-square-filled>tbody>tr>td>span.footable-toggle:before{content:"\e008"}.footable.breakpoint.toggle-arrow>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e00f"}.footable.breakpoint.toggle-arrow>tbody>tr>td>span.footable-toggle:before{content:"\e011"}.footable.breakpoint.toggle-arrow-small>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e013"}.footable.breakpoint.toggle-arrow-small>tbody>tr>td>span.footable-toggle:before{content:"\e015"}.footable.breakpoint.toggle-arrow-circle>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e01b"}.footable.breakpoint.toggle-arrow-circle>tbody>tr>td>span.footable-toggle:before{content:"\e01d"}.footable.breakpoint.toggle-arrow-circle-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e00b"}.footable.breakpoint.toggle-arrow-circle-filled>tbody>tr>td>span.footable-toggle:before{content:"\e00d"}.footable.breakpoint.toggle-arrow-tiny>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e01f"}.footable.breakpoint.toggle-arrow-tiny>tbody>tr>td>span.footable-toggle:before{content:"\e021"}.footable.breakpoint.toggle-arrow-alt>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e017"}.footable.breakpoint.toggle-arrow-alt>tbody>tr>td>span.footable-toggle:before{content:"\e019"}.footable.breakpoint.toggle-medium>tbody>tr>td>span.footable-toggle{font-size:18px}.footable.breakpoint.toggle-large>tbody>tr>td>span.footable-toggle{font-size:24px}.footable>thead>tr>th{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.footable>thead>tr>th.footable-sortable:hover{cursor:pointer}.footable>thead>tr>th.footable-sorted>span.footable-sort-indicator:before{content:"\e013"}.footable>thead>tr>th.footable-sorted-desc>span.footable-sort-indicator:before{content:"\e012"}.footable>thead>tr>th>span.footable-sort-indicator{display:inline-block;font-family:'footable';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;padding-left:5px}.footable>thead>tr>th>span.footable-sort-indicator:before{content:"\e022"}.footable>tfoot .pagination{margin:0}.footable.no-paging .hide-if-no-paging{display:none}.footable-row-detail-inner{display:table}.footable-row-detail-row{display:table-row;line-height:1.5em}.footable-row-detail-group{display:block;line-height:2em;font-size:1.2em;font-weight:bold}.footable-row-detail-name{display:table-cell;font-weight:bold;padding-right:.5em}.footable-row-detail-value{display:table-cell}.footable-odd{background-color:#f7f7f7} \ No newline at end of file diff --git a/media/footable/css/footable.metro.css b/media/footable/css/footable.metro.css deleted file mode 100644 index 8bdb937..0000000 --- a/media/footable/css/footable.metro.css +++ /dev/null @@ -1,152 +0,0 @@ -.footable { - border-collapse: separate; - border-spacing: 0; - width: 100%; - border: 3px solid #52b9e9; - font-family: "Open Sans", Arial, Helvetica, sans-serif; - color: #444444; - background: #efefef; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.footable.breakpoint > tbody > tr.footable-row-detail { - background: #eeeeee; -} -.footable.breakpoint > tbody > tr:hover:not(.footable-row-detail) { - cursor: pointer; -} -.footable.breakpoint > tbody > tr > td.footable-row-detail-cell { - background: #fff; -} -.footable > tbody img { - vertical-align: middle; -} -.footable > tbody > tr:hover:not(.footable-row-detail) { - background: #dddddd; -} -.footable > tbody > tr:hover:not(.footable-row-detail) > td { - color: #000000; -} -.footable > tbody > tr:last-child > td { - border-bottom: none; -} -.footable > tbody > tr > td { - border-top: 1px solid #dddddd; - padding: 10px; - text-align: left; - border-left: none; -} -.footable > tbody > tr > td.footable-row-detail-cell, -.footable > tbody > tr > td.footable-first-column { - border-left: none; -} -.footable > thead > tr > th { - border-bottom: 1px solid #dddddd; - padding: 10px; - text-align: left; -} -.footable > thead > tr > th, -.footable > thead > tr > td { - background-color: #52b9e9; - border: 1px solid #52b9e9; - color: #ffffff; - border-top: none; - border-left: none; - font-weight: normal; -} -.footable > thead > tr > th.footable-first-column, -.footable > thead > tr > td.footable-first-column { - border-left: none; -} -.footable > tfoot > tr > th, -.footable > tfoot > tr > td { - background-color: #52b9e9; - border: 1px solid #52b9e9; - color: #ffffff; - border-top: none; - border-left: none; - padding: 5px; -} -.footable > tfoot .pagination { - text-align: center; -} -.footable > tfoot .pagination ul { - display: inline-block; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - vertical-align: middle; - margin: 0; - padding: 0; -} -.footable > tfoot .pagination ul > li { - display: inline; -} -.footable > tfoot .pagination ul > li > a, -.footable > tfoot .pagination ul > li > span { - float: left; - border: 2px solid transparent; - margin: 0 3px; - color: #ffffff; - background: transparent; - padding: 1px 5px; - text-decoration: none; -} -.footable > tfoot .pagination ul > li.disabled > a { - color: #888; -} -.footable > tfoot .pagination ul > li.active > a { - border-color: #ffffff; -} -.footable > tfoot .pagination ul > li:first-child > a, -.footable > tfoot .pagination ul > li:last-child > a, -.footable > tfoot .pagination ul > li:first-child > span, -.footable > tfoot .pagination ul > li:last-child > span { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.footable.metro-red { - border-color: #fa3031; -} -.footable.metro-red > tfoot > tr > th, -.footable.metro-red > thead > tr > th, -.footable.metro-red > tfoot > tr > td, -.footable.metro-red > thead > tr > td { - background-color: #fa3031; - border-color: #fa3031; -} -.footable.metro-purple { - border-color: #932ab6; -} -.footable.metro-purple > tfoot > tr > th, -.footable.metro-purple > thead > tr > th, -.footable.metro-purple > tfoot > tr > td, -.footable.metro-purple > thead > tr > td { - background-color: #932ab6; - border-color: #932ab6; -} -.footable.metro-green { - border-color: #43c83c; -} -.footable.metro-green > tfoot > tr > th, -.footable.metro-green > thead > tr > th, -.footable.metro-green > tfoot > tr > td, -.footable.metro-green > thead > tr > td { - background-color: #43c83c; - border-color: #43c83c; -} -.footable.metro-blue { - border-color: #1171a3; -} -.footable.metro-blue > tfoot > tr > th, -.footable.metro-blue > thead > tr > th, -.footable.metro-blue > tfoot > tr > td, -.footable.metro-blue > thead > tr > td { - background-color: #1171a3; - border-color: #1171a3; -} -.footable-odd { - background-color: #f7f7f7; -} diff --git a/media/footable/css/footable.metro.min.css b/media/footable/css/footable.metro.min.css deleted file mode 100644 index e603acd..0000000 --- a/media/footable/css/footable.metro.min.css +++ /dev/null @@ -1 +0,0 @@ -.footable{border-collapse:separate;border-spacing:0;width:100%;border:3px solid #52b9e9;font-family:"Open Sans",Arial,Helvetica,sans-serif;color:#444;background:#efefef;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.footable.breakpoint>tbody>tr.footable-row-detail{background:#eee}.footable.breakpoint>tbody>tr:hover:not(.footable-row-detail){cursor:pointer}.footable.breakpoint>tbody>tr>td.footable-row-detail-cell{background:#fff}.footable>tbody img{vertical-align:middle}.footable>tbody>tr:hover:not(.footable-row-detail){background:#ddd}.footable>tbody>tr:hover:not(.footable-row-detail)>td{color:#000}.footable>tbody>tr:last-child>td{border-bottom:0}.footable>tbody>tr>td{border-top:1px solid #ddd;padding:10px;text-align:left;border-left:none}.footable>tbody>tr>td.footable-row-detail-cell,.footable>tbody>tr>td.footable-first-column{border-left:none}.footable>thead>tr>th{border-bottom:1px solid #ddd;padding:10px;text-align:left}.footable>thead>tr>th,.footable>thead>tr>td{background-color:#52b9e9;border:1px solid #52b9e9;color:#fff;border-top:0;border-left:none;font-weight:normal}.footable>thead>tr>th.footable-first-column,.footable>thead>tr>td.footable-first-column{border-left:none}.footable>tfoot>tr>th,.footable>tfoot>tr>td{background-color:#52b9e9;border:1px solid #52b9e9;color:#fff;border-top:0;border-left:none;padding:5px}.footable>tfoot .pagination{text-align:center}.footable>tfoot .pagination ul{display:inline-block;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;vertical-align:middle;margin:0;padding:0}.footable>tfoot .pagination ul>li{display:inline}.footable>tfoot .pagination ul>li>a,.footable>tfoot .pagination ul>li>span{float:left;border:2px solid transparent;margin:0 3px;color:#fff;background:transparent;padding:1px 5px;text-decoration:none}.footable>tfoot .pagination ul>li.disabled>a{color:#888}.footable>tfoot .pagination ul>li.active>a{border-color:#fff}.footable>tfoot .pagination ul>li:first-child>a,.footable>tfoot .pagination ul>li:last-child>a,.footable>tfoot .pagination ul>li:first-child>span,.footable>tfoot .pagination ul>li:last-child>span{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.footable.metro-red{border-color:#fa3031}.footable.metro-red>tfoot>tr>th,.footable.metro-red>thead>tr>th,.footable.metro-red>tfoot>tr>td,.footable.metro-red>thead>tr>td{background-color:#fa3031;border-color:#fa3031}.footable.metro-purple{border-color:#932ab6}.footable.metro-purple>tfoot>tr>th,.footable.metro-purple>thead>tr>th,.footable.metro-purple>tfoot>tr>td,.footable.metro-purple>thead>tr>td{background-color:#932ab6;border-color:#932ab6}.footable.metro-green{border-color:#43c83c}.footable.metro-green>tfoot>tr>th,.footable.metro-green>thead>tr>th,.footable.metro-green>tfoot>tr>td,.footable.metro-green>thead>tr>td{background-color:#43c83c;border-color:#43c83c}.footable.metro-blue{border-color:#1171a3}.footable.metro-blue>tfoot>tr>th,.footable.metro-blue>thead>tr>th,.footable.metro-blue>tfoot>tr>td,.footable.metro-blue>thead>tr>td{background-color:#1171a3;border-color:#1171a3}.footable-odd{background-color:#f7f7f7} \ No newline at end of file diff --git a/media/footable/css/footable.standalone.css b/media/footable/css/footable.standalone.css deleted file mode 100644 index a6f4481..0000000 --- a/media/footable/css/footable.standalone.css +++ /dev/null @@ -1,181 +0,0 @@ -.footable { - border-collapse: separate; - border-spacing: 0; - border: 1px solid #cccccc; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; - font-family: 'trebuchet MS', 'Lucida sans', Arial; - font-size: 14px; - color: #444444; - background: #ffffff; -} -.footable > thead > tr:first-child > th.footable-first-column, -.footable > thead > tr:first-child > td.footable-first-column { - -moz-border-radius: 6px 0 0 0; - -webkit-border-radius: 6px 0 0 0; - border-radius: 6px 0 0 0; -} -.footable > thead > tr:first-child > th.footable-last-column, -.footable > thead > tr:first-child > td.footable-last-column { - -moz-border-radius: 0 6px 0 0; - -webkit-border-radius: 0 6px 0 0; - border-radius: 0 6px 0 0; -} -.footable > thead > tr:first-child > th.footable-first-column.footable-last-column, -.footable > thead > tr:first-child > td.footable-first-column.footable-last-column { - -moz-border-radius: 6px 6px 0 0; - -webkit-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.footable > thead > tr > th { - border-left: 1px solid #cccccc; - border-top: 1px solid #cccccc; - padding: 10px; - text-align: left; -} -.footable > thead > tr > th, -.footable > thead > tr > td { - background-color: #dce9f9; - background-image: -webkit-gradient(linear, left top, left bottom, from(#ebf3fc), to(#dce9f9)); - background-image: -webkit-linear-gradient(top, #ebf3fc, #dce9f9); - background-image: -moz-linear-gradient(top, #ebf3fc, #dce9f9); - background-image: -ms-linear-gradient(top, #ebf3fc, #dce9f9); - background-image: -o-linear-gradient(top, #ebf3fc, #dce9f9); - background-image: linear-gradient(to bottom, #ebf3fc, #dce9f9); - -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8) inset; - -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8) inset; - border-top: none; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.footable > thead > tr > th.footable-first-column, -.footable > thead > tr > td.footable-first-column { - border-left: none; -} -.footable.breakpoint > tbody > tr.footable-row-detail { - background: #eeeeee; -} -.footable.breakpoint > tbody > tr.footable-row-detail > .footable-row-detail-cell { - border-left: none; -} -.footable > tbody img { - vertical-align: middle; -} -.footable > tbody > tr:hover { - background: #fbf8e9; -} -.footable > tbody > tr:last-child > td.footable-first-column { - -moz-border-radius: 0 0 0 6px; - -webkit-border-radius: 0 0 0 6px; - border-radius: 0 0 0 6px; -} -.footable > tbody > tr:last-child > td.footable-last-column { - -moz-border-radius: 0 0 6px 0; - -webkit-border-radius: 0 0 6px 0; - border-radius: 0 0 6px 0; -} -.footable > tbody > tr:last-child > td.footable-first-column.footable-last-column { - -moz-border-radius: 0 0 6px 6px; - -webkit-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.footable > tbody > tr > td { - border-top: 1px solid #cccccc; - border-left: 1px solid #cccccc; - padding: 10px; - text-align: left; -} -.footable > tbody > tr > td.footable-first-column { - border-left: none; -} -.footable > tfoot > tr > th, -.footable > tfoot > tr > td { - background-color: #dce9f9; - background-image: -webkit-gradient(linear, left top, left bottom, from(#ebf3fc), to(#dce9f9)); - background-image: -webkit-linear-gradient(top, #ebf3fc, #dce9f9); - background-image: -moz-linear-gradient(top, #ebf3fc, #dce9f9); - background-image: -ms-linear-gradient(top, #ebf3fc, #dce9f9); - background-image: -o-linear-gradient(top, #ebf3fc, #dce9f9); - background-image: linear-gradient(to bottom, #ebf3fc, #dce9f9); - -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8) inset; - -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8) inset; - border-top: 1px solid #cccccc; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - padding: 10px; -} -.footable .pagination { - margin: 20px 0; -} -.footable .pagination > ul { - display: inline-block; - margin: 0; - padding: 0; - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - background-color: #ffffff; -} -.footable .pagination > ul > li { - display: inline; -} -.footable .pagination > ul > li > a, -.footable .pagination > ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - border: 1px solid #cccccc; - border-left-width: 0; -} -.footable .pagination > ul > li:first-child > a, -.footable .pagination > ul > li:first-child > span { - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - border-left-width: 1px; -} -.footable .pagination > ul > li:last-child > a, -.footable .pagination > ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.footable .pagination > ul > li > a:hover, -.footable .pagination > ul > li > a:focus, -.footable .pagination > ul > .active > a, -.footable .pagination > ul > .active > span { - background-color: #eeeeee; -} -.footable .pagination > ul > .active > a, -.footable .pagination > ul > .active > span { - color: #444444; - cursor: default; -} -.footable .pagination > ul > .disabled > span, -.footable .pagination > ul > .disabled > a, -.footable .pagination > ul > .disabled > a:hover, -.footable .pagination > ul > .disabled > a:focus { - color: #cccccc; - cursor: default; - background-color: #ebf3fc; -} -.footable .pagination.pagination-centered { - text-align: center; -} -.footable .pagination.pagination-right { - text-align: center; -} -.footable-odd { - background-color: #f7f7f7; -} diff --git a/media/footable/css/footable.standalone.min.css b/media/footable/css/footable.standalone.min.css deleted file mode 100644 index 5d375a2..0000000 --- a/media/footable/css/footable.standalone.min.css +++ /dev/null @@ -1 +0,0 @@ -.footable{border-collapse:separate;border-spacing:0;border:1px solid #ccc;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px;font-family:'trebuchet MS','Lucida sans',Arial;font-size:14px;color:#444;background:#fff}.footable>thead>tr:first-child>th.footable-first-column,.footable>thead>tr:first-child>td.footable-first-column{-moz-border-radius:6px 0 0 0;-webkit-border-radius:6px 0 0 0;border-radius:6px 0 0 0}.footable>thead>tr:first-child>th.footable-last-column,.footable>thead>tr:first-child>td.footable-last-column{-moz-border-radius:0 6px 0 0;-webkit-border-radius:0 6px 0 0;border-radius:0 6px 0 0}.footable>thead>tr:first-child>th.footable-first-column.footable-last-column,.footable>thead>tr:first-child>td.footable-first-column.footable-last-column{-moz-border-radius:6px 6px 0 0;-webkit-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.footable>thead>tr>th{border-left:1px solid #ccc;border-top:1px solid #ccc;padding:10px;text-align:left}.footable>thead>tr>th,.footable>thead>tr>td{background-color:#dce9f9;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebf3fc),to(#dce9f9));background-image:-webkit-linear-gradient(top,#ebf3fc,#dce9f9);background-image:-moz-linear-gradient(top,#ebf3fc,#dce9f9);background-image:-ms-linear-gradient(top,#ebf3fc,#dce9f9);background-image:-o-linear-gradient(top,#ebf3fc,#dce9f9);background-image:linear-gradient(to bottom,#ebf3fc,#dce9f9);-webkit-box-shadow:0 1px 0 rgba(255,255,255,0.8) inset;-moz-box-shadow:0 1px 0 rgba(255,255,255,0.8) inset;box-shadow:0 1px 0 rgba(255,255,255,0.8) inset;border-top:0;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.footable>thead>tr>th.footable-first-column,.footable>thead>tr>td.footable-first-column{border-left:none}.footable.breakpoint>tbody>tr.footable-row-detail{background:#eee}.footable.breakpoint>tbody>tr.footable-row-detail>.footable-row-detail-cell{border-left:none}.footable>tbody img{vertical-align:middle}.footable>tbody>tr:hover{background:#fbf8e9}.footable>tbody>tr:last-child>td.footable-first-column{-moz-border-radius:0 0 0 6px;-webkit-border-radius:0 0 0 6px;border-radius:0 0 0 6px}.footable>tbody>tr:last-child>td.footable-last-column{-moz-border-radius:0 0 6px 0;-webkit-border-radius:0 0 6px 0;border-radius:0 0 6px 0}.footable>tbody>tr:last-child>td.footable-first-column.footable-last-column{-moz-border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.footable>tbody>tr>td{border-top:1px solid #ccc;border-left:1px solid #ccc;padding:10px;text-align:left}.footable>tbody>tr>td.footable-first-column{border-left:none}.footable>tfoot>tr>th,.footable>tfoot>tr>td{background-color:#dce9f9;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebf3fc),to(#dce9f9));background-image:-webkit-linear-gradient(top,#ebf3fc,#dce9f9);background-image:-moz-linear-gradient(top,#ebf3fc,#dce9f9);background-image:-ms-linear-gradient(top,#ebf3fc,#dce9f9);background-image:-o-linear-gradient(top,#ebf3fc,#dce9f9);background-image:linear-gradient(to bottom,#ebf3fc,#dce9f9);-webkit-box-shadow:0 1px 0 rgba(255,255,255,0.8) inset;-moz-box-shadow:0 1px 0 rgba(255,255,255,0.8) inset;box-shadow:0 1px 0 rgba(255,255,255,0.8) inset;border-top:1px solid #ccc;text-shadow:0 1px 0 rgba(255,255,255,0.5);padding:10px}.footable .pagination{margin:20px 0}.footable .pagination>ul{display:inline-block;margin:0;padding:0;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:#fff}.footable .pagination>ul>li{display:inline}.footable .pagination>ul>li>a,.footable .pagination>ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;border:1px solid #ccc;border-left-width:0}.footable .pagination>ul>li:first-child>a,.footable .pagination>ul>li:first-child>span{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;border-left-width:1px}.footable .pagination>ul>li:last-child>a,.footable .pagination>ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.footable .pagination>ul>li>a:hover,.footable .pagination>ul>li>a:focus,.footable .pagination>ul>.active>a,.footable .pagination>ul>.active>span{background-color:#eee}.footable .pagination>ul>.active>a,.footable .pagination>ul>.active>span{color:#444;cursor:default}.footable .pagination>ul>.disabled>span,.footable .pagination>ul>.disabled>a,.footable .pagination>ul>.disabled>a:hover,.footable .pagination>ul>.disabled>a:focus{color:#ccc;cursor:default;background-color:#ebf3fc}.footable .pagination.pagination-centered{text-align:center}.footable .pagination.pagination-right{text-align:center}.footable-odd{background-color:#f7f7f7} \ No newline at end of file diff --git a/media/footable/dist/footable.all.min.js b/media/footable/dist/footable.all.min.js deleted file mode 100644 index 8c2e30c..0000000 --- a/media/footable/dist/footable.all.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * FooTable - Awesome Responsive Tables - * Version : 2.0.3 - * http://fooplugins.com/plugins/footable-jquery/ - * - * Requires jQuery - http://jquery.com/ - * - * Copyright 2014 Steven Usher & Brad Vincent - * Released under the MIT license - * You are free to use FooTable in commercial projects as long as this copyright header is left intact. - * - * Date: 11 Nov 2014 - */ -(function(e,t){function a(){var e=this;e.id=null,e.busy=!1,e.start=function(t,a){e.busy||(e.stop(),e.id=setTimeout(function(){t(),e.id=null,e.busy=!1},a),e.busy=!0)},e.stop=function(){null!==e.id&&(clearTimeout(e.id),e.id=null,e.busy=!1)}}function i(i,o,n){var r=this;r.id=n,r.table=i,r.options=o,r.breakpoints=[],r.breakpointNames="",r.columns={},r.plugins=t.footable.plugins.load(r);var l=r.options,d=l.classes,s=l.events,u=l.triggers,f=0;return r.timers={resize:new a,register:function(e){return r.timers[e]=new a,r.timers[e]}},r.init=function(){var a=e(t),i=e(r.table);if(t.footable.plugins.init(r),i.hasClass(d.loaded))return r.raise(s.alreadyInitialized),undefined;r.raise(s.initializing),i.addClass(d.loading),i.find(l.columnDataSelector).each(function(){var e=r.getColumnData(this);r.columns[e.index]=e});for(var o in l.breakpoints)r.breakpoints.push({name:o,width:l.breakpoints[o]}),r.breakpointNames+=o+" ";r.breakpoints.sort(function(e,t){return e.width-t.width}),i.unbind(u.initialize).bind(u.initialize,function(){i.removeData("footable_info"),i.data("breakpoint",""),i.trigger(u.resize),i.removeClass(d.loading),i.addClass(d.loaded).addClass(d.main),r.raise(s.initialized)}).unbind(u.redraw).bind(u.redraw,function(){r.redraw()}).unbind(u.resize).bind(u.resize,function(){r.resize()}).unbind(u.expandFirstRow).bind(u.expandFirstRow,function(){i.find(l.toggleSelector).first().not("."+d.detailShow).trigger(u.toggleRow)}).unbind(u.expandAll).bind(u.expandAll,function(){i.find(l.toggleSelector).not("."+d.detailShow).trigger(u.toggleRow)}).unbind(u.collapseAll).bind(u.collapseAll,function(){i.find("."+d.detailShow).trigger(u.toggleRow)}),i.trigger(u.initialize),a.bind("resize.footable",function(){r.timers.resize.stop(),r.timers.resize.start(function(){r.raise(u.resize)},l.delay)})},r.addRowToggle=function(){if(l.addRowToggle){var t=e(r.table),a=!1;t.find("span."+d.toggle).remove();for(var i in r.columns){var o=r.columns[i];if(o.toggle){a=!0;var n="> tbody > tr:not(."+d.detail+",."+d.disabled+") > td:nth-child("+(parseInt(o.index,10)+1)+"),"+"> tbody > tr:not(."+d.detail+",."+d.disabled+") > th:nth-child("+(parseInt(o.index,10)+1)+")";return t.find(n).not("."+d.detailCell).prepend(e(l.toggleHTMLElement).addClass(d.toggle)),undefined}}a||t.find("> tbody > tr:not(."+d.detail+",."+d.disabled+") > td:first-child").add("> tbody > tr:not(."+d.detail+",."+d.disabled+") > th:first-child").not("."+d.detailCell).prepend(e(l.toggleHTMLElement).addClass(d.toggle))}},r.setColumnClasses=function(){var t=e(r.table);for(var a in r.columns){var i=r.columns[a];if(null!==i.className){var o="",n=!0;e.each(i.matches,function(e,t){n||(o+=", "),o+="> tbody > tr:not(."+d.detail+") > td:nth-child("+(parseInt(t,10)+1)+")",n=!1}),t.find(o).not("."+d.detailCell).addClass(i.className)}}},r.bindToggleSelectors=function(){var t=e(r.table);r.hasAnyBreakpointColumn()&&(t.find(l.toggleSelector).unbind(u.toggleRow).bind(u.toggleRow,function(){var t=e(this).is("tr")?e(this):e(this).parents("tr:first");r.toggleDetail(t)}),t.find(l.toggleSelector).unbind("click.footable").bind("click.footable",function(a){t.is(".breakpoint")&&e(a.target).is("td,th,."+d.toggle)&&e(this).trigger(u.toggleRow)}))},r.parse=function(e,t){var a=l.parsers[t.type]||l.parsers.alpha;return a(e)},r.getColumnData=function(t){var a=e(t),i=a.data("hide"),o=a.index();i=i||"",i=jQuery.map(i.split(","),function(e){return jQuery.trim(e)});var n={index:o,hide:{},type:a.data("type")||"alpha",name:a.data("name")||e.trim(a.text()),ignore:a.data("ignore")||!1,toggle:a.data("toggle")||!1,className:a.data("class")||null,matches:[],names:{},group:a.data("group")||null,groupName:null,isEditable:a.data("editable")};if(null!==n.group){var d=e(r.table).find('> thead > tr.footable-group-row > th[data-group="'+n.group+'"], > thead > tr.footable-group-row > td[data-group="'+n.group+'"]').first();n.groupName=r.parse(d,{type:"alpha"})}var u=parseInt(a.prev().attr("colspan")||0,10);f+=u>1?u-1:0;var p=parseInt(a.attr("colspan")||0,10),c=n.index+f;if(p>1){var b=a.data("names");b=b||"",b=b.split(",");for(var g=0;p>g;g++)n.matches.push(g+c),b.length>g&&(n.names[g+c]=b[g])}else n.matches.push(c);n.hide["default"]="all"===a.data("hide")||e.inArray("default",i)>=0;var h=!1;for(var m in l.breakpoints)n.hide[m]="all"===a.data("hide")||e.inArray(m,i)>=0,h=h||n.hide[m];n.hasBreakpoint=h;var v=r.raise(s.columnData,{column:{data:n,th:t}});return v.column.data},r.getViewportWidth=function(){return window.innerWidth||(document.body?document.body.offsetWidth:0)},r.calculateWidth=function(e,t){return jQuery.isFunction(l.calculateWidthOverride)?l.calculateWidthOverride(e,t):(t.viewportWidthl;l++)if(o=r.breakpoints[l],o&&o.width&&a.width<=o.width){n=o;break}var d=null===n?"default":n.name,f=r.hasBreakpointColumn(d),p=t.data("breakpoint");t.data("breakpoint",d).removeClass("default breakpoint").removeClass(r.breakpointNames).addClass(d+(f?" breakpoint":"")),d!==p&&(t.trigger(u.redraw),r.raise(s.breakpoint,{breakpoint:d,info:a}))}r.raise(s.resized,{old:i,info:a})}},r.redraw=function(){r.addRowToggle(),r.bindToggleSelectors(),r.setColumnClasses();var t=e(r.table),a=t.data("breakpoint"),i=r.hasBreakpointColumn(a);t.find("> tbody > tr:not(."+d.detail+")").data("detail_created",!1).end().find("> thead > tr:last-child > th").each(function(){var i=r.columns[e(this).index()],o="",n=!0;e.each(i.matches,function(e,t){n||(o+=", ");var a=t+1;o+="> tbody > tr:not(."+d.detail+") > td:nth-child("+a+")",o+=", > tfoot > tr:not(."+d.detail+") > td:nth-child("+a+")",o+=", > colgroup > col:nth-child("+a+")",n=!1}),o+=', > thead > tr[data-group-row="true"] > th[data-group="'+i.group+'"]';var l=t.find(o).add(this);if(""!==a&&(i.hide[a]===!1?l.addClass("footable-visible").show():l.removeClass("footable-visible").hide()),1===t.find("> thead > tr.footable-group-row").length){var s=t.find('> thead > tr:last-child > th[data-group="'+i.group+'"]:visible, > thead > tr:last-child > th[data-group="'+i.group+'"]:visible'),u=t.find('> thead > tr.footable-group-row > th[data-group="'+i.group+'"], > thead > tr.footable-group-row > td[data-group="'+i.group+'"]'),f=0;e.each(s,function(){f+=parseInt(e(this).attr("colspan")||1,10)}),f>0?u.attr("colspan",f).show():u.hide()}}).end().find("> tbody > tr."+d.detailShow).each(function(){r.createOrUpdateDetailRow(this)}),t.find("[data-bind-name]").each(function(){r.toggleInput(this)}),t.find("> tbody > tr."+d.detailShow+":visible").each(function(){var t=e(this).next();t.hasClass(d.detail)&&(i?t.show():t.hide())}),t.find("> thead > tr > th.footable-last-column, > tbody > tr > td.footable-last-column").removeClass("footable-last-column"),t.find("> thead > tr > th.footable-first-column, > tbody > tr > td.footable-first-column").removeClass("footable-first-column"),t.find("> thead > tr, > tbody > tr").find("> th.footable-visible:last, > td.footable-visible:last").addClass("footable-last-column").end().find("> th.footable-visible:first, > td.footable-visible:first").addClass("footable-first-column"),r.raise(s.redrawn)},r.toggleDetail=function(t){var a=t.jquery?t:e(t),i=a.next();a.hasClass(d.detailShow)?(a.removeClass(d.detailShow),i.hasClass(d.detail)&&i.hide(),r.raise(s.rowCollapsed,{row:a[0]})):(r.createOrUpdateDetailRow(a[0]),a.addClass(d.detailShow).next().show(),r.raise(s.rowExpanded,{row:a[0]}))},r.removeRow=function(t){var a=t.jquery?t:e(t);a.hasClass(d.detail)&&(a=a.prev());var i=a.next();a.data("detail_created")===!0&&i.remove(),a.remove(),r.raise(s.rowRemoved)},r.appendRow=function(t){var a=t.jquery?t:e(t);e(r.table).find("tbody").append(a),r.redraw()},r.getColumnFromTdIndex=function(t){var a=null;for(var i in r.columns)if(e.inArray(t,r.columns[i].matches)>=0){a=r.columns[i];break}return a},r.createOrUpdateDetailRow=function(t){var a,i=e(t),o=i.next(),n=[];if(i.data("detail_created")===!0)return!0;if(i.is(":hidden"))return!1;if(r.raise(s.rowDetailUpdating,{row:i,detail:o}),i.find("> td:hidden").each(function(){var t=e(this).index(),a=r.getColumnFromTdIndex(t),i=a.name;if(a.ignore===!0)return!0;t in a.names&&(i=a.names[t]);var o=e(this).attr("data-bind-name");if(null!=o&&e(this).is(":empty")){var l=e("."+d.detailInnerValue+"["+'data-bind-value="'+o+'"]');e(this).html(e(l).contents().detach())}var s;return a.isEditable!==!1&&(a.isEditable||e(this).find(":input").length>0)&&(null==o&&(o="bind-"+e.now()+"-"+t,e(this).attr("data-bind-name",o)),s=e(this).contents().detach()),s||(s=e(this).contents().clone(!0,!0)),n.push({name:i,value:r.parse(this,a),display:s,group:a.group,groupName:a.groupName,bindName:o}),!0}),0===n.length)return!1;var u=i.find("> td:visible").length,f=o.hasClass(d.detail);return f||(o=e(''),i.after(o)),o.find("> td:first").attr("colspan",u),a=o.find("."+d.detailInner).empty(),l.createDetail(a,n,l.createGroupedDetail,l.detailSeparator,d),i.data("detail_created",!0),r.raise(s.rowDetailUpdated,{row:i,detail:o}),!f},r.raise=function(t,a){r.options.debug===!0&&e.isFunction(r.options.log)&&r.options.log(t,"event"),a=a||{};var i={ft:r};e.extend(!0,i,a);var o=e.Event(t,i);return o.ft||e.extend(!0,o,i),e(r.table).trigger(o),o},r.reset=function(){var t=e(r.table);t.removeData("footable_info").data("breakpoint","").removeClass(d.loading).removeClass(d.loaded),t.find(l.toggleSelector).unbind(u.toggleRow).unbind("click.footable"),t.find("> tbody > tr").removeClass(d.detailShow),t.find("> tbody > tr."+d.detail).remove(),r.raise(s.reset)},r.toggleInput=function(t){var a=e(t).attr("data-bind-name");if(null!=a){var i=e("."+d.detailInnerValue+"["+'data-bind-value="'+a+'"]');null!=i&&(e(t).is(":visible")?e(i).is(":empty")||e(t).html(e(i).contents().detach()):e(t).is(":empty")||e(i).html(e(t).contents().detach()))}},r.init(),r}t.footable={options:{delay:100,breakpoints:{phone:480,tablet:1024},parsers:{alpha:function(t){return e(t).data("value")||e.trim(e(t).text())},numeric:function(t){var a=e(t).data("value")||e(t).text().replace(/[^0-9.\-]/g,"");return a=parseFloat(a),isNaN(a)&&(a=0),a}},addRowToggle:!0,calculateWidthOverride:null,toggleSelector:" > tbody > tr:not(.footable-row-detail)",columnDataSelector:"> thead > tr:last-child > th, > thead > tr:last-child > td",detailSeparator:":",toggleHTMLElement:"",createGroupedDetail:function(e){for(var t={_none:{name:null,data:[]}},a=0;e.length>a;a++){var i=e[a].group;null!==i?(i in t||(t[i]={name:e[a].groupName||e[a].group,data:[]}),t[i].data.push(e[a])):t._none.data.push(e[a])}return t},createDetail:function(t,a,i,o,n){var r=i(a);for(var l in r)if(0!==r[l].data.length){"_none"!==l&&t.append('
'+r[l].name+"
");for(var d=0;r[l].data.length>d;d++){var s=r[l].data[d].name?o:"";t.append(e("
").addClass(n.detailInnerRow).append(e("
").addClass(n.detailInnerName).append(r[l].data[d].name+s)).append(e("
").addClass(n.detailInnerValue).attr("data-bind-value",r[l].data[d].bindName).append(r[l].data[d].display)))}}},classes:{main:"footable",loading:"footable-loading",loaded:"footable-loaded",toggle:"footable-toggle",disabled:"footable-disabled",detail:"footable-row-detail",detailCell:"footable-row-detail-cell",detailInner:"footable-row-detail-inner",detailInnerRow:"footable-row-detail-row",detailInnerGroup:"footable-row-detail-group",detailInnerName:"footable-row-detail-name",detailInnerValue:"footable-row-detail-value",detailShow:"footable-detail-show"},triggers:{initialize:"footable_initialize",resize:"footable_resize",redraw:"footable_redraw",toggleRow:"footable_toggle_row",expandFirstRow:"footable_expand_first_row",expandAll:"footable_expand_all",collapseAll:"footable_collapse_all"},events:{alreadyInitialized:"footable_already_initialized",initializing:"footable_initializing",initialized:"footable_initialized",resizing:"footable_resizing",resized:"footable_resized",redrawn:"footable_redrawn",breakpoint:"footable_breakpoint",columnData:"footable_column_data",rowDetailUpdating:"footable_row_detail_updating",rowDetailUpdated:"footable_row_detail_updated",rowCollapsed:"footable_row_collapsed",rowExpanded:"footable_row_expanded",rowRemoved:"footable_row_removed",reset:"footable_reset"},debug:!1,log:null},version:{major:0,minor:5,toString:function(){return t.footable.version.major+"."+t.footable.version.minor},parse:function(e){var t=/(\d+)\.?(\d+)?\.?(\d+)?/.exec(e);return{major:parseInt(t[1],10)||0,minor:parseInt(t[2],10)||0,patch:parseInt(t[3],10)||0}}},plugins:{_validate:function(a){if(!e.isFunction(a))return t.footable.options.debug===!0&&console.error('Validation failed, expected type "function", received type "{0}".',typeof a),!1;var i=new a;return"string"!=typeof i.name?(t.footable.options.debug===!0&&console.error('Validation failed, plugin does not implement a string property called "name".',i),!1):e.isFunction(i.init)?(t.footable.options.debug===!0&&console.log('Validation succeeded for plugin "'+i.name+'".',i),!0):(t.footable.options.debug===!0&&console.error('Validation failed, plugin "'+i.name+'" does not implement a function called "init".',i),!1)},registered:[],register:function(a,i){t.footable.plugins._validate(a)&&(t.footable.plugins.registered.push(a),"object"==typeof i&&e.extend(!0,t.footable.options,i))},load:function(e){var a,i,o=[];for(i=0;t.footable.plugins.registered.length>i;i++)try{a=t.footable.plugins.registered[i],o.push(new a(e))}catch(n){t.footable.options.debug===!0&&console.error(n)}return o},init:function(e){for(var a=0;e.plugins.length>a;a++)try{e.plugins[a].init(e)}catch(i){t.footable.options.debug===!0&&console.error(i)}}}};var o=0;e.fn.footable=function(a){a=a||{};var n=e.extend(!0,{},t.footable.options,a);return this.each(function(){o++;var t=new i(this,n,o);e(this).data("footable",t)})}})(jQuery,window);;(function(e,t,undefined){function a(t){var a=e("
");return e.isPlainObject(t.data)&&a.data(t.data),e.isPlainObject(t.style)&&a.css(t.style),t.className&&a.addClass(t.className),a}function o(t,o){var i=t.find("thead");0===i.size()&&(i=e("").appendTo(t));for(var n=e("").appendTo(i),r=0,l=o.cols.length;l>r;r++)n.append(a(o.cols[r]))}function i(t){var a=t.find("tbody");0===a.size()&&(a=e("").appendTo(t))}function n(t,a,o){if(o){t.attr("data-page-size",o["page-size"]);var i=t.find("tfoot");0===i.size()&&(i=e('').appendTo(t)),i.append("");var n=e("
").appendTo(i.find("tr:last-child td"));n.addClass(o["pagination-class"])}}function r(t){for(var a=t[0],o=0,i=t.length;i>o;o++){var n=t[o];if(n.data&&(n.data.toggle===!0||"true"===n.data.toggle))return}a.data=e.extend(a.data,{toggle:!0})}function l(e,t,a){0===e.find("tr.emptyInfo").size()&&e.find("tbody").append('
")}function d(t,a,o,i){t.find("tr:not(."+o+")").each(function(){var t=e(this),o=a.data("index"),n=parseInt(t.data("index"),0),r=n+i;n>=o&&this!==a.get(0)&&t.attr("data-index",r).data("index",r)})}function s(){function t(t,a,o){var i=e("");for(var l=0,d=r.cols.length;d>l;l++){var s=r.cols[l];n.append(t(s,o[s.name]||"",i))}}return n.attr("data-index",i),n},a.newItem=function(t,o,i){var n=e(a.footable.table).find("tbody"),r=a.footable.options.classes.detail;if(n.find("tr.emptyInfo").remove(),e.isArray(t)){for(var l;l=t.pop();)a.newItem(l,o,!0);return a.footable.redraw(),a.footable.raise(a.footable.options.grid.events.created,{item:t,index:o}),undefined}if(e.isPlainObject(t)){var s,f=a._items.length;if(o===undefined||0>o||o>f)s=a._makeRow(t,f++),a._items.push(t),n.append(s);else{if(s=a._makeRow(t,o),0===o)a._items.unshift(t),n.prepend(s);else{var u=n.find("tr[data-index="+(o-1)+"]");a._items.splice(o,0,t),u.data("detail_created")===!0&&(u=u.next()),u.after(s)}d(n,s,r,1)}i||(a.footable.redraw(),a.footable.raise(a.footable.options.grid.events.created,{item:t,index:o}))}},a.setItem=function(t,o){if(e.isPlainObject(t)){var i=e(a.footable.table).find("tbody"),n=a._makeRow(t,o);e.extend(a._items[o],t);var r=i.find("tr").eq(o);r.html(n.html()),a.footable.redraw(),a.footable.raise(a.footable.options.grid.events.updated,{item:t,index:o})}},a.removeItem=function(t){var o=e(a.footable.table).find("tbody"),i=a.footable.options.classes.detail,n=[];if(e.isArray(t)){for(var r;r=t.pop();)n.push(a.removeItem(r));return a.footable.raise(a.footable.options.grid.events.removed,{item:n,index:t}),n}if(t===undefined)o.find("tr").each(function(){n.push(a._items.shift()),a.footable.removeRow(this)});else{var l=o.find("tr[data-index="+t+"]");n=a._items.splice(t,1)[0],a.footable.removeRow(l),d(o,l,i,-1)}return a.footable.raise(a.footable.options.grid.events.removed,{item:n,index:t}),n}}if(t.footable===undefined||null===t.foobox)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var f={grid:{enabled:!0,data:null,template:null,cols:null,items:null,url:null,ajax:null,activeClass:"active",multiSelect:!1,showIndex:!1,showCheckbox:!1,showEmptyInfo:!1,emptyInfo:'

No Data

',pagination:{"page-size":20,"pagination-class":"pagination pagination-centered"},indexFormatter:function(e,t,a){return a+1},checkboxFormatter:function(e){return''},events:{loaded:"footable_grid_loaded",created:"footable_grid_created",removed:"footable_grid_removed",updated:"footable_grid_updated"}}};t.footable.plugins.register(s,f)})(jQuery,window);;(function(t,e,undefined){function a(){var e=this;e.name="Footable Filter",e.init=function(a){if(e.footable=a,a.options.filter.enabled===!0){if(t(a.table).data("filter")===!1)return;a.timers.register("filter"),t(a.table).unbind(".filtering").bind({"footable_initialized.filtering":function(){var i=t(a.table),o={input:i.data("filter")||a.options.filter.input,timeout:i.data("filter-timeout")||a.options.filter.timeout,minimum:i.data("filter-minimum")||a.options.filter.minimum,disableEnter:i.data("filter-disable-enter")||a.options.filter.disableEnter};o.disableEnter&&t(o.input).keypress(function(t){return window.event?13!==window.event.keyCode:13!==t.which}),i.bind("footable_clear_filter",function(){t(o.input).val(""),e.clearFilter()}),i.bind("footable_filter",function(t,a){e.filter(a.filter)}),t(o.input).keyup(function(i){a.timers.filter.stop(),27===i.which&&t(o.input).val(""),a.timers.filter.start(function(){var a=t(o.input).val()||"";e.filter(a)},o.timeout)})},"footable_redrawn.filtering":function(){var i=t(a.table),o=i.data("filter-string");o&&e.filter(o)}}).data("footable-filter",e)}},e.filter=function(a){var i=e.footable,o=t(i.table),n=o.data("filter-minimum")||i.options.filter.minimum,r=!a,l=i.raise("footable_filtering",{filter:a,clear:r});if(!(l&&l.result===!1||l.filter&&n>l.filter.length))if(l.clear)e.clearFilter();else{var d=l.filter.split(" ");o.find("> tbody > tr").hide().addClass("footable-filtered");var s=o.find("> tbody > tr:not(.footable-row-detail)");t.each(d,function(t,e){e&&e.length>0&&(o.data("current-filter",e),s=s.filter(i.options.filter.filterFunction))}),s.each(function(){e.showRow(this,i),t(this).removeClass("footable-filtered")}),o.data("filter-string",l.filter),i.raise("footable_filtered",{filter:l.filter,clear:!1})}},e.clearFilter=function(){var a=e.footable,i=t(a.table);i.find("> tbody > tr:not(.footable-row-detail)").removeClass("footable-filtered").each(function(){e.showRow(this,a)}),i.removeData("filter-string"),a.raise("footable_filtered",{clear:!0})},e.showRow=function(e,a){var i=t(e),o=i.next(),n=t(a.table);i.is(":visible")||(n.hasClass("breakpoint")&&i.hasClass("footable-detail-show")&&o.hasClass("footable-row-detail")?(i.add(o).show(),a.createOrUpdateDetailRow(e)):i.show())}}if(e.footable===undefined||null===e.footable)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var i={filter:{enabled:!0,input:".footable-filter",timeout:300,minimum:2,disableEnter:!1,filterFunction:function(){var e=t(this),a=e.parents("table:first"),i=a.data("current-filter").toUpperCase(),o=e.find("td").text();return a.data("filter-text-only")||e.find("td[data-value]").each(function(){o+=t(this).data("value")}),o.toUpperCase().indexOf(i)>=0}}};e.footable.plugins.register(a,i)})(jQuery,window);;(function(e,t,undefined){function a(t){var a=e(t.table),i=a.data();this.pageNavigation=i.pageNavigation||t.options.pageNavigation,this.pageSize=i.pageSize||t.options.pageSize,this.firstText=i.firstText||t.options.firstText,this.previousText=i.previousText||t.options.previousText,this.nextText=i.nextText||t.options.nextText,this.lastText=i.lastText||t.options.lastText,this.limitNavigation=parseInt(i.limitNavigation||t.options.limitNavigation||o.limitNavigation,10),this.limitPreviousText=i.limitPreviousText||t.options.limitPreviousText,this.limitNextText=i.limitNextText||t.options.limitNextText,this.limit=this.limitNavigation>0,this.currentPage=i.currentPage||0,this.pages=[],this.control=!1}function i(){var t=this;t.name="Footable Paginate",t.init=function(a){if(a.options.paginate===!0){if(e(a.table).data("page")===!1)return;t.footable=a,e(a.table).unbind(".paging").bind({"footable_initialized.paging footable_row_removed.paging footable_redrawn.paging footable_sorted.paging footable_filtered.paging":function(){t.setupPaging()}}).data("footable-paging",t)}},t.setupPaging=function(){var i=t.footable,o=e(i.table).find("> tbody");i.pageInfo=new a(i),t.createPages(i,o),t.createNavigation(i,o),t.fillPage(i,o,i.pageInfo.currentPage)},t.createPages=function(t,a){var i=1,o=t.pageInfo,n=i*o.pageSize,r=[],l=[];o.pages=[];var d=a.find("> tr:not(.footable-filtered,.footable-row-detail)");d.each(function(e,t){r.push(t),e===n-1?(o.pages.push(r),i++,n=i*o.pageSize,r=[]):e>=d.length-d.length%o.pageSize&&l.push(t)}),l.length>0&&o.pages.push(l),o.currentPage>=o.pages.length&&(o.currentPage=o.pages.length-1),0>o.currentPage&&(o.currentPage=0),1===o.pages.length?e(t.table).addClass("no-paging"):e(t.table).removeClass("no-paging")},t.createNavigation=function(a){var i=e(a.table).find(a.pageInfo.pageNavigation);if(0===i.length){if(i=e(a.pageInfo.pageNavigation),i.parents("table:first").length>0&&i.parents("table:first")!==e(a.table))return;i.length>1&&a.options.debug===!0&&console.error("More than one pagination control was found!")}if(0!==i.length){i.is("ul")||(0===i.find("ul:first").length&&i.append("
    "),i=i.find("ul")),i.find("li").remove();var o=a.pageInfo;o.control=i,o.pages.length>0&&(i.append('
  • '+a.pageInfo.firstText+""),i.append('
  • '+a.pageInfo.previousText+"
  • "),o.limit&&i.append('
  • '+a.pageInfo.limitPreviousText+"
  • "),o.limit||e.each(o.pages,function(e,t){t.length>0&&i.append('
  • '+(e+1)+"
  • ")}),o.limit&&(i.append('
  • '+a.pageInfo.limitNextText+"
  • "),t.createLimited(i,o,0)),i.append('
  • '+a.pageInfo.nextText+"
  • "),i.append('
  • '+a.pageInfo.lastText+"
  • ")),i.off("click","a[data-page]").on("click","a[data-page]",function(n){n.preventDefault();var r=e(this).data("page"),l=o.currentPage;if("first"===r)l=0;else if("prev"===r)l>0&&l--;else if("next"===r)o.pages.length-1>l&&l++;else if("last"===r)l=o.pages.length-1;else if("limit-prev"===r){l=-1;var d=i.find(".footable-page:first a").data("page");t.createLimited(i,o,d-o.limitNavigation),t.setPagingClasses(i,o.currentPage,o.pages.length)}else if("limit-next"===r){l=-1;var s=i.find(".footable-page:last a").data("page");t.createLimited(i,o,s+1),t.setPagingClasses(i,o.currentPage,o.pages.length)}else l=r;if(l>=0){if(o.limit&&o.currentPage!=l){for(var f=l;0!==f%o.limitNavigation;)f-=1;t.createLimited(i,o,f)}t.paginate(a,l)}}),t.setPagingClasses(i,o.currentPage,o.pages.length)}},t.createLimited=function(e,t,a){a=a||0,e.find("li.footable-page").remove();var i,o,n=e.find('li.footable-page-arrow > a[data-page="limit-prev"]').parent(),r=e.find('li.footable-page-arrow > a[data-page="limit-next"]').parent();for(i=t.pages.length-1;i>=0;i--)o=t.pages[i],i>=a&&a+t.limitNavigation>i&&o.length>0&&n.after('
  • '+(i+1)+"
  • ");0===a?n.hide():n.show(),a+t.limitNavigation>=t.pages.length?r.hide():r.show()},t.paginate=function(a,i){var o=a.pageInfo;if(o.currentPage!==i){var n=e(a.table).find("> tbody"),r=a.raise("footable_paging",{page:i,size:o.pageSize});if(r&&r.result===!1)return;t.fillPage(a,n,i),o.control.find("li").removeClass("active disabled"),t.setPagingClasses(o.control,o.currentPage,o.pages.length)}},t.setPagingClasses=function(e,t,a){e.find("li.footable-page > a[data-page="+t+"]").parent().addClass("active"),t>=a-1&&(e.find('li.footable-page-arrow > a[data-page="next"]').parent().addClass("disabled"),e.find('li.footable-page-arrow > a[data-page="last"]').parent().addClass("disabled")),1>t&&(e.find('li.footable-page-arrow > a[data-page="first"]').parent().addClass("disabled"),e.find('li.footable-page-arrow > a[data-page="prev"]').parent().addClass("disabled"))},t.fillPage=function(a,i,o){a.pageInfo.currentPage=o,e(a.table).data("currentPage",o),i.find("> tr").hide(),e(a.pageInfo.pages[o]).each(function(){t.showRow(this,a)}),a.raise("footable_page_filled")},t.showRow=function(t,a){var i=e(t),o=i.next(),n=e(a.table);n.hasClass("breakpoint")&&i.hasClass("footable-detail-show")&&o.hasClass("footable-row-detail")?(i.add(o).show(),a.createOrUpdateDetailRow(t)):i.show()}}if(t.footable===undefined||null===t.footable)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var o={paginate:!0,pageSize:10,pageNavigation:".pagination",firstText:"«",previousText:"‹",nextText:"›",lastText:"»",limitNavigation:0,limitPreviousText:"...",limitNextText:"..."};t.footable.plugins.register(i,o)})(jQuery,window);;(function(t,e,undefined){function a(){var e=this;e.name="Footable Sortable",e.init=function(a){e.footable=a,a.options.sort===!0&&t(a.table).unbind(".sorting").bind({"footable_initialized.sorting":function(){var i,o,n=t(a.table),r=(n.find("> tbody"),a.options.classes.sort);if(n.data("sort")!==!1){n.find("> thead > tr:last-child > th, > thead > tr:last-child > td").each(function(){var e=t(this),i=a.columns[e.index()];i.sort.ignore===!0||e.hasClass(r.sortable)||(e.addClass(r.sortable),t("").addClass(r.indicator).appendTo(e))}),n.find("> thead > tr:last-child > th."+r.sortable+", > thead > tr:last-child > td."+r.sortable).unbind("click.footable").bind("click.footable",function(a){a.preventDefault(),o=t(this);var i=!o.hasClass(r.sorted);return e.doSort(o.index(),i),!1});var l=!1;for(var s in a.columns)if(i=a.columns[s],i.sort.initial){var d="descending"!==i.sort.initial;e.doSort(i.index,d);break}l&&a.bindToggleSelectors()}},"footable_redrawn.sorting":function(){var i=t(a.table),o=a.options.classes.sort;i.data("sorted")>=0&&i.find("> thead > tr:last-child > th").each(function(a){var i=t(this);return i.hasClass(o.sorted)||i.hasClass(o.descending)?(e.doSort(a),undefined):undefined})},"footable_column_data.sorting":function(e){var a=t(e.column.th);e.column.data.sort=e.column.data.sort||{},e.column.data.sort.initial=a.data("sort-initial")||!1,e.column.data.sort.ignore=a.data("sort-ignore")||!1,e.column.data.sort.selector=a.data("sort-selector")||null;var i=a.data("sort-match")||0;i>=e.column.data.matches.length&&(i=0),e.column.data.sort.match=e.column.data.matches[i]}}).data("footable-sort",e)},e.doSort=function(a,i){var o=e.footable;if(t(o.table).data("sort")!==!1){var n=t(o.table),r=n.find("> tbody"),l=o.columns[a],s=n.find("> thead > tr:last-child > th:eq("+a+")"),d=o.options.classes.sort,f=o.options.events.sort;if(i=i===undefined?s.hasClass(d.sorted):"toggle"===i?!s.hasClass(d.sorted):i,l.sort.ignore===!0)return!0;var u=o.raise(f.sorting,{column:l,direction:i?"ASC":"DESC"});u&&u.result===!1||(n.data("sorted",l.index),n.find("> thead > tr:last-child > th, > thead > tr:last-child > td").not(s).removeClass(d.sorted+" "+d.descending),i===undefined&&(i=s.hasClass(d.sorted)),i?s.removeClass(d.descending).addClass(d.sorted):s.removeClass(d.sorted).addClass(d.descending),e.sort(o,r,l,i),o.bindToggleSelectors(),o.raise(f.sorted,{column:l,direction:i?"ASC":"DESC"}))}},e.rows=function(e,a,i){var o=[];return a.find("> tr").each(function(){var a=t(this),n=null;if(a.hasClass(e.options.classes.detail))return!0;a.next().hasClass(e.options.classes.detail)&&(n=a.next().get(0));var r={row:a,detail:n};return i!==undefined&&(r.value=e.parse(this.cells[i.sort.match],i)),o.push(r),!0}).detach(),o},e.sort=function(t,a,i,o){var n=e.rows(t,a,i),r=t.options.sorters[i.type]||t.options.sorters.alpha;n.sort(function(t,e){return o?r(t.value,e.value):r(e.value,t.value)});for(var l=0;n.length>l;l++)a.append(n[l].row),null!==n[l].detail&&a.append(n[l].detail)}}if(e.footable===undefined||null===e.footable)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var i={sort:!0,sorters:{alpha:function(t,e){return"string"==typeof t&&(t=t.toLowerCase()),"string"==typeof e&&(e=e.toLowerCase()),t===e?0:e>t?-1:1},numeric:function(t,e){return t-e}},classes:{sort:{sortable:"footable-sortable",sorted:"footable-sorted",descending:"footable-sorted-desc",indicator:"footable-sort-indicator"}},events:{sort:{sorting:"footable_sorting",sorted:"footable_sorted"}}};e.footable.plugins.register(a,i)})(jQuery,window);;(function(t,e,undefined){function a(){var e=this;e.name="Footable Striping",e.init=function(a){e.footable=a,t(a.table).unbind("striping").bind({"footable_initialized.striping footable_row_removed.striping footable_redrawn.striping footable_sorted.striping footable_filtered.striping":function(){t(this).data("striping")!==!1&&e.setupStriping(a)}})},e.setupStriping=function(e){var a=0;t(e.table).find("> tbody > tr:not(.footable-row-detail)").each(function(){var i=t(this);i.removeClass(e.options.classes.striping.even).removeClass(e.options.classes.striping.odd),0===a%2?i.addClass(e.options.classes.striping.even):i.addClass(e.options.classes.striping.odd),a++})}}if(e.footable===undefined||null===e.foobox)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var i={striping:{enabled:!0},classes:{striping:{odd:"footable-odd",even:"footable-even"}}};e.footable.plugins.register(a,i)})(jQuery,window);;(function(t,e,undefined){function a(t,e){e=e?e:location.hash;var a=RegExp("&"+t+"(?:=([^&]*))?(?=&|$)","i");return(e=e.replace(/^\#/,"&").match(a))?e[1]===undefined?"":decodeURIComponent(e[1]):undefined}function i(e,a){var i=t(e.table).find("tbody").find("tr:not(.footable-row-detail, .footable-filtered)").length;t(e.table).data("status_num_total",i);var o=t(e.table).find("tbody").find("tr:not(.footable-row-detail)").filter(":visible").length;t(e.table).data("status_num_shown",o);var n=t(e.table).data("sorted"),r=t(e.table).find("th")[n],l=t(r).hasClass("footable-sorted-desc");if(t(e.table).data("status_descending",l),e.pageInfo){var s=e.pageInfo.currentPage;t(e.table).data("status_pagenum",s)}var d="",f=t(e.table).data("filter");t(f).length&&(d=t(f).val()),t(e.table).data("status_filter_val",d);var u,p,c;if("footable_row_expanded"==a.type&&(u=a.row,u&&(p=t(e.table).data("expanded_rows"),c=[],p&&(c=p.split(",")),c.push(u.rowIndex),t(e.table).data("expanded_rows",c.join(",")))),"footable_row_collapsed"==a.type&&(u=a.row)){p=t(e.table).data("expanded_rows"),c=[],p&&(c=p.split(","));var g=[];for(var b in c)if(c[b]==u.rowIndex){g=c.splice(b,1);break}t(e.table).data("expanded_rows",g.join(","))}}function o(){var e=this;e.name="Footable LucidBookmarkable",e.init=function(e){e.options.bookmarkable.enabled&&t(e.table).bind({footable_initialized:function(){var i=e.table.id,o=a(i+"_f"),n=a(i+"_p"),r=a(i+"_s"),l=a(i+"_d"),s=a(i+"_e");if(o){var d=t(e.table).data("filter");t(d).val(o),t(e.table).trigger("footable_filter",{filter:o})}if(n&&t(e.table).data("currentPage",n),r!==undefined){var f=t(e.table).data("footable-sort"),u=!0;"true"==l&&(u=!1),f.doSort(r,u)}else t(e.table).trigger("footable_setup_paging");if(s){var p=s.split(",");for(var c in p){var g=t(e.table.rows[p[c]]);g.find("> td:first").trigger("footable_toggle_row")}}e.lucid_bookmark_read=!0},"footable_page_filled footable_redrawn footable_filtered footable_sorted footable_row_expanded footable_row_collapsed":function(a){if(i(e,a),e.lucid_bookmark_read){var o=e.table.id,n=o+"_f",r=o+"_p",l=o+"_s",s=o+"_d",d=o+"_e",f=location.hash.replace(/^\#/,"&"),u=[n,r,l,s,d];for(var p in u){var c=RegExp("&"+u[p]+"=([^&]*)","g");f=f.replace(c,"")}var g={};g[n]=t(e.table).data("status_filter_val"),g[r]=t(e.table).data("status_pagenum"),g[l]=t(e.table).data("sorted"),g[s]=t(e.table).data("status_descending"),g[d]=t(e.table).data("expanded_rows");var b=[];for(var h in g)g[h]!==undefined&&b.push(h+"="+encodeURIComponent(g[h]));f.length&&b.push(f),location.hash=b.join("&")}}})}}if(e.footable===undefined||null===e.foobox)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var n={bookmarkable:{enabled:!1}};e.footable.plugins.register(o,n)})(jQuery,window); \ No newline at end of file diff --git a/media/footable/dist/footable.bookmarkable.min.js b/media/footable/dist/footable.bookmarkable.min.js deleted file mode 100644 index ad2b127..0000000 --- a/media/footable/dist/footable.bookmarkable.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(t,e,undefined){function a(t,e){e=e?e:location.hash;var a=RegExp("&"+t+"(?:=([^&]*))?(?=&|$)","i");return(e=e.replace(/^\#/,"&").match(a))?e[1]===undefined?"":decodeURIComponent(e[1]):undefined}function i(e,a){var i=t(e.table).find("tbody").find("tr:not(.footable-row-detail, .footable-filtered)").length;t(e.table).data("status_num_total",i);var o=t(e.table).find("tbody").find("tr:not(.footable-row-detail)").filter(":visible").length;t(e.table).data("status_num_shown",o);var n=t(e.table).data("sorted"),r=t(e.table).find("th")[n],l=t(r).hasClass("footable-sorted-desc");if(t(e.table).data("status_descending",l),e.pageInfo){var s=e.pageInfo.currentPage;t(e.table).data("status_pagenum",s)}var d="",f=t(e.table).data("filter");t(f).length&&(d=t(f).val()),t(e.table).data("status_filter_val",d);var u,p,c;if("footable_row_expanded"==a.type&&(u=a.row,u&&(p=t(e.table).data("expanded_rows"),c=[],p&&(c=p.split(",")),c.push(u.rowIndex),t(e.table).data("expanded_rows",c.join(",")))),"footable_row_collapsed"==a.type&&(u=a.row)){p=t(e.table).data("expanded_rows"),c=[],p&&(c=p.split(","));var g=[];for(var b in c)if(c[b]==u.rowIndex){g=c.splice(b,1);break}t(e.table).data("expanded_rows",g.join(","))}}function o(){var e=this;e.name="Footable LucidBookmarkable",e.init=function(e){e.options.bookmarkable.enabled&&t(e.table).bind({footable_initialized:function(){var i=e.table.id,o=a(i+"_f"),n=a(i+"_p"),r=a(i+"_s"),l=a(i+"_d"),s=a(i+"_e");if(o){var d=t(e.table).data("filter");t(d).val(o),t(e.table).trigger("footable_filter",{filter:o})}if(n&&t(e.table).data("currentPage",n),r!==undefined){var f=t(e.table).data("footable-sort"),u=!0;"true"==l&&(u=!1),f.doSort(r,u)}else t(e.table).trigger("footable_setup_paging");if(s){var p=s.split(",");for(var c in p){var g=t(e.table.rows[p[c]]);g.find("> td:first").trigger("footable_toggle_row")}}e.lucid_bookmark_read=!0},"footable_page_filled footable_redrawn footable_filtered footable_sorted footable_row_expanded footable_row_collapsed":function(a){if(i(e,a),e.lucid_bookmark_read){var o=e.table.id,n=o+"_f",r=o+"_p",l=o+"_s",s=o+"_d",d=o+"_e",f=location.hash.replace(/^\#/,"&"),u=[n,r,l,s,d];for(var p in u){var c=RegExp("&"+u[p]+"=([^&]*)","g");f=f.replace(c,"")}var g={};g[n]=t(e.table).data("status_filter_val"),g[r]=t(e.table).data("status_pagenum"),g[l]=t(e.table).data("sorted"),g[s]=t(e.table).data("status_descending"),g[d]=t(e.table).data("expanded_rows");var b=[];for(var h in g)g[h]!==undefined&&b.push(h+"="+encodeURIComponent(g[h]));f.length&&b.push(f),location.hash=b.join("&")}}})}}if(e.footable===undefined||null===e.foobox)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var n={bookmarkable:{enabled:!1}};e.footable.plugins.register(o,n)})(jQuery,window); \ No newline at end of file diff --git a/media/footable/dist/footable.filter.min.js b/media/footable/dist/footable.filter.min.js deleted file mode 100644 index ed3e362..0000000 --- a/media/footable/dist/footable.filter.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(t,e,undefined){function a(){var e=this;e.name="Footable Filter",e.init=function(a){if(e.footable=a,a.options.filter.enabled===!0){if(t(a.table).data("filter")===!1)return;a.timers.register("filter"),t(a.table).unbind(".filtering").bind({"footable_initialized.filtering":function(){var i=t(a.table),o={input:i.data("filter")||a.options.filter.input,timeout:i.data("filter-timeout")||a.options.filter.timeout,minimum:i.data("filter-minimum")||a.options.filter.minimum,disableEnter:i.data("filter-disable-enter")||a.options.filter.disableEnter};o.disableEnter&&t(o.input).keypress(function(t){return window.event?13!==window.event.keyCode:13!==t.which}),i.bind("footable_clear_filter",function(){t(o.input).val(""),e.clearFilter()}),i.bind("footable_filter",function(t,a){e.filter(a.filter)}),t(o.input).keyup(function(i){a.timers.filter.stop(),27===i.which&&t(o.input).val(""),a.timers.filter.start(function(){var a=t(o.input).val()||"";e.filter(a)},o.timeout)})},"footable_redrawn.filtering":function(){var i=t(a.table),o=i.data("filter-string");o&&e.filter(o)}}).data("footable-filter",e)}},e.filter=function(a){var i=e.footable,o=t(i.table),n=o.data("filter-minimum")||i.options.filter.minimum,r=!a,l=i.raise("footable_filtering",{filter:a,clear:r});if(!(l&&l.result===!1||l.filter&&n>l.filter.length))if(l.clear)e.clearFilter();else{var d=l.filter.split(" ");o.find("> tbody > tr").hide().addClass("footable-filtered");var s=o.find("> tbody > tr:not(.footable-row-detail)");t.each(d,function(t,e){e&&e.length>0&&(o.data("current-filter",e),s=s.filter(i.options.filter.filterFunction))}),s.each(function(){e.showRow(this,i),t(this).removeClass("footable-filtered")}),o.data("filter-string",l.filter),i.raise("footable_filtered",{filter:l.filter,clear:!1})}},e.clearFilter=function(){var a=e.footable,i=t(a.table);i.find("> tbody > tr:not(.footable-row-detail)").removeClass("footable-filtered").each(function(){e.showRow(this,a)}),i.removeData("filter-string"),a.raise("footable_filtered",{clear:!0})},e.showRow=function(e,a){var i=t(e),o=i.next(),n=t(a.table);i.is(":visible")||(n.hasClass("breakpoint")&&i.hasClass("footable-detail-show")&&o.hasClass("footable-row-detail")?(i.add(o).show(),a.createOrUpdateDetailRow(e)):i.show())}}if(e.footable===undefined||null===e.footable)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var i={filter:{enabled:!0,input:".footable-filter",timeout:300,minimum:2,disableEnter:!1,filterFunction:function(){var e=t(this),a=e.parents("table:first"),i=a.data("current-filter").toUpperCase(),o=e.find("td").text();return a.data("filter-text-only")||e.find("td[data-value]").each(function(){o+=t(this).data("value")}),o.toUpperCase().indexOf(i)>=0}}};e.footable.plugins.register(a,i)})(jQuery,window); \ No newline at end of file diff --git a/media/footable/dist/footable.grid.min.js b/media/footable/dist/footable.grid.min.js deleted file mode 100644 index 7793ff7..0000000 --- a/media/footable/dist/footable.grid.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(e,t,undefined){function a(t){var a=e("
");return e.isPlainObject(t.data)&&a.data(t.data),e.isPlainObject(t.style)&&a.css(t.style),t.className&&a.addClass(t.className),a}function o(t,o){var i=t.find("thead");0===i.size()&&(i=e("").appendTo(t));for(var n=e("").appendTo(i),r=0,l=o.cols.length;l>r;r++)n.append(a(o.cols[r]))}function i(t){var a=t.find("tbody");0===a.size()&&(a=e("").appendTo(t))}function n(t,a,o){if(o){t.attr("data-page-size",o["page-size"]);var i=t.find("tfoot");0===i.size()&&(i=e('').appendTo(t)),i.append("");var n=e("
").appendTo(i.find("tr:last-child td"));n.addClass(o["pagination-class"])}}function r(t){for(var a=t[0],o=0,i=t.length;i>o;o++){var n=t[o];if(n.data&&(n.data.toggle===!0||"true"===n.data.toggle))return}a.data=e.extend(a.data,{toggle:!0})}function l(e,t,a){0===e.find("tr.emptyInfo").size()&&e.find("tbody").append('
")}function d(t,a,o,i){t.find("tr:not(."+o+")").each(function(){var t=e(this),o=a.data("index"),n=parseInt(t.data("index"),0),r=n+i;n>=o&&this!==a.get(0)&&t.attr("data-index",r).data("index",r)})}function s(){function t(t,a,o){var i=e("");for(var l=0,d=r.cols.length;d>l;l++){var s=r.cols[l];n.append(t(s,o[s.name]||"",i))}}return n.attr("data-index",i),n},a.newItem=function(t,o,i){var n=e(a.footable.table).find("tbody"),r=a.footable.options.classes.detail;if(n.find("tr.emptyInfo").remove(),e.isArray(t)){for(var l;l=t.pop();)a.newItem(l,o,!0);return a.footable.redraw(),a.footable.raise(a.footable.options.grid.events.created,{item:t,index:o}),undefined}if(e.isPlainObject(t)){var s,f=a._items.length;if(o===undefined||0>o||o>f)s=a._makeRow(t,f++),a._items.push(t),n.append(s);else{if(s=a._makeRow(t,o),0===o)a._items.unshift(t),n.prepend(s);else{var u=n.find("tr[data-index="+(o-1)+"]");a._items.splice(o,0,t),u.data("detail_created")===!0&&(u=u.next()),u.after(s)}d(n,s,r,1)}i||(a.footable.redraw(),a.footable.raise(a.footable.options.grid.events.created,{item:t,index:o}))}},a.setItem=function(t,o){if(e.isPlainObject(t)){var i=e(a.footable.table).find("tbody"),n=a._makeRow(t,o);e.extend(a._items[o],t);var r=i.find("tr").eq(o);r.html(n.html()),a.footable.redraw(),a.footable.raise(a.footable.options.grid.events.updated,{item:t,index:o})}},a.removeItem=function(t){var o=e(a.footable.table).find("tbody"),i=a.footable.options.classes.detail,n=[];if(e.isArray(t)){for(var r;r=t.pop();)n.push(a.removeItem(r));return a.footable.raise(a.footable.options.grid.events.removed,{item:n,index:t}),n}if(t===undefined)o.find("tr").each(function(){n.push(a._items.shift()),a.footable.removeRow(this)});else{var l=o.find("tr[data-index="+t+"]");n=a._items.splice(t,1)[0],a.footable.removeRow(l),d(o,l,i,-1)}return a.footable.raise(a.footable.options.grid.events.removed,{item:n,index:t}),n}}if(t.footable===undefined||null===t.foobox)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var f={grid:{enabled:!0,data:null,template:null,cols:null,items:null,url:null,ajax:null,activeClass:"active",multiSelect:!1,showIndex:!1,showCheckbox:!1,showEmptyInfo:!1,emptyInfo:'

No Data

',pagination:{"page-size":20,"pagination-class":"pagination pagination-centered"},indexFormatter:function(e,t,a){return a+1},checkboxFormatter:function(e){return''},events:{loaded:"footable_grid_loaded",created:"footable_grid_created",removed:"footable_grid_removed",updated:"footable_grid_updated"}}};t.footable.plugins.register(s,f)})(jQuery,window); \ No newline at end of file diff --git a/media/footable/dist/footable.min.js b/media/footable/dist/footable.min.js deleted file mode 100644 index 0486c57..0000000 --- a/media/footable/dist/footable.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * FooTable - Awesome Responsive Tables - * Version : 2.0.3 - * http://fooplugins.com/plugins/footable-jquery/ - * - * Requires jQuery - http://jquery.com/ - * - * Copyright 2014 Steven Usher & Brad Vincent - * Released under the MIT license - * You are free to use FooTable in commercial projects as long as this copyright header is left intact. - * - * Date: 11 Nov 2014 - */ -(function(e,t){function a(){var e=this;e.id=null,e.busy=!1,e.start=function(t,a){e.busy||(e.stop(),e.id=setTimeout(function(){t(),e.id=null,e.busy=!1},a),e.busy=!0)},e.stop=function(){null!==e.id&&(clearTimeout(e.id),e.id=null,e.busy=!1)}}function i(i,o,n){var r=this;r.id=n,r.table=i,r.options=o,r.breakpoints=[],r.breakpointNames="",r.columns={},r.plugins=t.footable.plugins.load(r);var l=r.options,d=l.classes,s=l.events,u=l.triggers,f=0;return r.timers={resize:new a,register:function(e){return r.timers[e]=new a,r.timers[e]}},r.init=function(){var a=e(t),i=e(r.table);if(t.footable.plugins.init(r),i.hasClass(d.loaded))return r.raise(s.alreadyInitialized),undefined;r.raise(s.initializing),i.addClass(d.loading),i.find(l.columnDataSelector).each(function(){var e=r.getColumnData(this);r.columns[e.index]=e});for(var o in l.breakpoints)r.breakpoints.push({name:o,width:l.breakpoints[o]}),r.breakpointNames+=o+" ";r.breakpoints.sort(function(e,t){return e.width-t.width}),i.unbind(u.initialize).bind(u.initialize,function(){i.removeData("footable_info"),i.data("breakpoint",""),i.trigger(u.resize),i.removeClass(d.loading),i.addClass(d.loaded).addClass(d.main),r.raise(s.initialized)}).unbind(u.redraw).bind(u.redraw,function(){r.redraw()}).unbind(u.resize).bind(u.resize,function(){r.resize()}).unbind(u.expandFirstRow).bind(u.expandFirstRow,function(){i.find(l.toggleSelector).first().not("."+d.detailShow).trigger(u.toggleRow)}).unbind(u.expandAll).bind(u.expandAll,function(){i.find(l.toggleSelector).not("."+d.detailShow).trigger(u.toggleRow)}).unbind(u.collapseAll).bind(u.collapseAll,function(){i.find("."+d.detailShow).trigger(u.toggleRow)}),i.trigger(u.initialize),a.bind("resize.footable",function(){r.timers.resize.stop(),r.timers.resize.start(function(){r.raise(u.resize)},l.delay)})},r.addRowToggle=function(){if(l.addRowToggle){var t=e(r.table),a=!1;t.find("span."+d.toggle).remove();for(var i in r.columns){var o=r.columns[i];if(o.toggle){a=!0;var n="> tbody > tr:not(."+d.detail+",."+d.disabled+") > td:nth-child("+(parseInt(o.index,10)+1)+"),"+"> tbody > tr:not(."+d.detail+",."+d.disabled+") > th:nth-child("+(parseInt(o.index,10)+1)+")";return t.find(n).not("."+d.detailCell).prepend(e(l.toggleHTMLElement).addClass(d.toggle)),undefined}}a||t.find("> tbody > tr:not(."+d.detail+",."+d.disabled+") > td:first-child").add("> tbody > tr:not(."+d.detail+",."+d.disabled+") > th:first-child").not("."+d.detailCell).prepend(e(l.toggleHTMLElement).addClass(d.toggle))}},r.setColumnClasses=function(){var t=e(r.table);for(var a in r.columns){var i=r.columns[a];if(null!==i.className){var o="",n=!0;e.each(i.matches,function(e,t){n||(o+=", "),o+="> tbody > tr:not(."+d.detail+") > td:nth-child("+(parseInt(t,10)+1)+")",n=!1}),t.find(o).not("."+d.detailCell).addClass(i.className)}}},r.bindToggleSelectors=function(){var t=e(r.table);r.hasAnyBreakpointColumn()&&(t.find(l.toggleSelector).unbind(u.toggleRow).bind(u.toggleRow,function(){var t=e(this).is("tr")?e(this):e(this).parents("tr:first");r.toggleDetail(t)}),t.find(l.toggleSelector).unbind("click.footable").bind("click.footable",function(a){t.is(".breakpoint")&&e(a.target).is("td,th,."+d.toggle)&&e(this).trigger(u.toggleRow)}))},r.parse=function(e,t){var a=l.parsers[t.type]||l.parsers.alpha;return a(e)},r.getColumnData=function(t){var a=e(t),i=a.data("hide"),o=a.index();i=i||"",i=jQuery.map(i.split(","),function(e){return jQuery.trim(e)});var n={index:o,hide:{},type:a.data("type")||"alpha",name:a.data("name")||e.trim(a.text()),ignore:a.data("ignore")||!1,toggle:a.data("toggle")||!1,className:a.data("class")||null,matches:[],names:{},group:a.data("group")||null,groupName:null,isEditable:a.data("editable")};if(null!==n.group){var d=e(r.table).find('> thead > tr.footable-group-row > th[data-group="'+n.group+'"], > thead > tr.footable-group-row > td[data-group="'+n.group+'"]').first();n.groupName=r.parse(d,{type:"alpha"})}var u=parseInt(a.prev().attr("colspan")||0,10);f+=u>1?u-1:0;var p=parseInt(a.attr("colspan")||0,10),c=n.index+f;if(p>1){var b=a.data("names");b=b||"",b=b.split(",");for(var g=0;p>g;g++)n.matches.push(g+c),b.length>g&&(n.names[g+c]=b[g])}else n.matches.push(c);n.hide["default"]="all"===a.data("hide")||e.inArray("default",i)>=0;var h=!1;for(var m in l.breakpoints)n.hide[m]="all"===a.data("hide")||e.inArray(m,i)>=0,h=h||n.hide[m];n.hasBreakpoint=h;var v=r.raise(s.columnData,{column:{data:n,th:t}});return v.column.data},r.getViewportWidth=function(){return window.innerWidth||(document.body?document.body.offsetWidth:0)},r.calculateWidth=function(e,t){return jQuery.isFunction(l.calculateWidthOverride)?l.calculateWidthOverride(e,t):(t.viewportWidthl;l++)if(o=r.breakpoints[l],o&&o.width&&a.width<=o.width){n=o;break}var d=null===n?"default":n.name,f=r.hasBreakpointColumn(d),p=t.data("breakpoint");t.data("breakpoint",d).removeClass("default breakpoint").removeClass(r.breakpointNames).addClass(d+(f?" breakpoint":"")),d!==p&&(t.trigger(u.redraw),r.raise(s.breakpoint,{breakpoint:d,info:a}))}r.raise(s.resized,{old:i,info:a})}},r.redraw=function(){r.addRowToggle(),r.bindToggleSelectors(),r.setColumnClasses();var t=e(r.table),a=t.data("breakpoint"),i=r.hasBreakpointColumn(a);t.find("> tbody > tr:not(."+d.detail+")").data("detail_created",!1).end().find("> thead > tr:last-child > th").each(function(){var i=r.columns[e(this).index()],o="",n=!0;e.each(i.matches,function(e,t){n||(o+=", ");var a=t+1;o+="> tbody > tr:not(."+d.detail+") > td:nth-child("+a+")",o+=", > tfoot > tr:not(."+d.detail+") > td:nth-child("+a+")",o+=", > colgroup > col:nth-child("+a+")",n=!1}),o+=', > thead > tr[data-group-row="true"] > th[data-group="'+i.group+'"]';var l=t.find(o).add(this);if(""!==a&&(i.hide[a]===!1?l.addClass("footable-visible").show():l.removeClass("footable-visible").hide()),1===t.find("> thead > tr.footable-group-row").length){var s=t.find('> thead > tr:last-child > th[data-group="'+i.group+'"]:visible, > thead > tr:last-child > th[data-group="'+i.group+'"]:visible'),u=t.find('> thead > tr.footable-group-row > th[data-group="'+i.group+'"], > thead > tr.footable-group-row > td[data-group="'+i.group+'"]'),f=0;e.each(s,function(){f+=parseInt(e(this).attr("colspan")||1,10)}),f>0?u.attr("colspan",f).show():u.hide()}}).end().find("> tbody > tr."+d.detailShow).each(function(){r.createOrUpdateDetailRow(this)}),t.find("[data-bind-name]").each(function(){r.toggleInput(this)}),t.find("> tbody > tr."+d.detailShow+":visible").each(function(){var t=e(this).next();t.hasClass(d.detail)&&(i?t.show():t.hide())}),t.find("> thead > tr > th.footable-last-column, > tbody > tr > td.footable-last-column").removeClass("footable-last-column"),t.find("> thead > tr > th.footable-first-column, > tbody > tr > td.footable-first-column").removeClass("footable-first-column"),t.find("> thead > tr, > tbody > tr").find("> th.footable-visible:last, > td.footable-visible:last").addClass("footable-last-column").end().find("> th.footable-visible:first, > td.footable-visible:first").addClass("footable-first-column"),r.raise(s.redrawn)},r.toggleDetail=function(t){var a=t.jquery?t:e(t),i=a.next();a.hasClass(d.detailShow)?(a.removeClass(d.detailShow),i.hasClass(d.detail)&&i.hide(),r.raise(s.rowCollapsed,{row:a[0]})):(r.createOrUpdateDetailRow(a[0]),a.addClass(d.detailShow).next().show(),r.raise(s.rowExpanded,{row:a[0]}))},r.removeRow=function(t){var a=t.jquery?t:e(t);a.hasClass(d.detail)&&(a=a.prev());var i=a.next();a.data("detail_created")===!0&&i.remove(),a.remove(),r.raise(s.rowRemoved)},r.appendRow=function(t){var a=t.jquery?t:e(t);e(r.table).find("tbody").append(a),r.redraw()},r.getColumnFromTdIndex=function(t){var a=null;for(var i in r.columns)if(e.inArray(t,r.columns[i].matches)>=0){a=r.columns[i];break}return a},r.createOrUpdateDetailRow=function(t){var a,i=e(t),o=i.next(),n=[];if(i.data("detail_created")===!0)return!0;if(i.is(":hidden"))return!1;if(r.raise(s.rowDetailUpdating,{row:i,detail:o}),i.find("> td:hidden").each(function(){var t=e(this).index(),a=r.getColumnFromTdIndex(t),i=a.name;if(a.ignore===!0)return!0;t in a.names&&(i=a.names[t]);var o=e(this).attr("data-bind-name");if(null!=o&&e(this).is(":empty")){var l=e("."+d.detailInnerValue+"["+'data-bind-value="'+o+'"]');e(this).html(e(l).contents().detach())}var s;return a.isEditable!==!1&&(a.isEditable||e(this).find(":input").length>0)&&(null==o&&(o="bind-"+e.now()+"-"+t,e(this).attr("data-bind-name",o)),s=e(this).contents().detach()),s||(s=e(this).contents().clone(!0,!0)),n.push({name:i,value:r.parse(this,a),display:s,group:a.group,groupName:a.groupName,bindName:o}),!0}),0===n.length)return!1;var u=i.find("> td:visible").length,f=o.hasClass(d.detail);return f||(o=e(''),i.after(o)),o.find("> td:first").attr("colspan",u),a=o.find("."+d.detailInner).empty(),l.createDetail(a,n,l.createGroupedDetail,l.detailSeparator,d),i.data("detail_created",!0),r.raise(s.rowDetailUpdated,{row:i,detail:o}),!f},r.raise=function(t,a){r.options.debug===!0&&e.isFunction(r.options.log)&&r.options.log(t,"event"),a=a||{};var i={ft:r};e.extend(!0,i,a);var o=e.Event(t,i);return o.ft||e.extend(!0,o,i),e(r.table).trigger(o),o},r.reset=function(){var t=e(r.table);t.removeData("footable_info").data("breakpoint","").removeClass(d.loading).removeClass(d.loaded),t.find(l.toggleSelector).unbind(u.toggleRow).unbind("click.footable"),t.find("> tbody > tr").removeClass(d.detailShow),t.find("> tbody > tr."+d.detail).remove(),r.raise(s.reset)},r.toggleInput=function(t){var a=e(t).attr("data-bind-name");if(null!=a){var i=e("."+d.detailInnerValue+"["+'data-bind-value="'+a+'"]');null!=i&&(e(t).is(":visible")?e(i).is(":empty")||e(t).html(e(i).contents().detach()):e(t).is(":empty")||e(i).html(e(t).contents().detach()))}},r.init(),r}t.footable={options:{delay:100,breakpoints:{phone:480,tablet:1024},parsers:{alpha:function(t){return e(t).data("value")||e.trim(e(t).text())},numeric:function(t){var a=e(t).data("value")||e(t).text().replace(/[^0-9.\-]/g,"");return a=parseFloat(a),isNaN(a)&&(a=0),a}},addRowToggle:!0,calculateWidthOverride:null,toggleSelector:" > tbody > tr:not(.footable-row-detail)",columnDataSelector:"> thead > tr:last-child > th, > thead > tr:last-child > td",detailSeparator:":",toggleHTMLElement:"",createGroupedDetail:function(e){for(var t={_none:{name:null,data:[]}},a=0;e.length>a;a++){var i=e[a].group;null!==i?(i in t||(t[i]={name:e[a].groupName||e[a].group,data:[]}),t[i].data.push(e[a])):t._none.data.push(e[a])}return t},createDetail:function(t,a,i,o,n){var r=i(a);for(var l in r)if(0!==r[l].data.length){"_none"!==l&&t.append('
'+r[l].name+"
");for(var d=0;r[l].data.length>d;d++){var s=r[l].data[d].name?o:"";t.append(e("
").addClass(n.detailInnerRow).append(e("
").addClass(n.detailInnerName).append(r[l].data[d].name+s)).append(e("
").addClass(n.detailInnerValue).attr("data-bind-value",r[l].data[d].bindName).append(r[l].data[d].display)))}}},classes:{main:"footable",loading:"footable-loading",loaded:"footable-loaded",toggle:"footable-toggle",disabled:"footable-disabled",detail:"footable-row-detail",detailCell:"footable-row-detail-cell",detailInner:"footable-row-detail-inner",detailInnerRow:"footable-row-detail-row",detailInnerGroup:"footable-row-detail-group",detailInnerName:"footable-row-detail-name",detailInnerValue:"footable-row-detail-value",detailShow:"footable-detail-show"},triggers:{initialize:"footable_initialize",resize:"footable_resize",redraw:"footable_redraw",toggleRow:"footable_toggle_row",expandFirstRow:"footable_expand_first_row",expandAll:"footable_expand_all",collapseAll:"footable_collapse_all"},events:{alreadyInitialized:"footable_already_initialized",initializing:"footable_initializing",initialized:"footable_initialized",resizing:"footable_resizing",resized:"footable_resized",redrawn:"footable_redrawn",breakpoint:"footable_breakpoint",columnData:"footable_column_data",rowDetailUpdating:"footable_row_detail_updating",rowDetailUpdated:"footable_row_detail_updated",rowCollapsed:"footable_row_collapsed",rowExpanded:"footable_row_expanded",rowRemoved:"footable_row_removed",reset:"footable_reset"},debug:!1,log:null},version:{major:0,minor:5,toString:function(){return t.footable.version.major+"."+t.footable.version.minor},parse:function(e){var t=/(\d+)\.?(\d+)?\.?(\d+)?/.exec(e);return{major:parseInt(t[1],10)||0,minor:parseInt(t[2],10)||0,patch:parseInt(t[3],10)||0}}},plugins:{_validate:function(a){if(!e.isFunction(a))return t.footable.options.debug===!0&&console.error('Validation failed, expected type "function", received type "{0}".',typeof a),!1;var i=new a;return"string"!=typeof i.name?(t.footable.options.debug===!0&&console.error('Validation failed, plugin does not implement a string property called "name".',i),!1):e.isFunction(i.init)?(t.footable.options.debug===!0&&console.log('Validation succeeded for plugin "'+i.name+'".',i),!0):(t.footable.options.debug===!0&&console.error('Validation failed, plugin "'+i.name+'" does not implement a function called "init".',i),!1)},registered:[],register:function(a,i){t.footable.plugins._validate(a)&&(t.footable.plugins.registered.push(a),"object"==typeof i&&e.extend(!0,t.footable.options,i))},load:function(e){var a,i,o=[];for(i=0;t.footable.plugins.registered.length>i;i++)try{a=t.footable.plugins.registered[i],o.push(new a(e))}catch(n){t.footable.options.debug===!0&&console.error(n)}return o},init:function(e){for(var a=0;e.plugins.length>a;a++)try{e.plugins[a].init(e)}catch(i){t.footable.options.debug===!0&&console.error(i)}}}};var o=0;e.fn.footable=function(a){a=a||{};var n=e.extend(!0,{},t.footable.options,a);return this.each(function(){o++;var t=new i(this,n,o);e(this).data("footable",t)})}})(jQuery,window); \ No newline at end of file diff --git a/media/footable/dist/footable.paginate.min.js b/media/footable/dist/footable.paginate.min.js deleted file mode 100644 index 2b1a87a..0000000 --- a/media/footable/dist/footable.paginate.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(e,t,undefined){function a(t){var a=e(t.table),i=a.data();this.pageNavigation=i.pageNavigation||t.options.pageNavigation,this.pageSize=i.pageSize||t.options.pageSize,this.firstText=i.firstText||t.options.firstText,this.previousText=i.previousText||t.options.previousText,this.nextText=i.nextText||t.options.nextText,this.lastText=i.lastText||t.options.lastText,this.limitNavigation=parseInt(i.limitNavigation||t.options.limitNavigation||o.limitNavigation,10),this.limitPreviousText=i.limitPreviousText||t.options.limitPreviousText,this.limitNextText=i.limitNextText||t.options.limitNextText,this.limit=this.limitNavigation>0,this.currentPage=i.currentPage||0,this.pages=[],this.control=!1}function i(){var t=this;t.name="Footable Paginate",t.init=function(a){if(a.options.paginate===!0){if(e(a.table).data("page")===!1)return;t.footable=a,e(a.table).unbind(".paging").bind({"footable_initialized.paging footable_row_removed.paging footable_redrawn.paging footable_sorted.paging footable_filtered.paging":function(){t.setupPaging()}}).data("footable-paging",t)}},t.setupPaging=function(){var i=t.footable,o=e(i.table).find("> tbody");i.pageInfo=new a(i),t.createPages(i,o),t.createNavigation(i,o),t.fillPage(i,o,i.pageInfo.currentPage)},t.createPages=function(t,a){var i=1,o=t.pageInfo,n=i*o.pageSize,r=[],l=[];o.pages=[];var d=a.find("> tr:not(.footable-filtered,.footable-row-detail)");d.each(function(e,t){r.push(t),e===n-1?(o.pages.push(r),i++,n=i*o.pageSize,r=[]):e>=d.length-d.length%o.pageSize&&l.push(t)}),l.length>0&&o.pages.push(l),o.currentPage>=o.pages.length&&(o.currentPage=o.pages.length-1),0>o.currentPage&&(o.currentPage=0),1===o.pages.length?e(t.table).addClass("no-paging"):e(t.table).removeClass("no-paging")},t.createNavigation=function(a){var i=e(a.table).find(a.pageInfo.pageNavigation);if(0===i.length){if(i=e(a.pageInfo.pageNavigation),i.parents("table:first").length>0&&i.parents("table:first")!==e(a.table))return;i.length>1&&a.options.debug===!0&&console.error("More than one pagination control was found!")}if(0!==i.length){i.is("ul")||(0===i.find("ul:first").length&&i.append("
    "),i=i.find("ul")),i.find("li").remove();var o=a.pageInfo;o.control=i,o.pages.length>0&&(i.append('
  • '+a.pageInfo.firstText+""),i.append('
  • '+a.pageInfo.previousText+"
  • "),o.limit&&i.append('
  • '+a.pageInfo.limitPreviousText+"
  • "),o.limit||e.each(o.pages,function(e,t){t.length>0&&i.append('
  • '+(e+1)+"
  • ")}),o.limit&&(i.append('
  • '+a.pageInfo.limitNextText+"
  • "),t.createLimited(i,o,0)),i.append('
  • '+a.pageInfo.nextText+"
  • "),i.append('
  • '+a.pageInfo.lastText+"
  • ")),i.off("click","a[data-page]").on("click","a[data-page]",function(n){n.preventDefault();var r=e(this).data("page"),l=o.currentPage;if("first"===r)l=0;else if("prev"===r)l>0&&l--;else if("next"===r)o.pages.length-1>l&&l++;else if("last"===r)l=o.pages.length-1;else if("limit-prev"===r){l=-1;var d=i.find(".footable-page:first a").data("page");t.createLimited(i,o,d-o.limitNavigation),t.setPagingClasses(i,o.currentPage,o.pages.length)}else if("limit-next"===r){l=-1;var s=i.find(".footable-page:last a").data("page");t.createLimited(i,o,s+1),t.setPagingClasses(i,o.currentPage,o.pages.length)}else l=r;if(l>=0){if(o.limit&&o.currentPage!=l){for(var f=l;0!==f%o.limitNavigation;)f-=1;t.createLimited(i,o,f)}t.paginate(a,l)}}),t.setPagingClasses(i,o.currentPage,o.pages.length)}},t.createLimited=function(e,t,a){a=a||0,e.find("li.footable-page").remove();var i,o,n=e.find('li.footable-page-arrow > a[data-page="limit-prev"]').parent(),r=e.find('li.footable-page-arrow > a[data-page="limit-next"]').parent();for(i=t.pages.length-1;i>=0;i--)o=t.pages[i],i>=a&&a+t.limitNavigation>i&&o.length>0&&n.after('
  • '+(i+1)+"
  • ");0===a?n.hide():n.show(),a+t.limitNavigation>=t.pages.length?r.hide():r.show()},t.paginate=function(a,i){var o=a.pageInfo;if(o.currentPage!==i){var n=e(a.table).find("> tbody"),r=a.raise("footable_paging",{page:i,size:o.pageSize});if(r&&r.result===!1)return;t.fillPage(a,n,i),o.control.find("li").removeClass("active disabled"),t.setPagingClasses(o.control,o.currentPage,o.pages.length)}},t.setPagingClasses=function(e,t,a){e.find("li.footable-page > a[data-page="+t+"]").parent().addClass("active"),t>=a-1&&(e.find('li.footable-page-arrow > a[data-page="next"]').parent().addClass("disabled"),e.find('li.footable-page-arrow > a[data-page="last"]').parent().addClass("disabled")),1>t&&(e.find('li.footable-page-arrow > a[data-page="first"]').parent().addClass("disabled"),e.find('li.footable-page-arrow > a[data-page="prev"]').parent().addClass("disabled"))},t.fillPage=function(a,i,o){a.pageInfo.currentPage=o,e(a.table).data("currentPage",o),i.find("> tr").hide(),e(a.pageInfo.pages[o]).each(function(){t.showRow(this,a)}),a.raise("footable_page_filled")},t.showRow=function(t,a){var i=e(t),o=i.next(),n=e(a.table);n.hasClass("breakpoint")&&i.hasClass("footable-detail-show")&&o.hasClass("footable-row-detail")?(i.add(o).show(),a.createOrUpdateDetailRow(t)):i.show()}}if(t.footable===undefined||null===t.footable)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var o={paginate:!0,pageSize:10,pageNavigation:".pagination",firstText:"«",previousText:"‹",nextText:"›",lastText:"»",limitNavigation:0,limitPreviousText:"...",limitNextText:"..."};t.footable.plugins.register(i,o)})(jQuery,window); \ No newline at end of file diff --git a/media/footable/dist/footable.sort.min.js b/media/footable/dist/footable.sort.min.js deleted file mode 100644 index 917793d..0000000 --- a/media/footable/dist/footable.sort.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(t,e,undefined){function a(){var e=this;e.name="Footable Sortable",e.init=function(a){e.footable=a,a.options.sort===!0&&t(a.table).unbind(".sorting").bind({"footable_initialized.sorting":function(){var i,o,n=t(a.table),r=(n.find("> tbody"),a.options.classes.sort);if(n.data("sort")!==!1){n.find("> thead > tr:last-child > th, > thead > tr:last-child > td").each(function(){var e=t(this),i=a.columns[e.index()];i.sort.ignore===!0||e.hasClass(r.sortable)||(e.addClass(r.sortable),t("").addClass(r.indicator).appendTo(e))}),n.find("> thead > tr:last-child > th."+r.sortable+", > thead > tr:last-child > td."+r.sortable).unbind("click.footable").bind("click.footable",function(a){a.preventDefault(),o=t(this);var i=!o.hasClass(r.sorted);return e.doSort(o.index(),i),!1});var l=!1;for(var s in a.columns)if(i=a.columns[s],i.sort.initial){var d="descending"!==i.sort.initial;e.doSort(i.index,d);break}l&&a.bindToggleSelectors()}},"footable_redrawn.sorting":function(){var i=t(a.table),o=a.options.classes.sort;i.data("sorted")>=0&&i.find("> thead > tr:last-child > th").each(function(a){var i=t(this);return i.hasClass(o.sorted)||i.hasClass(o.descending)?(e.doSort(a),undefined):undefined})},"footable_column_data.sorting":function(e){var a=t(e.column.th);e.column.data.sort=e.column.data.sort||{},e.column.data.sort.initial=a.data("sort-initial")||!1,e.column.data.sort.ignore=a.data("sort-ignore")||!1,e.column.data.sort.selector=a.data("sort-selector")||null;var i=a.data("sort-match")||0;i>=e.column.data.matches.length&&(i=0),e.column.data.sort.match=e.column.data.matches[i]}}).data("footable-sort",e)},e.doSort=function(a,i){var o=e.footable;if(t(o.table).data("sort")!==!1){var n=t(o.table),r=n.find("> tbody"),l=o.columns[a],s=n.find("> thead > tr:last-child > th:eq("+a+")"),d=o.options.classes.sort,f=o.options.events.sort;if(i=i===undefined?s.hasClass(d.sorted):"toggle"===i?!s.hasClass(d.sorted):i,l.sort.ignore===!0)return!0;var u=o.raise(f.sorting,{column:l,direction:i?"ASC":"DESC"});u&&u.result===!1||(n.data("sorted",l.index),n.find("> thead > tr:last-child > th, > thead > tr:last-child > td").not(s).removeClass(d.sorted+" "+d.descending),i===undefined&&(i=s.hasClass(d.sorted)),i?s.removeClass(d.descending).addClass(d.sorted):s.removeClass(d.sorted).addClass(d.descending),e.sort(o,r,l,i),o.bindToggleSelectors(),o.raise(f.sorted,{column:l,direction:i?"ASC":"DESC"}))}},e.rows=function(e,a,i){var o=[];return a.find("> tr").each(function(){var a=t(this),n=null;if(a.hasClass(e.options.classes.detail))return!0;a.next().hasClass(e.options.classes.detail)&&(n=a.next().get(0));var r={row:a,detail:n};return i!==undefined&&(r.value=e.parse(this.cells[i.sort.match],i)),o.push(r),!0}).detach(),o},e.sort=function(t,a,i,o){var n=e.rows(t,a,i),r=t.options.sorters[i.type]||t.options.sorters.alpha;n.sort(function(t,e){return o?r(t.value,e.value):r(e.value,t.value)});for(var l=0;n.length>l;l++)a.append(n[l].row),null!==n[l].detail&&a.append(n[l].detail)}}if(e.footable===undefined||null===e.footable)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var i={sort:!0,sorters:{alpha:function(t,e){return"string"==typeof t&&(t=t.toLowerCase()),"string"==typeof e&&(e=e.toLowerCase()),t===e?0:e>t?-1:1},numeric:function(t,e){return t-e}},classes:{sort:{sortable:"footable-sortable",sorted:"footable-sorted",descending:"footable-sorted-desc",indicator:"footable-sort-indicator"}},events:{sort:{sorting:"footable_sorting",sorted:"footable_sorted"}}};e.footable.plugins.register(a,i)})(jQuery,window); \ No newline at end of file diff --git a/media/footable/dist/footable.striping.min.js b/media/footable/dist/footable.striping.min.js deleted file mode 100644 index 01161dd..0000000 --- a/media/footable/dist/footable.striping.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(t,e,undefined){function a(){var e=this;e.name="Footable Striping",e.init=function(a){e.footable=a,t(a.table).unbind("striping").bind({"footable_initialized.striping footable_row_removed.striping footable_redrawn.striping footable_sorted.striping footable_filtered.striping":function(){t(this).data("striping")!==!1&&e.setupStriping(a)}})},e.setupStriping=function(e){var a=0;t(e.table).find("> tbody > tr:not(.footable-row-detail)").each(function(){var i=t(this);i.removeClass(e.options.classes.striping.even).removeClass(e.options.classes.striping.odd),0===a%2?i.addClass(e.options.classes.striping.even):i.addClass(e.options.classes.striping.odd),a++})}}if(e.footable===undefined||null===e.foobox)throw Error("Please check and make sure footable.js is included in the page and is loaded prior to this script.");var i={striping:{enabled:!0},classes:{striping:{odd:"footable-odd",even:"footable-even"}}};e.footable.plugins.register(a,i)})(jQuery,window); \ No newline at end of file diff --git a/media/footable/icomoon/footable.json b/media/footable/icomoon/footable.json deleted file mode 100644 index dda6138..0000000 --- a/media/footable/icomoon/footable.json +++ /dev/null @@ -1 +0,0 @@ -{"share":"6", "iconsVersion":"1.5", "icomoon":{"selected":[{"idx":"488","unicode":"e000"},{"idx":"489","unicode":"e001"},{"idx":"511","unicode":"e002"},{"idx":"509","unicode":"e003"},{"idx":"512","unicode":"e004"},{"idx":"510","unicode":"e005"},{"idx":"780","unicode":"e006"},{"idx":"779","unicode":"e007"},{"idx":"802","unicode":"e008"},{"idx":"284","unicode":"e009"},{"idx":"397","unicode":"e00a"},{"idx":"393","unicode":"e00b"},{"idx":"391","unicode":"e00c"},{"idx":"395","unicode":"e00d"},{"idx":"430","unicode":"e00e"},{"idx":"428","unicode":"e00f"},{"idx":"427","unicode":"e010"},{"idx":"429","unicode":"e011"},{"idx":"838","unicode":"e012"},{"idx":"839","unicode":"e013"},{"idx":"837","unicode":"e014"},{"idx":"836","unicode":"e015"},{"idx":"346","unicode":"e016"},{"idx":"344","unicode":"e017"},{"idx":"343","unicode":"e018"},{"idx":"345","unicode":"e019"},{"idx":"405","unicode":"e01a"},{"idx":"401","unicode":"e01b"},{"idx":"399","unicode":"e01c"},{"idx":"403","unicode":"e01d"},{"idx":"795","unicode":"e01e"},{"idx":"794","unicode":"e01f"},{"idx":"797","unicode":"e020"},{"idx":"796","unicode":"e021"},{"idx":"834","unicode":"e022"}],"customIcons":[{"metadata":{"id":"fontawesome","name":"Font Awesome","link":"http://fortawesome.github.com/Font-Awesome/","grid":"14","author":"Dave Gandy","authorLink":"https://github.com/davegandy","license":"SIL","licenseLink":"http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL","defaultunicode":true},"svgs":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"metadata":{"id":"icomoon-ultimate","name":"IcoMoon - Ultimate","link":"http://icomoon.io/#icons","grid":"16","author":"Keyamoon","authorLink":"http://keyamoon.com/","license":"Royalty Free","licenseLink":"http://icomoon.io/#icons#license","defaultunicode":false},"svgs":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]},{"metadata":{"id":"whhglyphs","name":"WebHostingHub Glyphs","link":"http://www.webhostinghub.com/glyphs/","grid":"16","author":"WebHostingHub","authorLink":"http://www.webhostinghub.com","license":"CC BY 3.0","licenseLink":"http://creativecommons.org/licenses/by/3.0/","defaultunicode":true},"svgs":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]}],"IDs":[219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885],"user":{"email":"bradvin@gmail.com","newsletter":true,"secret":"3d0d429f221caf894108d146c0010f1a4b4904abf43f75d76f59d6fc480fc322c1515c3628389d9dae32700ecfa09e1f499597ad3f957314a2fd306e9f39fc1c","uid":10966}},"inputCache":"{\"baseline\":\"6.25\",\"emSize\":\"512\",\"prev_size\":\"16\",\"hdr-imported\":\"checked\",\"iconAlignment\":\"0\",\"showGrid\":\"checked\",\"fi_name\":\"footable\",\"fi_id\":\"\",\"fi_link\":\"\",\"fi_author\":\"\",\"fi_authorLink\":\"\",\"fi_license\":\"\",\"fi_licenseLink\":\"\",\"include_metadata\":false,\"base64\":true,\"img-height\":\"32\",\"img-color\":\"000000\",\"include_png\":\"checked\",\"fi_class\":\"icon-\",\"showCloudLinks\":false,\"sprites-cols\":\"16\",\"ligatures\":false,\"include_sprites\":false,\"designGrid\":\"\",\"whitespace\":\"50\",\"glyph_widths\":\"100\",\"manualMetrics\":false,\"hdr-fontawesome\":true,\"hdr-icomoon-ultimate\":true,\"hdr-whhglyphs\":true}"} \ No newline at end of file diff --git a/media/footable/js/.jshintrc b/media/footable/js/.jshintrc deleted file mode 100644 index 6d98f86..0000000 --- a/media/footable/js/.jshintrc +++ /dev/null @@ -1,29 +0,0 @@ -{ - "curly": false, - "eqeqeq": false, - "forin": false, - "indent": false, - "newcap": false, - "plusplus": false, - "quotmark": false, - "undef": false, - "unused": false, - "strict": false, - "trailing": false, - "maxparams": false, - "maxdepth": false, - "maxstatements": false, - "maxcomplexity": false, - "maxlen": false, - - "eqnull": true, - "loopfunc": true, - "smarttabs": true, - "sub": true, - - "browser": true, - "jquery": true, - "node": true, - - "white": false -} \ No newline at end of file diff --git a/media/footable/js/footable.bookmarkable.js b/media/footable/js/footable.bookmarkable.js deleted file mode 100644 index 0765cbf..0000000 --- a/media/footable/js/footable.bookmarkable.js +++ /dev/null @@ -1,170 +0,0 @@ -(function ($, w, undefined) { - if (w.footable === undefined || w.foobox === null) - throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.'); - - var defaults = { - bookmarkable: { - enabled: false - } - }; - - // see http://www.onlineaspect.com/2009/06/10/reading-get-variables-with-javascript/ - function $_HASH(q,s) { - s = s ? s : location.hash; - var re = new RegExp('&'+q+'(?:=([^&]*))?(?=&|$)','i'); - return (s=s.replace(/^\#/,'&').match(re)) ? (typeof s[1] == 'undefined' ? '' : decodeURIComponent(s[1])) : undefined; - } - - function addFootableStatusData(ft, event) { - var tbl_total = $(ft.table).find("tbody").find("tr:not(.footable-row-detail, .footable-filtered)").length; - $(ft.table).data("status_num_total", tbl_total); - - var tbl_num = $(ft.table).find("tbody").find("tr:not(.footable-row-detail)").filter(":visible").length; - $(ft.table).data("status_num_shown", tbl_num); - - var sort_colnum = $(ft.table).data("sorted"); - var sort_col = $(ft.table).find("th")[sort_colnum]; - var descending = $(sort_col).hasClass("footable-sorted-desc"); - $(ft.table).data("status_descending", descending); - - if (ft.pageInfo) { - var pagenum = ft.pageInfo.currentPage; - $(ft.table).data("status_pagenum", pagenum); - } - - var filter_val = ''; - var filter_field_id = $(ft.table).data('filter'); - if ( $(filter_field_id).length ) { - filter_val = $(filter_field_id).val(); - } - - $(ft.table).data("status_filter_val", filter_val); - - // manage expanded or collapsed rows: - var row, rowlist, expanded_rows; - if (event.type == 'footable_row_expanded') { - row = event.row; - if (row) { - rowlist = $(ft.table).data('expanded_rows'); - expanded_rows = []; - if (rowlist) { - expanded_rows = rowlist.split(','); - } - expanded_rows.push(row.rowIndex); - $(ft.table).data('expanded_rows', expanded_rows.join(',')); - } - } - if (event.type == 'footable_row_collapsed') { - row = event.row; - if (row) { - rowlist = $(ft.table).data('expanded_rows'); - expanded_rows = []; - if (rowlist) { - expanded_rows = rowlist.split(','); - } - var new_expanded_rows = []; - for (var i in expanded_rows) { - if (expanded_rows[i] == row.rowIndex) { - new_expanded_rows = expanded_rows.splice(i, 1); - break; - } - } - $(ft.table).data('expanded_rows', new_expanded_rows.join(',')); - } - } - } - - function Bookmarkable() { - var p = this; - p.name = 'Footable LucidBookmarkable'; - p.init = function(ft) { - if (ft.options.bookmarkable.enabled) { - - $(ft.table).bind({ - 'footable_initialized': function(){ - var tbl_id = ft.table.id; - var q_filter = $_HASH(tbl_id + '_f'); - var q_page_num = $_HASH(tbl_id + '_p'); - var q_sorted = $_HASH(tbl_id + '_s'); - var q_desc = $_HASH(tbl_id + '_d'); - var q_expanded = $_HASH(tbl_id + '_e'); - - if (q_filter) { - var filter_field_id = $(ft.table).data('filter'); - $(filter_field_id).val(q_filter); - $(ft.table).trigger('footable_filter', {filter: q_filter}); - } - if (q_page_num) { - $(ft.table).data('currentPage', q_page_num); - // we'll check for sort before triggering pagination, since - // sorting triggers pagination. - } - if (typeof q_sorted !== 'undefined') { - var footableSort = $(ft.table).data('footable-sort'); - var ascending = true; - if (q_desc == 'true') { - ascending = false; - } - footableSort.doSort(q_sorted, ascending); - } - else { - $(ft.table).trigger('footable_setup_paging'); - } - if (q_expanded) { - var expanded_rows = q_expanded.split(','); - for (var i in expanded_rows) { - var row = $(ft.table.rows[expanded_rows[i]]); - row.find('> td:first').trigger('footable_toggle_row'); - } - } - ft.lucid_bookmark_read = true; - }, - 'footable_page_filled footable_redrawn footable_filtered footable_sorted footable_row_expanded footable_row_collapsed': function(e) { - addFootableStatusData(ft, e); - - // update the URL hash - // lucid_bookmark_read guards against running this logic before - // the "first read" of the location bookmark hash. - if (ft.lucid_bookmark_read) { - var tbl_id = ft.table.id; - var filter = tbl_id + '_f'; - var page_num = tbl_id + '_p'; - var sorted = tbl_id + '_s'; - var descending = tbl_id + '_d'; - var expanded = tbl_id + '_e'; - - var hash = location.hash.replace(/^\#/, '&'); - var hashkeys = [filter, page_num, sorted, descending, expanded]; - // trim existing elements out of the hash. - for (var i in hashkeys) { - var re = new RegExp('&' + hashkeys[i]+'=([^&]*)', 'g'); - hash = hash.replace(re, ''); - } - - var foostate = {}; - foostate[filter] = $(ft.table).data('status_filter_val'); - foostate[page_num] = $(ft.table).data('status_pagenum'); - foostate[sorted] = $(ft.table).data('sorted'); - foostate[descending] = $(ft.table).data('status_descending'); - foostate[expanded] = $(ft.table).data('expanded_rows'); - - var pairs = []; - for (var elt in foostate) { - if (foostate[elt] !== undefined) { - pairs.push(elt + '=' + encodeURIComponent(foostate[elt])); - } - } - if (hash.length) { - pairs.push(hash); - } - location.hash = pairs.join('&'); - } - } - }); - } - }; - } - - w.footable.plugins.register(Bookmarkable, defaults); - -})(jQuery, window); diff --git a/media/footable/js/footable.filter.js b/media/footable/js/footable.filter.js deleted file mode 100644 index 718dd7f..0000000 --- a/media/footable/js/footable.filter.js +++ /dev/null @@ -1,143 +0,0 @@ -(function ($, w, undefined) { - if (w.footable === undefined || w.footable === null) - throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.'); - - var defaults = { - filter: { - enabled: true, - input: '.footable-filter', - timeout: 300, - minimum: 2, - disableEnter: false, - filterFunction: function(index) { - var $t = $(this), - $table = $t.parents('table:first'), - filter = $table.data('current-filter').toUpperCase(), - text = $t.find('td').text(); - if (!$table.data('filter-text-only')) { - $t.find('td[data-value]').each(function () { - text += $(this).data('value'); - }); - } - return text.toUpperCase().indexOf(filter) >= 0; - } - } - }; - - function Filter() { - var p = this; - p.name = 'Footable Filter'; - p.init = function (ft) { - p.footable = ft; - if (ft.options.filter.enabled === true) { - if ($(ft.table).data('filter') === false) return; - ft.timers.register('filter'); - $(ft.table) - .unbind('.filtering') - .bind({ - 'footable_initialized.filtering': function (e) { - var $table = $(ft.table); - var data = { - 'input': $table.data('filter') || ft.options.filter.input, - 'timeout': $table.data('filter-timeout') || ft.options.filter.timeout, - 'minimum': $table.data('filter-minimum') || ft.options.filter.minimum, - 'disableEnter': $table.data('filter-disable-enter') || ft.options.filter.disableEnter - }; - if (data.disableEnter) { - $(data.input).keypress(function (event) { - if (window.event) - return (window.event.keyCode !== 13); - else - return (event.which !== 13); - }); - } - $table.bind('footable_clear_filter', function () { - $(data.input).val(''); - p.clearFilter(); - }); - $table.bind('footable_filter', function (event, args) { - p.filter(args.filter); - }); - $(data.input).keyup(function (eve) { - ft.timers.filter.stop(); - if (eve.which === 27) { - $(data.input).val(''); - } - ft.timers.filter.start(function () { - var val = $(data.input).val() || ''; - p.filter(val); - }, data.timeout); - }); - }, - 'footable_redrawn.filtering': function (e) { - var $table = $(ft.table), - filter = $table.data('filter-string'); - if (filter) { - p.filter(filter); - } - } - }) - //save the filter object onto the table so we can access it later - .data('footable-filter', p); - } - }; - - p.filter = function (filterString) { - var ft = p.footable, - $table = $(ft.table), - minimum = $table.data('filter-minimum') || ft.options.filter.minimum, - clear = !filterString; - - //raise a pre-filter event so that we can cancel the filtering if needed - var event = ft.raise('footable_filtering', { filter: filterString, clear: clear }); - if (event && event.result === false) return; - if (event.filter && event.filter.length < minimum) { - return; //if we do not have the minimum chars then do nothing - } - - if (event.clear) { - p.clearFilter(); - } else { - var filters = event.filter.split(' '); - - $table.find('> tbody > tr').hide().addClass('footable-filtered'); - var rows = $table.find('> tbody > tr:not(.footable-row-detail)'); - $.each(filters, function (i, f) { - if (f && f.length > 0) { - $table.data('current-filter', f); - rows = rows.filter(ft.options.filter.filterFunction); - } - }); - rows.each(function () { - p.showRow(this, ft); - $(this).removeClass('footable-filtered'); - }); - $table.data('filter-string', event.filter); - ft.raise('footable_filtered', { filter: event.filter, clear: false }); - } - }; - - p.clearFilter = function () { - var ft = p.footable, - $table = $(ft.table); - - $table.find('> tbody > tr:not(.footable-row-detail)').removeClass('footable-filtered').each(function () { - p.showRow(this, ft); - }); - $table.removeData('filter-string'); - ft.raise('footable_filtered', { clear: true }); - }; - - p.showRow = function (row, ft) { - var $row = $(row), $next = $row.next(), $table = $(ft.table); - if ($table.hasClass('breakpoint') && $row.hasClass('footable-detail-show') && $next.hasClass('footable-row-detail')) { - $row.add($next).show(); - ft.createOrUpdateDetailRow(row); - } - else $row.show(); - }; - } - - w.footable.plugins.register(Filter, defaults); - -})(jQuery, window); diff --git a/media/footable/js/footable.grid.js b/media/footable/js/footable.grid.js deleted file mode 100644 index 6f6d960..0000000 --- a/media/footable/js/footable.grid.js +++ /dev/null @@ -1,373 +0,0 @@ -(function($, w, undefined) { - if (w.footable === undefined || w.foobox === null) throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.'); - var defaults = { - grid: { - enabled: true, - data: null, - template: null, //row html template, use for make a row. - cols: null, //column define - items: null, //data items - url: null, //get data from url - ajax: null, //paramater for $.ajax - activeClass: 'active', //add to row selected - multiSelect: false, //allow select multiple row - showIndex: false, //show row index - showCheckbox: false, //show checkbox for select - showEmptyInfo: false, //when that is not data in table, show a info to notify user - emptyInfo: '

    No Data

    ', - pagination: { - "page-size": 20, - "pagination-class": "pagination pagination-centered" - }, - indexFormatter: function(val, $td, index) { - return index + 1; - }, - checkboxFormatter: function(isTop) { - return ''; - }, - events: { - loaded: 'footable_grid_loaded', - created: 'footable_grid_created', - removed: 'footable_grid_removed', - updated: 'footable_grid_updated' - } - } - }; - - function makeTh(col) { - var $th = $('
'); - if ($.isPlainObject(col.data)) { - $th.data(col.data); - } - if ($.isPlainObject(col.style)) { - $th.css(col.style); - } - if (col.className) { - $th.addClass(col.className); - } - return $th; - } - - function initThead($table, options) { - var $thead = $table.find('thead'); - if ($thead.size() === 0) { - $thead = $('').appendTo($table); - } - var $row = $('').appendTo($thead); - for (var i = 0, len = options.cols.length; i < len; i++) { - $row.append(makeTh(options.cols[i])); - } - } - - function initTBody($table) { - var $tbody = $table.find('tbody'); - if ($tbody.size() === 0) { - $tbody = $('').appendTo($table); - } - } - - function initPagination($table, cols, options) { - if (options) { - $table.attr("data-page-size", options['page-size']); - var $tfoot = $table.find('tfoot'); - if ($tfoot.size() === 0) { - $tfoot = $('').appendTo($table); - } - $tfoot.append(''); - var $pagination = $("
").appendTo($tfoot.find("tr:last-child td")); - $pagination.addClass(options['pagination-class']); - } - } - - function setToggleColumn(cols) { - var toggleColumn = cols[0]; - for (var i = 0, len = cols.length; i < len; i++) { - var col = cols[i]; - if (col.data && (col.data.toggle === true || col.data.toggle === "true")) { - return; - } - } - toggleColumn.data = $.extend(toggleColumn.data, { - toggle: true - }); - } - - function makeEmptyInfo($table, cols, emptyInfo) { - if ($table.find("tr.emptyInfo").size() === 0) { - $table.find('tbody').append('
'); - } - } - - function updateRowIndex($tbody, $newRow, detailClass, offset) { - //update rows index - $tbody.find('tr:not(.' + detailClass + ')').each(function() { - var $row = $(this), - index = $newRow.data('index'), - oldIndex = parseInt($row.data('index'), 0), - newIndex = oldIndex + offset; - if (oldIndex >= index && this !== $newRow.get(0)) { - $row.attr('data-index', newIndex).data('index', newIndex); - } - }); - } - - function Grid() { - var grid = this; - grid.name = 'Footable Grid'; - grid.init = function(ft) { - var toggleClass = ft.options.classes.toggle; - var detailClass = ft.options.classes.detail; - var options = ft.options.grid; - if (!options.cols) return; - grid.footable = ft; - var $table = $(ft.table); - $table.data('grid', grid); - if ($.isPlainObject(options.data)) { - $table.data(options.data); - } - grid._items = []; - setToggleColumn(options.cols); - if (options.showCheckbox) { - options.multiSelect = true; - options.cols.unshift({ - title: options.checkboxFormatter(true), - name: '', - data: { - "sort-ignore": true - }, - formatter: options.checkboxFormatter - }); - } - if (options.showIndex) { - options.cols.unshift({ - title: '#', - name: 'index', - data: { - "sort-ignore": true - }, - formatter: options.indexFormatter - }); - } - initThead($table, options); - initTBody($table); - initPagination($table, options.cols, options.pagination); - $table.off('.grid').on({ - 'footable_initialized.grid': function(e) { - if (options.url || options.ajax) { - $.ajax(options.ajax || { - url: options.url - }).then(function(resp) { - grid.newItem(resp); - ft.raise(options.events.loaded); - }, function(jqXHR) { - throw 'load data from ' + (options.url || options.ajax.url) + ' fail'; - }); - } else { - grid.newItem(options.items || []); - ft.raise(options.events.loaded); - } - }, - 'footable_sorted.grid footable_grid_created.grid footable_grid_removed.grid': function(event) { - if (options.showIndex && grid.getItem().length > 0) { - $table.find('tbody tr:not(.' + detailClass + ')').each(function(index) { - var $td = $(this).find('td:first'); - $td.html(options.indexFormatter(null, $td, index)); - }); - } - }, - 'footable_redrawn.grid footable_row_removed.grid': function(event) { - if (grid.getItem().length === 0 && options.showEmptyInfo) { - makeEmptyInfo($table, options.cols, options.emptyInfo); - } - } - }).on({ - 'click.grid': function(event) { - if ($(event.target).closest('td').find('>.' + toggleClass).size() > 0) { - return true; - } - var $tr = $(event.currentTarget); - if ($tr.hasClass(detailClass)) { - return true; - } - if (!options.multiSelect && !$tr.hasClass(options.activeClass)) { - $table.find('tbody tr.' + options.activeClass).removeClass(options.activeClass); - } - $tr.toggleClass(options.activeClass); - if (options.showCheckbox) { - $tr.find('input:checkbox.check').prop('checked', function(index, val) { - if (event.target === this) { - return val; - } - return !val; - }); - } - ft.toggleDetail($tr); - } - }, 'tbody tr').on('click.grid', 'thead input:checkbox.checkAll', function(event) { - var checked = !! event.currentTarget.checked; - if (checked) { - $table.find('tbody tr').addClass(options.activeClass); - } else { - $table.find('tbody tr').removeClass(options.activeClass); - } - $table.find('tbody input:checkbox.check').prop('checked', checked); - }); - }; - /** - * get selected rows index; - */ - grid.getSelected = function() { - var options = grid.footable.options.grid, - $selected = $(grid.footable.table).find('tbody>tr.' + options.activeClass); - return $selected.map(function() { - return $(this).data('index'); - }); - }; - /** - * get row's data by index - */ - grid.getItem = function(index) { - if (index !== undefined) { - if ($.isArray(index)) { - return $.map(index, function(item) { - return grid._items[item]; - }); - } - return grid._items[index]; - } - return grid._items; - }; - - function makeCell(col, value, index) { - var $td = $(''); - for (var i = 0, len = options.cols.length; i < len; i++) { - var col = options.cols[i]; - $row.append(makeCell(col, item[col.name] || '', index)); - } - } - $row.attr('data-index', index); - return $row; - }; - /** - * create rows by js object - */ - grid.newItem = function(item, index, wait) { - var $tbody = $(grid.footable.table).find('tbody'); - var detailClass = grid.footable.options.classes.detail; - $tbody.find('tr.emptyInfo').remove(); - if ($.isArray(item)) { - for (var atom; - (atom = item.pop());) { - grid.newItem(atom, index, true); - } - grid.footable.redraw(); - grid.footable.raise(grid.footable.options.grid.events.created, { - item: item, - index: index - }); - return; - } - if (!$.isPlainObject(item)) { - return; - } - var $tr, len = grid._items.length; - if (index === undefined || index < 0 || index > len) { - $tr = grid._makeRow(item, len++); - grid._items.push(item); - $tbody.append($tr); - } else { - $tr = grid._makeRow(item, index); - if (index === 0) { - grid._items.unshift(item); - $tbody.prepend($tr); - } else { - var $before = $tbody.find('tr[data-index=' + (index - 1) + ']'); - grid._items.splice(index, 0, item); - if ($before.data('detail_created') === true) { - $before = $before.next(); - } - $before.after($tr); - } - updateRowIndex($tbody, $tr, detailClass, 1); - } - if (!wait) { - grid.footable.redraw(); - grid.footable.raise(grid.footable.options.grid.events.created, { - item: item, - index: index - }); - } - }; - /** - * update row by js object - */ - grid.setItem = function(item, index) { - if (!$.isPlainObject(item)) { - return; - } - var $tbody = $(grid.footable.table).find('tbody'), - $newTr = grid._makeRow(item, index); - $.extend(grid._items[index], item); - var $tr = $tbody.find('tr').eq(index); - $tr.html($newTr.html()); - grid.footable.redraw(); - grid.footable.raise(grid.footable.options.grid.events.updated, { - item: item, - index: index - }); - }; - /** - * remove rows by index - */ - grid.removeItem = function(index) { - var $tbody = $(grid.footable.table).find('tbody'); - var detailClass = grid.footable.options.classes.detail; - var result = []; - if ($.isArray(index)) { - for (var i; - (i = index.pop());) { - result.push(grid.removeItem(i)); - } - grid.footable.raise(grid.footable.options.grid.events.removed, { - item: result, - index: index - }); - return result; - } - if (index === undefined) { - $tbody.find('tr').each(function() { - result.push(grid._items.shift()); - grid.footable.removeRow(this); - }); - } else { - var $tr = $tbody.find('tr[data-index=' + index + ']'); - result = grid._items.splice(index, 1)[0]; - grid.footable.removeRow($tr); - //update rows index - updateRowIndex($tbody, $tr, detailClass, -1); - } - grid.footable.raise(grid.footable.options.grid.events.removed, { - item: result, - index: index - }); - return result; - }; - } - w.footable.plugins.register(Grid, defaults); -})(jQuery, window); diff --git a/media/footable/js/footable.js b/media/footable/js/footable.js deleted file mode 100644 index 234e4f4..0000000 --- a/media/footable/js/footable.js +++ /dev/null @@ -1,824 +0,0 @@ -/*! - * FooTable - Awesome Responsive Tables - * Version : 2.0.3 - * http://fooplugins.com/plugins/footable-jquery/ - * - * Requires jQuery - http://jquery.com/ - * - * Copyright 2014 Steven Usher & Brad Vincent - * Released under the MIT license - * You are free to use FooTable in commercial projects as long as this copyright header is left intact. - * - * Date: 11 Nov 2014 - */ -(function ($, w, undefined) { - w.footable = { - options: { - delay: 100, // The number of millseconds to wait before triggering the react event - breakpoints: { // The different screen resolution breakpoints - phone: 480, - tablet: 1024 - }, - parsers: { // The default parser to parse the value out of a cell (values are used in building up row detail) - alpha: function (cell) { - return $(cell).data('value') || $.trim($(cell).text()); - }, - numeric: function (cell) { - var val = $(cell).data('value') || $(cell).text().replace(/[^0-9.\-]/g, ''); - val = parseFloat(val); - if (isNaN(val)) val = 0; - return val; - } - }, - addRowToggle: true, - calculateWidthOverride: null, - toggleSelector: ' > tbody > tr:not(.footable-row-detail)', //the selector to show/hide the detail row - columnDataSelector: '> thead > tr:last-child > th, > thead > tr:last-child > td', //the selector used to find the column data in the thead - detailSeparator: ':', //the separator character used when building up the detail row - toggleHTMLElement: '', // override this if you want to insert a click target rather than use a background image. - createGroupedDetail: function (data) { - var groups = { '_none': { 'name': null, 'data': [] } }; - for (var i = 0; i < data.length; i++) { - var groupid = data[i].group; - if (groupid !== null) { - if (!(groupid in groups)) - groups[groupid] = { 'name': data[i].groupName || data[i].group, 'data': [] }; - - groups[groupid].data.push(data[i]); - } else { - groups._none.data.push(data[i]); - } - } - return groups; - }, - createDetail: function (element, data, createGroupedDetail, separatorChar, classes) { - /// This function is used by FooTable to generate the detail view seen when expanding a collapsed row. - /// This is the div that contains all the detail row information, anything could be added to it. - /// - /// This is an array of objects containing the cell information for the current row. - /// These objects look like the below: - /// obj = { - /// 'name': String, // The name of the column - /// 'value': Object, // The value parsed from the cell using the parsers. This could be a string, a number or whatever the parser outputs. - /// 'display': String, // This is the actual HTML from the cell, so if you have images etc you want moved this is the one to use and is the default value used. - /// 'group': String, // This is the identifier used in the data-group attribute of the column. - /// 'groupName': String // This is the actual name of the group the column belongs to. - /// } - /// - /// The grouping function to group the data - /// The separator charactor used - /// The array of class names used to build up the detail row - - var groups = createGroupedDetail(data); - for (var group in groups) { - if (groups[group].data.length === 0) continue; - if (group !== '_none') element.append('
' + groups[group].name + '
'); - - for (var j = 0; j < groups[group].data.length; j++) { - var separator = (groups[group].data[j].name) ? separatorChar : ''; - element.append($('
').addClass(classes.detailInnerRow).append($('
').addClass(classes.detailInnerName) - .append(groups[group].data[j].name + separator)).append($('
').addClass(classes.detailInnerValue) - .attr('data-bind-value', groups[group].data[j].bindName).append(groups[group].data[j].display))); - } - } - }, - classes: { - main: 'footable', - loading: 'footable-loading', - loaded: 'footable-loaded', - toggle: 'footable-toggle', - disabled: 'footable-disabled', - detail: 'footable-row-detail', - detailCell: 'footable-row-detail-cell', - detailInner: 'footable-row-detail-inner', - detailInnerRow: 'footable-row-detail-row', - detailInnerGroup: 'footable-row-detail-group', - detailInnerName: 'footable-row-detail-name', - detailInnerValue: 'footable-row-detail-value', - detailShow: 'footable-detail-show' - }, - triggers: { - initialize: 'footable_initialize', //trigger this event to force FooTable to reinitialize - resize: 'footable_resize', //trigger this event to force FooTable to resize - redraw: 'footable_redraw', //trigger this event to force FooTable to redraw - toggleRow: 'footable_toggle_row', //trigger this event to force FooTable to toggle a row - expandFirstRow: 'footable_expand_first_row', //trigger this event to force FooTable to expand the first row - expandAll: 'footable_expand_all', //trigger this event to force FooTable to expand all rows - collapseAll: 'footable_collapse_all' //trigger this event to force FooTable to collapse all rows - }, - events: { - alreadyInitialized: 'footable_already_initialized', //fires when the FooTable has already been initialized - initializing: 'footable_initializing', //fires before FooTable starts initializing - initialized: 'footable_initialized', //fires after FooTable has finished initializing - resizing: 'footable_resizing', //fires before FooTable resizes - resized: 'footable_resized', //fires after FooTable has resized - redrawn: 'footable_redrawn', //fires after FooTable has redrawn - breakpoint: 'footable_breakpoint', //fires inside the resize function, when a breakpoint is hit - columnData: 'footable_column_data', //fires when setting up column data. Plugins should use this event to capture their own info about a column - rowDetailUpdating: 'footable_row_detail_updating', //fires before a detail row is updated - rowDetailUpdated: 'footable_row_detail_updated', //fires when a detail row is being updated - rowCollapsed: 'footable_row_collapsed', //fires when a row is collapsed - rowExpanded: 'footable_row_expanded', //fires when a row is expanded - rowRemoved: 'footable_row_removed', //fires when a row is removed - reset: 'footable_reset' //fires when FooTable is reset - }, - debug: false, // Whether or not to log information to the console. - log: null - }, - - version: { - major: 0, minor: 5, - toString: function () { - return w.footable.version.major + '.' + w.footable.version.minor; - }, - parse: function (str) { - var version = /(\d+)\.?(\d+)?\.?(\d+)?/.exec(str); - return { - major: parseInt(version[1], 10) || 0, - minor: parseInt(version[2], 10) || 0, - patch: parseInt(version[3], 10) || 0 - }; - } - }, - - plugins: { - _validate: function (plugin) { - ///Simple validation of the to make sure any members called by FooTable actually exist. - ///The object defining the plugin, this should implement a string property called "name" and a function called "init". - - if (!$.isFunction(plugin)) { - if (w.footable.options.debug === true) console.error('Validation failed, expected type "function", received type "{0}".', typeof plugin); - return false; - } - var p = new plugin(); - if (typeof p['name'] !== 'string') { - if (w.footable.options.debug === true) console.error('Validation failed, plugin does not implement a string property called "name".', p); - return false; - } - if (!$.isFunction(p['init'])) { - if (w.footable.options.debug === true) console.error('Validation failed, plugin "' + p['name'] + '" does not implement a function called "init".', p); - return false; - } - if (w.footable.options.debug === true) console.log('Validation succeeded for plugin "' + p['name'] + '".', p); - return true; - }, - registered: [], // An array containing all registered plugins. - register: function (plugin, options) { - ///Registers a and its default with FooTable. - ///The plugin that should implement a string property called "name" and a function called "init". - ///The default options to merge with the FooTable's base options. - - if (w.footable.plugins._validate(plugin)) { - w.footable.plugins.registered.push(plugin); - if (typeof options === 'object') $.extend(true, w.footable.options, options); - } - }, - load: function(instance){ - var loaded = [], registered, i; - for(i = 0; i < w.footable.plugins.registered.length; i++){ - try { - registered = w.footable.plugins.registered[i]; - loaded.push(new registered(instance)); - } catch (err) { - if (w.footable.options.debug === true) console.error(err); - } - } - return loaded; - }, - init: function (instance) { - ///Loops through all registered plugins and calls the "init" method supplying the current of the FooTable as the first parameter. - ///The current instance of the FooTable that the plugin is being initialized for. - - for (var i = 0; i < instance.plugins.length; i++) { - try { - instance.plugins[i]['init'](instance); - } catch (err) { - if (w.footable.options.debug === true) console.error(err); - } - } - } - } - }; - - var instanceCount = 0; - - $.fn.footable = function (options) { - ///The main constructor call to initialize the plugin using the supplied . - /// - ///A JSON object containing user defined options for the plugin to use. Any options not supplied will have a default value assigned. - ///Check the documentation or the default options object above for more information on available options. - /// - - options = options || {}; - var o = $.extend(true, {}, w.footable.options, options); //merge user and default options - return this.each(function () { - instanceCount++; - var footable = new Footable(this, o, instanceCount); - $(this).data('footable', footable); - }); - }; - - //helper for using timeouts - function Timer() { - ///Simple timer object created around a timeout. - var t = this; - t.id = null; - t.busy = false; - t.start = function (code, milliseconds) { - ///Starts the timer and waits the specified amount of before executing the supplied . - ///The code to execute once the timer runs out. - ///The time in milliseconds to wait before executing the supplied . - - if (t.busy) { - return; - } - t.stop(); - t.id = setTimeout(function () { - code(); - t.id = null; - t.busy = false; - }, milliseconds); - t.busy = true; - }; - t.stop = function () { - ///Stops the timer if its runnning and resets it back to its starting state. - - if (t.id !== null) { - clearTimeout(t.id); - t.id = null; - t.busy = false; - } - }; - } - - function Footable(t, o, id) { - ///Inits a new instance of the plugin. - ///The main table element to apply this plugin to. - ///The options supplied to the plugin. Check the defaults object to see all available options. - ///The id to assign to this instance of the plugin. - - var ft = this; - ft.id = id; - ft.table = t; - ft.options = o; - ft.breakpoints = []; - ft.breakpointNames = ''; - ft.columns = {}; - ft.plugins = w.footable.plugins.load(ft); - - var opt = ft.options, - cls = opt.classes, - evt = opt.events, - trg = opt.triggers, - indexOffset = 0; - - // This object simply houses all the timers used in the FooTable. - ft.timers = { - resize: new Timer(), - register: function (name) { - ft.timers[name] = new Timer(); - return ft.timers[name]; - } - }; - - ft.init = function () { - var $window = $(w), $table = $(ft.table); - - w.footable.plugins.init(ft); - - if ($table.hasClass(cls.loaded)) { - //already loaded FooTable for the table, so don't init again - ft.raise(evt.alreadyInitialized); - return; - } - - //raise the initializing event - ft.raise(evt.initializing); - - $table.addClass(cls.loading); - - // Get the column data once for the life time of the plugin - $table.find(opt.columnDataSelector).each(function () { - var data = ft.getColumnData(this); - ft.columns[data.index] = data; - }); - - // Create a nice friendly array to work with out of the breakpoints object. - for (var name in opt.breakpoints) { - ft.breakpoints.push({ 'name': name, 'width': opt.breakpoints[name] }); - ft.breakpointNames += (name + ' '); - } - - // Sort the breakpoints so the smallest is checked first - ft.breakpoints.sort(function (a, b) { - return a['width'] - b['width']; - }); - - $table - .unbind(trg.initialize) - //bind to FooTable initialize trigger - .bind(trg.initialize, function () { - //remove previous "state" (to "force" a resize) - $table.removeData('footable_info'); - $table.data('breakpoint', ''); - - //trigger the FooTable resize - $table.trigger(trg.resize); - - //remove the loading class - $table.removeClass(cls.loading); - - //add the FooTable and loaded class - $table.addClass(cls.loaded).addClass(cls.main); - - //raise the initialized event - ft.raise(evt.initialized); - }) - .unbind(trg.redraw) - //bind to FooTable redraw trigger - .bind(trg.redraw, function () { - ft.redraw(); - }) - .unbind(trg.resize) - //bind to FooTable resize trigger - .bind(trg.resize, function () { - ft.resize(); - }) - .unbind(trg.expandFirstRow) - //bind to FooTable expandFirstRow trigger - .bind(trg.expandFirstRow, function () { - $table.find(opt.toggleSelector).first().not('.' + cls.detailShow).trigger(trg.toggleRow); - }) - .unbind(trg.expandAll) - //bind to FooTable expandFirstRow trigger - .bind(trg.expandAll, function () { - $table.find(opt.toggleSelector).not('.' + cls.detailShow).trigger(trg.toggleRow); - }) - .unbind(trg.collapseAll) - //bind to FooTable expandFirstRow trigger - .bind(trg.collapseAll, function () { - $table.find('.' + cls.detailShow).trigger(trg.toggleRow); - }); - - //trigger a FooTable initialize - $table.trigger(trg.initialize); - - //bind to window resize - $window - .bind('resize.footable', function () { - ft.timers.resize.stop(); - ft.timers.resize.start(function () { - ft.raise(trg.resize); - }, opt.delay); - }); - }; - - ft.addRowToggle = function () { - if (!opt.addRowToggle) return; - - var $table = $(ft.table), - hasToggleColumn = false; - - //first remove all toggle spans - $table.find('span.' + cls.toggle).remove(); - - for (var c in ft.columns) { - var col = ft.columns[c]; - if (col.toggle) { - hasToggleColumn = true; - var selector = '> tbody > tr:not(.' + cls.detail + ',.' + cls.disabled + ') > td:nth-child(' + (parseInt(col.index, 10) + 1) + '),' + - '> tbody > tr:not(.' + cls.detail + ',.' + cls.disabled + ') > th:nth-child(' + (parseInt(col.index, 10) + 1) + ')'; - $table.find(selector).not('.' + cls.detailCell).prepend($(opt.toggleHTMLElement).addClass(cls.toggle)); - return; - } - } - //check if we have an toggle column. If not then add it to the first column just to be safe - if (!hasToggleColumn) { - $table - .find('> tbody > tr:not(.' + cls.detail + ',.' + cls.disabled + ') > td:first-child') - .add('> tbody > tr:not(.' + cls.detail + ',.' + cls.disabled + ') > th:first-child') - .not('.' + cls.detailCell) - .prepend($(opt.toggleHTMLElement).addClass(cls.toggle)); - } - }; - - ft.setColumnClasses = function () { - var $table = $(ft.table); - for (var c in ft.columns) { - var col = ft.columns[c]; - if (col.className !== null) { - var selector = '', first = true; - $.each(col.matches, function (m, match) { //support for colspans - if (!first) selector += ', '; - selector += '> tbody > tr:not(.' + cls.detail + ') > td:nth-child(' + (parseInt(match, 10) + 1) + ')'; - first = false; - }); - //add the className to the cells specified by data-class="blah" - $table.find(selector).not('.' + cls.detailCell).addClass(col.className); - } - } - }; - - //moved this out into it's own function so that it can be called from other add-ons - ft.bindToggleSelectors = function () { - var $table = $(ft.table); - - if (!ft.hasAnyBreakpointColumn()) return; - - $table.find(opt.toggleSelector).unbind(trg.toggleRow).bind(trg.toggleRow, function (e) { - var $row = $(this).is('tr') ? $(this) : $(this).parents('tr:first'); - ft.toggleDetail($row); - }); - - $table.find(opt.toggleSelector).unbind('click.footable').bind('click.footable', function (e) { - if ($table.is('.breakpoint') && $(e.target).is('td,th,.'+ cls.toggle)) { - $(this).trigger(trg.toggleRow); - } - }); - }; - - ft.parse = function (cell, column) { - var parser = opt.parsers[column.type] || opt.parsers.alpha; - return parser(cell); - }; - - ft.getColumnData = function (th) { - var $th = $(th), hide = $th.data('hide'), index = $th.index(); - hide = hide || ''; - hide = jQuery.map(hide.split(','), function (a) { - return jQuery.trim(a); - }); - var data = { - 'index': index, - 'hide': { }, - 'type': $th.data('type') || 'alpha', - 'name': $th.data('name') || $.trim($th.text()), - 'ignore': $th.data('ignore') || false, - 'toggle': $th.data('toggle') || false, - 'className': $th.data('class') || null, - 'matches': [], - 'names': { }, - 'group': $th.data('group') || null, - 'groupName': null, - 'isEditable': $th.data('editable') - }; - - if (data.group !== null) { - var $group = $(ft.table).find('> thead > tr.footable-group-row > th[data-group="' + data.group + '"], > thead > tr.footable-group-row > td[data-group="' + data.group + '"]').first(); - data.groupName = ft.parse($group, { 'type': 'alpha' }); - } - - var pcolspan = parseInt($th.prev().attr('colspan') || 0, 10); - indexOffset += pcolspan > 1 ? pcolspan - 1 : 0; - var colspan = parseInt($th.attr('colspan') || 0, 10), curindex = data.index + indexOffset; - if (colspan > 1) { - var names = $th.data('names'); - names = names || ''; - names = names.split(','); - for (var i = 0; i < colspan; i++) { - data.matches.push(i + curindex); - if (i < names.length) data.names[i + curindex] = names[i]; - } - } else { - data.matches.push(curindex); - } - - data.hide['default'] = ($th.data('hide') === "all") || ($.inArray('default', hide) >= 0); - - var hasBreakpoint = false; - for (var name in opt.breakpoints) { - data.hide[name] = ($th.data('hide') === "all") || ($.inArray(name, hide) >= 0); - hasBreakpoint = hasBreakpoint || data.hide[name]; - } - data.hasBreakpoint = hasBreakpoint; - var e = ft.raise(evt.columnData, { 'column': { 'data': data, 'th': th } }); - return e.column.data; - }; - - ft.getViewportWidth = function () { - return window.innerWidth || (document.body ? document.body.offsetWidth : 0); - }; - - ft.calculateWidth = function ($table, info) { - if (jQuery.isFunction(opt.calculateWidthOverride)) { - return opt.calculateWidthOverride($table, info); - } - if (info.viewportWidth < info.width) info.width = info.viewportWidth; - if (info.parentWidth < info.width) info.width = info.parentWidth; - return info; - }; - - ft.hasBreakpointColumn = function (breakpoint) { - for (var c in ft.columns) { - if (ft.columns[c].hide[breakpoint]) { - if (ft.columns[c].ignore) { - continue; - } - return true; - } - } - return false; - }; - - ft.hasAnyBreakpointColumn = function () { - for (var c in ft.columns) { - if (ft.columns[c].hasBreakpoint) { - return true; - } - } - return false; - }; - - ft.resize = function () { - var $table = $(ft.table); - - if (!$table.is(':visible')) { - return; - } //we only care about FooTables that are visible - - if (!ft.hasAnyBreakpointColumn()) { - $table.trigger(trg.redraw); - return; - } //we only care about FooTables that have breakpoints - - var info = { - 'width': $table.width(), //the table width - 'viewportWidth': ft.getViewportWidth(), //the width of the viewport - 'parentWidth': $table.parent().width() //the width of the parent - }; - - info = ft.calculateWidth($table, info); - - var pinfo = $table.data('footable_info'); - $table.data('footable_info', info); - ft.raise(evt.resizing, { 'old': pinfo, 'info': info }); - - // This (if) statement is here purely to make sure events aren't raised twice as mobile safari seems to do - if (!pinfo || (pinfo && pinfo.width && pinfo.width !== info.width)) { - - var current = null, breakpoint; - for (var i = 0; i < ft.breakpoints.length; i++) { - breakpoint = ft.breakpoints[i]; - if (breakpoint && breakpoint.width && info.width <= breakpoint.width) { - current = breakpoint; - break; - } - } - - var breakpointName = (current === null ? 'default' : current['name']), - hasBreakpointFired = ft.hasBreakpointColumn(breakpointName), - previousBreakpoint = $table.data('breakpoint'); - - $table - .data('breakpoint', breakpointName) - .removeClass('default breakpoint').removeClass(ft.breakpointNames) - .addClass(breakpointName + (hasBreakpointFired ? ' breakpoint' : '')); - - //only do something if the breakpoint has changed - if (breakpointName !== previousBreakpoint) { - //trigger a redraw - $table.trigger(trg.redraw); - //raise a breakpoint event - ft.raise(evt.breakpoint, { 'breakpoint': breakpointName, 'info': info }); - } - } - - ft.raise(evt.resized, { 'old': pinfo, 'info': info }); - }; - - ft.redraw = function () { - //add the toggler to each row - ft.addRowToggle(); - - //bind the toggle selector click events - ft.bindToggleSelectors(); - - //set any cell classes defined for the columns - ft.setColumnClasses(); - - var $table = $(ft.table), - breakpointName = $table.data('breakpoint'), - hasBreakpointFired = ft.hasBreakpointColumn(breakpointName); - - $table - .find('> tbody > tr:not(.' + cls.detail + ')').data('detail_created', false).end() - .find('> thead > tr:last-child > th') - .each(function () { - var data = ft.columns[$(this).index()], selector = '', first = true; - $.each(data.matches, function (m, match) { - if (!first) { - selector += ', '; - } - var count = match + 1; - selector += '> tbody > tr:not(.' + cls.detail + ') > td:nth-child(' + count + ')'; - selector += ', > tfoot > tr:not(.' + cls.detail + ') > td:nth-child(' + count + ')'; - selector += ', > colgroup > col:nth-child(' + count + ')'; - first = false; - }); - - selector += ', > thead > tr[data-group-row="true"] > th[data-group="' + data.group + '"]'; - var $column = $table.find(selector).add(this); - if (breakpointName !== '') { - if (data.hide[breakpointName] === false) $column.addClass('footable-visible').show(); - else $column.removeClass('footable-visible').hide(); - } - - if ($table.find('> thead > tr.footable-group-row').length === 1) { - var $groupcols = $table.find('> thead > tr:last-child > th[data-group="' + data.group + '"]:visible, > thead > tr:last-child > th[data-group="' + data.group + '"]:visible'), - $group = $table.find('> thead > tr.footable-group-row > th[data-group="' + data.group + '"], > thead > tr.footable-group-row > td[data-group="' + data.group + '"]'), - groupspan = 0; - - $.each($groupcols, function () { - groupspan += parseInt($(this).attr('colspan') || 1, 10); - }); - - if (groupspan > 0) $group.attr('colspan', groupspan).show(); - else $group.hide(); - } - }) - .end() - .find('> tbody > tr.' + cls.detailShow).each(function () { - ft.createOrUpdateDetailRow(this); - }); - - $table.find("[data-bind-name]").each(function () { - ft.toggleInput(this); - }); - - $table.find('> tbody > tr.' + cls.detailShow + ':visible').each(function () { - var $next = $(this).next(); - if ($next.hasClass(cls.detail)) { - if (!hasBreakpointFired) $next.hide(); - else $next.show(); - } - }); - - // adding .footable-first-column and .footable-last-column to the first and last th and td of each row in order to allow - // for styling if the first or last column is hidden (which won't work using :first-child or :last-child) - $table.find('> thead > tr > th.footable-last-column, > tbody > tr > td.footable-last-column').removeClass('footable-last-column'); - $table.find('> thead > tr > th.footable-first-column, > tbody > tr > td.footable-first-column').removeClass('footable-first-column'); - $table.find('> thead > tr, > tbody > tr') - .find('> th.footable-visible:last, > td.footable-visible:last') - .addClass('footable-last-column') - .end() - .find('> th.footable-visible:first, > td.footable-visible:first') - .addClass('footable-first-column'); - - ft.raise(evt.redrawn); - }; - - ft.toggleDetail = function (row) { - var $row = (row.jquery) ? row : $(row), - $next = $row.next(); - - //check if the row is already expanded - if ($row.hasClass(cls.detailShow)) { - $row.removeClass(cls.detailShow); - - //only hide the next row if it's a detail row - if ($next.hasClass(cls.detail)) $next.hide(); - - ft.raise(evt.rowCollapsed, { 'row': $row[0] }); - - } else { - ft.createOrUpdateDetailRow($row[0]); - $row.addClass(cls.detailShow) - .next().show(); - - ft.raise(evt.rowExpanded, { 'row': $row[0] }); - } - }; - - ft.removeRow = function (row) { - var $row = (row.jquery) ? row : $(row); - if ($row.hasClass(cls.detail)) { - $row = $row.prev(); - } - var $next = $row.next(); - if ($row.data('detail_created') === true) { - //remove the detail row - $next.remove(); - } - $row.remove(); - - //raise event - ft.raise(evt.rowRemoved); - }; - - ft.appendRow = function (row) { - var $row = (row.jquery) ? row : $(row); - $(ft.table).find('tbody').append($row); - - //redraw the table - ft.redraw(); - }; - - ft.getColumnFromTdIndex = function (index) { - /// Returns the correct column data for the supplied index taking into account colspans. - /// The index to retrieve the column data for. - /// A JSON object containing the column data for the supplied index. - var result = null; - for (var column in ft.columns) { - if ($.inArray(index, ft.columns[column].matches) >= 0) { - result = ft.columns[column]; - break; - } - } - return result; - }; - - ft.createOrUpdateDetailRow = function (actualRow) { - var $row = $(actualRow), $next = $row.next(), $detail, values = []; - if ($row.data('detail_created') === true) return true; - - if ($row.is(':hidden')) return false; //if the row is hidden for some reason (perhaps filtered) then get out of here - ft.raise(evt.rowDetailUpdating, { 'row': $row, 'detail': $next }); - $row.find('> td:hidden').each(function () { - var index = $(this).index(), column = ft.getColumnFromTdIndex(index), name = column.name; - if (column.ignore === true) return true; - - if (index in column.names) name = column.names[index]; - - var bindName = $(this).attr("data-bind-name"); - if (bindName != null && $(this).is(':empty')) { - var bindValue = $('.' + cls.detailInnerValue + '[' + 'data-bind-value="' + bindName + '"]'); - $(this).html($(bindValue).contents().detach()); - } - var display; - if (column.isEditable !== false && (column.isEditable || $(this).find(":input").length > 0)) { - if(bindName == null) { - bindName = "bind-" + $.now() + "-" + index; - $(this).attr("data-bind-name", bindName); - } - display = $(this).contents().detach(); - } - if (!display) display = $(this).contents().clone(true, true); - values.push({ 'name': name, 'value': ft.parse(this, column), 'display': display, 'group': column.group, 'groupName': column.groupName, 'bindName': bindName }); - return true; - }); - if (values.length === 0) return false; //return if we don't have any data to show - var colspan = $row.find('> td:visible').length; - var exists = $next.hasClass(cls.detail); - if (!exists) { // Create - $next = $('
'); - $row.after($next); - } - $next.find('> td:first').attr('colspan', colspan); - $detail = $next.find('.' + cls.detailInner).empty(); - opt.createDetail($detail, values, opt.createGroupedDetail, opt.detailSeparator, cls); - $row.data('detail_created', true); - ft.raise(evt.rowDetailUpdated, { 'row': $row, 'detail': $next }); - return !exists; - }; - - ft.raise = function (eventName, args) { - - if (ft.options.debug === true && $.isFunction(ft.options.log)) ft.options.log(eventName, 'event'); - - args = args || { }; - var def = { 'ft': ft }; - $.extend(true, def, args); - var e = $.Event(eventName, def); - if (!e.ft) { - $.extend(true, e, def); - } //pre jQuery 1.6 which did not allow data to be passed to event object constructor - $(ft.table).trigger(e); - return e; - }; - - //reset the state of FooTable - ft.reset = function() { - var $table = $(ft.table); - $table.removeData('footable_info') - .data('breakpoint', '') - .removeClass(cls.loading) - .removeClass(cls.loaded); - - $table.find(opt.toggleSelector).unbind(trg.toggleRow).unbind('click.footable'); - - $table.find('> tbody > tr').removeClass(cls.detailShow); - - $table.find('> tbody > tr.' + cls.detail).remove(); - - ft.raise(evt.reset); - }; - - //Switch between row-detail and detail-show. - ft.toggleInput = function (column) { - var bindName = $(column).attr("data-bind-name"); - if(bindName != null) { - var bindValue = $('.' + cls.detailInnerValue + '[' + 'data-bind-value="' + bindName + '"]'); - if(bindValue != null) { - if($(column).is(":visible")) { - if(!$(bindValue).is(':empty')) $(column).html($(bindValue).contents().detach()); - } else if(!$(column).is(':empty')) { - $(bindValue).html($(column).contents().detach()); - } - } - } - }; - - ft.init(); - return ft; - } -})(jQuery, window); diff --git a/media/footable/js/footable.memory.js b/media/footable/js/footable.memory.js deleted file mode 100644 index 487ed70..0000000 --- a/media/footable/js/footable.memory.js +++ /dev/null @@ -1,429 +0,0 @@ -/** - * Footable Memory - * - * Version 1.1.0 - * - * Requires browser support for localStorage. Fallback to cookies using - * jQuery Cookie (https://github.com/carhartl/jquery-cookie) - * - * Stores table state in a cookie and reloads state when page is refreshed. - * - * Supports common FooTable features: - * - Pagination - * - Sorting - * - Filtering - * - Expansion - * - * Written to be compatible with multiple FooTables per page and with - * JavaScript libraries like AngularJS and Ember that use hash based URLs. - * - * Disabled by default, to enable add the following section to the footable - * options: - * - * $('#table').footable({ - * memory: { - * enabled: true - * } - * }); - * - * Based on FooTable Plugin Bookmarkable by Amy Farrell (https://github.com/akf) - * - * Created by Chris Laskey (https://github.com/chrislaskey) - */ - -(function ($, w, undefined) { - - if (w.footable === undefined || w.foobox === null) { - throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.'); - } - - var defaults = { - memory: { - enabled: false - } - }; - - var storage; - - var storage_engines = {}; - - storage_engines.local_storage = (function($){ - - 'use strict'; - - var path_page = function(){ - return location.pathname; - }; - - var path_subpage = function(){ - return location.hash || 'root'; - }; - - var storage_key = function(index){ - return path_page() + '/' + path_subpage() + '/index-' + index; - }; - - var get = function(index){ - var key = storage_key(index), - as_string = localStorage.getItem(key); - - return as_string ? JSON.parse(as_string) : {}; - }; - - var set = function(index, item){ - var key = storage_key(index), - as_string = JSON.stringify(item); - - localStorage.setItem(key, as_string); - }; - - return { - get: function(index){ - return get(index); - }, - set: function(index, item){ - set(index, item); - } - }; - - })($); - - storage_engines.cookie = (function($){ - - 'use strict'; - - /** - * Stores footable bookmarkable data in a cookie - * - * By default will store each page in its own cookie. - * Supports multiple FooTables per page. - * Supports JS frameworks that use hashmap URLs (AngularJS, Ember, etc). - * - * For example take an example application: - * - * http://example.com/application-data (2 FooTables on this page) - * http://example.com/application-data/#/details (1 FooTable on this page) - * http://example.com/other-data (1 FooTable on this page) - * - * Would be stored like this: - * - * cookie['/application-data'] = { - * '/': { - * 1: { - * key1: value1, - * key2: value2 - * }, - * 2: { - * key1: value1, - * key2: value2 - * } - * }, - * '#/details': { - * 1: { - * key1: value1, - * key2: value2 - * } - * } - * }; - * - * cookie['/other-data'] = { - * '/': { - * 1: { - * key1: value1, - * key2: value2 - * }, - * } - * } - * - */ - - if( $.cookie ){ - $.cookie.json = true; - } - - var days_to_keep_data = 7; - - var path_page = function(){ - return location.pathname; - }; - - var path_subpage = function(){ - return location.hash || '/'; - }; - - var get_data = function(){ - var page = path_page(), - data = $.cookie(page); - - return data || {}; - }; - - var get_table = function(index){ - var subpage = path_subpage(), - data = get_data(); - - if( data[subpage] && data[subpage][index] ){ - return data[subpage][index]; - } else { - return {}; - } - }; - - var set = function(index, item){ - var page = path_page(), - subpage = path_subpage(), - data = get_data(), - options; - - if( !data[subpage] ){ - data[subpage] = {}; - } - - data[subpage][index] = item; - - options = { - path: page, - expires: days_to_keep_data - }; - - $.cookie(page, data, options); - }; - - return { - get: function(index){ - return get_table(index); - }, - set: function(index, item){ - set(index, item); - } - }; - - })($); - - var set_storage_engine = (function(){ - var test = 'footable-memory-plugin-storage-test'; - - try { - localStorage.setItem(test, test); - localStorage.removeItem(test); - storage = storage_engines.local_storage; - } catch(e) { - try { - $.cookie(test, test); - storage = storage_engines.cookie; - } catch(e) { - throw new Error('FooTable Memory requires either localStorage or cookie support via jQuery $.cookie plugin (https://github.com/carhartl/jquery-cookie)'); - } - } - })($); - - var state = (function($){ - - 'use strict'; - - /** - * Gets and sets current table state - */ - - var vars = {}; - - var get = {}; - - var set = {}; - - set.vars = function(ft){ - vars.ft = ft; - vars.table = $(ft.table); - }; - - get.descending = function(){ - var descending = false; - $.each(vars.table.find('th'), function(index){ - if( $(this).hasClass('footable-sorted-desc') ){ - descending = true; - } - }); - return descending; - }; - - get.expanded = function(){ - var indexes = []; - $.each(vars.ft.table.rows, function(index, value){ - if( $(this).hasClass('footable-detail-show') ){ - indexes.push(index); - } - }); - return indexes; - }; - - set.expanded = function(data){ - if( data.expanded ){ - $.each(data.expanded, function(index, value){ - // var row = $(vars.ft.table.rows[value]); - // row.find('> td:first').trigger('footable_toggle_row'); - - // Trying to execute the lines above, but the expanded row - // shows raw AngularJS template (with {{ values }}) instead - // of the fully rendered result. - // - // Best guess is some things happen after - // 'footable_initialized' event and row expanding can not - // occur until after those fire. - // - // A hack to get around this is to wait an interval before - // executing the intended commands. Wrapped in an - // immediately executing function to ensure ft is the - // current value. - - (function(ft){ - setTimeout(function(){ - var row = $(ft.table.rows[value]); - row.find('> td:first').trigger('footable_toggle_row'); - }, 150); - })(vars.ft); - }); - } - }; - - get.filter = function(){ - return vars.table.data('filter') ? $(vars.table.data('filter')).val() : ''; - }; - - set.filter = function(data){ - if( data.filter ){ - $(vars.table.data('filter')) - .val(data.filter) - .trigger('keyup'); - } - }; - - get.page = function(){ - return vars.ft.pageInfo && vars.ft.pageInfo.currentPage !== undefined ? vars.ft.pageInfo.currentPage : 0; - }; - - set.page = function(data){ - if( data.page ){ - vars.table.data('currentPage', data.page); - // Delay triggering table until sort is updated, since both effect - // pagination. - } - }; - - get.shown = function(){ - return vars.table - .find('tbody') - .find('tr:not(.footable-row-detail)') - .filter(':visible').length; - }; - - get.sorted = function(){ - if( vars.table.data('sorted') !== undefined ){ - return vars.table.data('sorted'); - } else { - return -1; - } - }; - - set.sorted = function(data){ - if( data.sorted >= 0 ) { - // vars.table.data('footable-sort').doSort(data.sorted, !data.descending); - - // Trying to execute the line above, but only sort icon on the - // \n"+content+"\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"\n"};Renderer.prototype.strong=function(text){return""+text+""};Renderer.prototype.em=function(text){return""+text+""};Renderer.prototype.codespan=function(text){return""+text+""};Renderer.prototype.br=function(){return this.options.xhtml?"
":"
"};Renderer.prototype.del=function(text){return""+text+""};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0){return""}}var out='";return out};Renderer.prototype.image=function(href,title,text){var out=''+text+'":">";return out};Renderer.prototype.text=function(text){return text};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;iAn error occured:

"+escape(e.message+"",true)+"
"}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); + diff --git a/media/uikit/css/components/accordion.almost-flat.css b/media/uikit-v2/css/components/accordion.almost-flat.css similarity index 91% rename from media/uikit/css/components/accordion.almost-flat.css rename to media/uikit-v2/css/components/accordion.almost-flat.css index f8edc0d..253b96d 100644 --- a/media/uikit/css/components/accordion.almost-flat.css +++ b/media/uikit-v2/css/components/accordion.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Accordion ========================================================================== */ @@ -12,7 +12,7 @@ font-size: 18px; line-height: 24px; cursor: pointer; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 4px; } /* Sub-object: `uk-accordion-content` diff --git a/media/uikit/css/components/accordion.almost-flat.min.css b/media/uikit-v2/css/components/accordion.almost-flat.min.css similarity index 84% rename from media/uikit/css/components/accordion.almost-flat.min.css rename to media/uikit-v2/css/components/accordion.almost-flat.min.css index 1f1f941..b5d51dd 100644 --- a/media/uikit/css/components/accordion.almost-flat.min.css +++ b/media/uikit-v2/css/components/accordion.almost-flat.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-accordion-title{margin-top:0;margin-bottom:15px;padding:5px 15px;background:#f5f5f5;font-size:18px;line-height:24px;cursor:pointer;border:1px solid #ddd;border-radius:4px}.uk-accordion-content{padding:0 15px 15px 15px}.uk-accordion-content:after,.uk-accordion-content:before{content:"";display:table}.uk-accordion-content:after{clear:both}.uk-accordion-content>:last-child{margin-bottom:0} \ No newline at end of file diff --git a/media/uikit/css/components/accordion.css b/media/uikit-v2/css/components/accordion.css similarity index 91% rename from media/uikit/css/components/accordion.css rename to media/uikit-v2/css/components/accordion.css index fe84c73..31406b3 100644 --- a/media/uikit/css/components/accordion.css +++ b/media/uikit-v2/css/components/accordion.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Accordion ========================================================================== */ @@ -8,7 +8,7 @@ margin-top: 0; margin-bottom: 15px; padding: 5px 15px; - background: #eeeeee; + background: #eee; font-size: 18px; line-height: 24px; cursor: pointer; diff --git a/media/uikit/css/components/accordion.gradient.css b/media/uikit-v2/css/components/accordion.gradient.css similarity index 91% rename from media/uikit/css/components/accordion.gradient.css rename to media/uikit-v2/css/components/accordion.gradient.css index afc5c47..c8382c1 100644 --- a/media/uikit/css/components/accordion.gradient.css +++ b/media/uikit-v2/css/components/accordion.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Accordion ========================================================================== */ @@ -12,7 +12,7 @@ font-size: 18px; line-height: 24px; cursor: pointer; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 4px; } /* Sub-object: `uk-accordion-content` diff --git a/media/uikit/css/components/accordion.gradient.min.css b/media/uikit-v2/css/components/accordion.gradient.min.css similarity index 84% rename from media/uikit/css/components/accordion.gradient.min.css rename to media/uikit-v2/css/components/accordion.gradient.min.css index 27b3e73..be493c7 100644 --- a/media/uikit/css/components/accordion.gradient.min.css +++ b/media/uikit-v2/css/components/accordion.gradient.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-accordion-title{margin-top:0;margin-bottom:15px;padding:5px 15px;background:#f7f7f7;font-size:18px;line-height:24px;cursor:pointer;border:1px solid #ddd;border-radius:4px}.uk-accordion-content{padding:0 15px 15px 15px}.uk-accordion-content:after,.uk-accordion-content:before{content:"";display:table}.uk-accordion-content:after{clear:both}.uk-accordion-content>:last-child{margin-bottom:0} \ No newline at end of file diff --git a/media/uikit/css/components/accordion.min.css b/media/uikit-v2/css/components/accordion.min.css similarity index 78% rename from media/uikit/css/components/accordion.min.css rename to media/uikit-v2/css/components/accordion.min.css index a1b3a90..342e82d 100644 --- a/media/uikit/css/components/accordion.min.css +++ b/media/uikit-v2/css/components/accordion.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-accordion-title{margin-top:0;margin-bottom:15px;padding:5px 15px;background:#eee;font-size:18px;line-height:24px;cursor:pointer}.uk-accordion-content{padding:0 15px 15px 15px}.uk-accordion-content:after,.uk-accordion-content:before{content:"";display:table}.uk-accordion-content:after{clear:both}.uk-accordion-content>:last-child{margin-bottom:0} \ No newline at end of file diff --git a/media/uikit/css/components/autocomplete.almost-flat.css b/media/uikit-v2/css/components/autocomplete.almost-flat.css similarity index 83% rename from media/uikit/css/components/autocomplete.almost-flat.css rename to media/uikit-v2/css/components/autocomplete.almost-flat.css index 8f5176b..16342a6 100644 --- a/media/uikit/css/components/autocomplete.almost-flat.css +++ b/media/uikit-v2/css/components/autocomplete.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Autocomplete ========================================================================== */ @@ -18,13 +18,18 @@ /* 4 */ vertical-align: middle; } +/* Legacy dropdown modifier */ +.uk-dropdown-flip { + left: auto; + right: 0; +} /* Nav modifier `uk-nav-autocomplete` ========================================================================== */ /* * Items */ .uk-nav-autocomplete > li > a { - color: #444444; + color: #444; } /* * Active @@ -32,7 +37,7 @@ */ .uk-nav-autocomplete > li.uk-active > a { background: #00a8e6; - color: #ffffff; + color: #fff; /* 1 */ outline: none; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); @@ -42,11 +47,11 @@ * Sub-object: `uk-nav-header` */ .uk-nav-autocomplete .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-autocomplete .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } diff --git a/media/uikit-v2/css/components/autocomplete.almost-flat.min.css b/media/uikit-v2/css/components/autocomplete.almost-flat.min.css new file mode 100644 index 0000000..e266779 --- /dev/null +++ b/media/uikit-v2/css/components/autocomplete.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-autocomplete{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-dropdown-flip{left:auto;right:0}.uk-nav-autocomplete>li>a{color:#444}.uk-nav-autocomplete>li.uk-active>a{background:#00a8e6;color:#fff;outline:0;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-autocomplete .uk-nav-header{color:#999}.uk-nav-autocomplete .uk-nav-divider{border-top:1px solid #ddd} \ No newline at end of file diff --git a/media/uikit/css/components/autocomplete.css b/media/uikit-v2/css/components/autocomplete.css similarity index 82% rename from media/uikit/css/components/autocomplete.css rename to media/uikit-v2/css/components/autocomplete.css index bb71335..7a1c068 100644 --- a/media/uikit/css/components/autocomplete.css +++ b/media/uikit-v2/css/components/autocomplete.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Autocomplete ========================================================================== */ @@ -18,13 +18,18 @@ /* 4 */ vertical-align: middle; } +/* Legacy dropdown modifier */ +.uk-dropdown-flip { + left: auto; + right: 0; +} /* Nav modifier `uk-nav-autocomplete` ========================================================================== */ /* * Items */ .uk-nav-autocomplete > li > a { - color: #444444; + color: #444; } /* * Active @@ -32,7 +37,7 @@ */ .uk-nav-autocomplete > li.uk-active > a { background: #00a8e6; - color: #ffffff; + color: #fff; /* 1 */ outline: none; } @@ -40,11 +45,11 @@ * Sub-object: `uk-nav-header` */ .uk-nav-autocomplete .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-autocomplete .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } diff --git a/media/uikit/css/components/autocomplete.gradient.css b/media/uikit-v2/css/components/autocomplete.gradient.css similarity index 83% rename from media/uikit/css/components/autocomplete.gradient.css rename to media/uikit-v2/css/components/autocomplete.gradient.css index 06e2c52..d454a40 100644 --- a/media/uikit/css/components/autocomplete.gradient.css +++ b/media/uikit-v2/css/components/autocomplete.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Autocomplete ========================================================================== */ @@ -18,13 +18,18 @@ /* 4 */ vertical-align: middle; } +/* Legacy dropdown modifier */ +.uk-dropdown-flip { + left: auto; + right: 0; +} /* Nav modifier `uk-nav-autocomplete` ========================================================================== */ /* * Items */ .uk-nav-autocomplete > li > a { - color: #444444; + color: #444; } /* * Active @@ -32,7 +37,7 @@ */ .uk-nav-autocomplete > li.uk-active > a { background: #009dd8; - color: #ffffff; + color: #fff; /* 1 */ outline: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); @@ -42,11 +47,11 @@ * Sub-object: `uk-nav-header` */ .uk-nav-autocomplete .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-autocomplete .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } diff --git a/media/uikit-v2/css/components/autocomplete.gradient.min.css b/media/uikit-v2/css/components/autocomplete.gradient.min.css new file mode 100644 index 0000000..d1481be --- /dev/null +++ b/media/uikit-v2/css/components/autocomplete.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-autocomplete{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-dropdown-flip{left:auto;right:0}.uk-nav-autocomplete>li>a{color:#444}.uk-nav-autocomplete>li.uk-active>a{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-autocomplete .uk-nav-header{color:#999}.uk-nav-autocomplete .uk-nav-divider{border-top:1px solid #ddd} \ No newline at end of file diff --git a/media/uikit-v2/css/components/autocomplete.min.css b/media/uikit-v2/css/components/autocomplete.min.css new file mode 100644 index 0000000..8508294 --- /dev/null +++ b/media/uikit-v2/css/components/autocomplete.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-autocomplete{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-dropdown-flip{left:auto;right:0}.uk-nav-autocomplete>li>a{color:#444}.uk-nav-autocomplete>li.uk-active>a{background:#00a8e6;color:#fff;outline:0}.uk-nav-autocomplete .uk-nav-header{color:#999}.uk-nav-autocomplete .uk-nav-divider{border-top:1px solid #ddd} \ No newline at end of file diff --git a/media/uikit/css/components/datepicker.almost-flat.css b/media/uikit-v2/css/components/datepicker.almost-flat.css similarity index 90% rename from media/uikit/css/components/datepicker.almost-flat.css rename to media/uikit-v2/css/components/datepicker.almost-flat.css index ecc8080..b4e5a48 100644 --- a/media/uikit/css/components/datepicker.almost-flat.css +++ b/media/uikit-v2/css/components/datepicker.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Datepicker ========================================================================== */ @@ -42,11 +42,11 @@ * Previous and next navigation */ .uk-datepicker-nav a { - color: #444444; + color: #444; text-decoration: none; } .uk-datepicker-nav a:hover { - color: #444444; + color: #444; } .uk-datepicker-previous { float: left; @@ -88,7 +88,7 @@ width: 26px; line-height: 24px; text-align: center; - color: #444444; + color: #444; text-decoration: none; border: 1px solid transparent; border-radius: 4px; @@ -97,7 +97,7 @@ * Sub-object: `uk-datepicker-table-muted` */ a.uk-datepicker-table-muted { - color: #999999; + color: #999; } /* * Hover @@ -107,23 +107,23 @@ a.uk-datepicker-table-muted { .uk-datepicker-table a:hover, .uk-datepicker-table a:focus { background-color: #fafafa; - color: #444444; + color: #444; /* 2 */ outline: none; border-color: rgba(0, 0, 0, 0.16); - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* OnClick */ .uk-datepicker-table a:active { - background-color: #eeeeee; - color: #444444; + background-color: #eee; + color: #444; } /* * Active */ .uk-datepicker-table a.uk-active { background: #00a8e6; - color: #ffffff; + color: #fff; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1); } diff --git a/media/uikit/css/components/datepicker.almost-flat.min.css b/media/uikit-v2/css/components/datepicker.almost-flat.min.css similarity index 93% rename from media/uikit/css/components/datepicker.almost-flat.min.css rename to media/uikit-v2/css/components/datepicker.almost-flat.min.css index 5f9ab45..648bebf 100644 --- a/media/uikit/css/components/datepicker.almost-flat.min.css +++ b/media/uikit-v2/css/components/datepicker.almost-flat.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-datepicker{z-index:1050;width:auto;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-datepicker-nav{margin-bottom:15px;text-align:center;line-height:20px}.uk-datepicker-nav:after,.uk-datepicker-nav:before{content:"";display:table}.uk-datepicker-nav:after{clear:both}.uk-datepicker-nav a{color:#444;text-decoration:none}.uk-datepicker-nav a:hover{color:#444}.uk-datepicker-previous{float:left}.uk-datepicker-next{float:right}.uk-datepicker-next:after,.uk-datepicker-previous:after{width:20px;font-family:FontAwesome}.uk-datepicker-previous:after{content:"\f053"}.uk-datepicker-next:after{content:"\f054"}.uk-datepicker-table{width:100%}.uk-datepicker-table td,.uk-datepicker-table th{padding:2px}.uk-datepicker-table th{font-size:12px}.uk-datepicker-table a{display:block;width:26px;line-height:24px;text-align:center;color:#444;text-decoration:none;border:1px solid transparent;border-radius:4px}a.uk-datepicker-table-muted{color:#999}.uk-datepicker-table a:focus,.uk-datepicker-table a:hover{background-color:#fafafa;color:#444;outline:0;border-color:rgba(0,0,0,.16);text-shadow:0 1px 0 #fff}.uk-datepicker-table a:active{background-color:#eee;color:#444}.uk-datepicker-table a.uk-active{background:#00a8e6;color:#fff;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)} \ No newline at end of file diff --git a/media/uikit/css/components/datepicker.css b/media/uikit-v2/css/components/datepicker.css similarity index 90% rename from media/uikit/css/components/datepicker.css rename to media/uikit-v2/css/components/datepicker.css index 5414e4f..ef1808e 100644 --- a/media/uikit/css/components/datepicker.css +++ b/media/uikit-v2/css/components/datepicker.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Datepicker ========================================================================== */ @@ -42,11 +42,11 @@ * Previous and next navigation */ .uk-datepicker-nav a { - color: #444444; + color: #444; text-decoration: none; } .uk-datepicker-nav a:hover { - color: #444444; + color: #444; } .uk-datepicker-previous { float: left; @@ -88,14 +88,14 @@ width: 26px; line-height: 24px; text-align: center; - color: #444444; + color: #444; text-decoration: none; } /* * Sub-object: `uk-datepicker-table-muted` */ a.uk-datepicker-table-muted { - color: #999999; + color: #999; } /* * Hover @@ -104,20 +104,20 @@ a.uk-datepicker-table-muted { */ .uk-datepicker-table a:hover, .uk-datepicker-table a:focus { - background-color: #dddddd; - color: #444444; + background-color: #ddd; + color: #444; /* 2 */ outline: none; } /* OnClick */ .uk-datepicker-table a:active { - background-color: #cccccc; - color: #444444; + background-color: #ccc; + color: #444; } /* * Active */ .uk-datepicker-table a.uk-active { background: #00a8e6; - color: #ffffff; + color: #fff; } diff --git a/media/uikit/css/components/datepicker.gradient.css b/media/uikit-v2/css/components/datepicker.gradient.css similarity index 92% rename from media/uikit/css/components/datepicker.gradient.css rename to media/uikit-v2/css/components/datepicker.gradient.css index 94366b6..8d79f82 100644 --- a/media/uikit/css/components/datepicker.gradient.css +++ b/media/uikit-v2/css/components/datepicker.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Datepicker ========================================================================== */ @@ -42,11 +42,11 @@ * Previous and next navigation */ .uk-datepicker-nav a { - color: #444444; + color: #444; text-decoration: none; } .uk-datepicker-nav a:hover { - color: #444444; + color: #444; } .uk-datepicker-previous { float: left; @@ -88,7 +88,7 @@ width: 26px; line-height: 24px; text-align: center; - color: #444444; + color: #444; text-decoration: none; border: 1px solid transparent; border-radius: 4px; @@ -98,7 +98,7 @@ * Sub-object: `uk-datepicker-table-muted` */ a.uk-datepicker-table-muted { - color: #999999; + color: #999; } /* * Hover @@ -108,17 +108,17 @@ a.uk-datepicker-table-muted { .uk-datepicker-table a:hover, .uk-datepicker-table a:focus { background-color: #fafafa; - color: #444444; + color: #444; /* 2 */ outline: none; border-color: rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.3); - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* OnClick */ .uk-datepicker-table a:active { background-color: #f5f5f5; - color: #444444; + color: #444; border-color: rgba(0, 0, 0, 0.2); border-top-color: rgba(0, 0, 0, 0.3); background-image: none; @@ -129,7 +129,7 @@ a.uk-datepicker-table-muted { */ .uk-datepicker-table a.uk-active { background: #009dd8; - color: #ffffff; + color: #fff; border: 1px solid rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.4); background-origin: border-box; diff --git a/media/uikit/css/components/datepicker.gradient.min.css b/media/uikit-v2/css/components/datepicker.gradient.min.css similarity index 95% rename from media/uikit/css/components/datepicker.gradient.min.css rename to media/uikit-v2/css/components/datepicker.gradient.min.css index 102458b..863fd5b 100644 --- a/media/uikit/css/components/datepicker.gradient.min.css +++ b/media/uikit-v2/css/components/datepicker.gradient.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-datepicker{z-index:1050;width:auto;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-datepicker-nav{margin-bottom:15px;text-align:center;line-height:20px}.uk-datepicker-nav:after,.uk-datepicker-nav:before{content:"";display:table}.uk-datepicker-nav:after{clear:both}.uk-datepicker-nav a{color:#444;text-decoration:none}.uk-datepicker-nav a:hover{color:#444}.uk-datepicker-previous{float:left}.uk-datepicker-next{float:right}.uk-datepicker-next:after,.uk-datepicker-previous:after{width:20px;font-family:FontAwesome}.uk-datepicker-previous:after{content:"\f053"}.uk-datepicker-next:after{content:"\f054"}.uk-datepicker-table{width:100%}.uk-datepicker-table td,.uk-datepicker-table th{padding:2px}.uk-datepicker-table th{font-size:12px}.uk-datepicker-table a{display:block;width:26px;line-height:24px;text-align:center;color:#444;text-decoration:none;border:1px solid transparent;border-radius:4px;background-origin:border-box}a.uk-datepicker-table-muted{color:#999}.uk-datepicker-table a:focus,.uk-datepicker-table a:hover{background-color:#fafafa;color:#444;outline:0;border-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);text-shadow:0 1px 0 #fff}.uk-datepicker-table a:active{background-color:#f5f5f5;color:#444;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.3);background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-datepicker-table a.uk-active{background:#009dd8;color:#fff;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);background-origin:border-box;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);text-shadow:0 -1px 0 rgba(0,0,0,.2)} \ No newline at end of file diff --git a/media/uikit/css/components/datepicker.min.css b/media/uikit-v2/css/components/datepicker.min.css similarity index 91% rename from media/uikit/css/components/datepicker.min.css rename to media/uikit-v2/css/components/datepicker.min.css index 7738f98..892ed63 100644 --- a/media/uikit/css/components/datepicker.min.css +++ b/media/uikit-v2/css/components/datepicker.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-datepicker{z-index:1050;width:auto;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-datepicker-nav{margin-bottom:15px;text-align:center;line-height:20px}.uk-datepicker-nav:after,.uk-datepicker-nav:before{content:"";display:table}.uk-datepicker-nav:after{clear:both}.uk-datepicker-nav a{color:#444;text-decoration:none}.uk-datepicker-nav a:hover{color:#444}.uk-datepicker-previous{float:left}.uk-datepicker-next{float:right}.uk-datepicker-next:after,.uk-datepicker-previous:after{width:20px;font-family:FontAwesome}.uk-datepicker-previous:after{content:"\f053"}.uk-datepicker-next:after{content:"\f054"}.uk-datepicker-table{width:100%}.uk-datepicker-table td,.uk-datepicker-table th{padding:2px}.uk-datepicker-table th{font-size:12px}.uk-datepicker-table a{display:block;width:26px;line-height:24px;text-align:center;color:#444;text-decoration:none}a.uk-datepicker-table-muted{color:#999}.uk-datepicker-table a:focus,.uk-datepicker-table a:hover{background-color:#ddd;color:#444;outline:0}.uk-datepicker-table a:active{background-color:#ccc;color:#444}.uk-datepicker-table a.uk-active{background:#00a8e6;color:#fff} \ No newline at end of file diff --git a/media/uikit/css/components/dotnav.almost-flat.css b/media/uikit-v2/css/components/dotnav.almost-flat.css similarity index 96% rename from media/uikit/css/components/dotnav.almost-flat.css rename to media/uikit-v2/css/components/dotnav.almost-flat.css index 78bf049..7312e0f 100644 --- a/media/uikit/css/components/dotnav.almost-flat.css +++ b/media/uikit-v2/css/components/dotnav.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Dotnav ========================================================================== */ @@ -56,7 +56,6 @@ */ .uk-dotnav > * > * { display: block; - -moz-box-sizing: content-box; box-sizing: content-box; width: 20px; height: 20px; diff --git a/media/uikit-v2/css/components/dotnav.almost-flat.min.css b/media/uikit-v2/css/components/dotnav.almost-flat.min.css new file mode 100644 index 0000000..74c5d09 --- /dev/null +++ b/media/uikit-v2/css/components/dotnav.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-dotnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-15px;margin-top:-15px;padding:0;list-style:none}.uk-dotnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:15px;margin-top:15px}.uk-dotnav:after,.uk-dotnav:before{content:"";display:block;overflow:hidden}.uk-dotnav:after{clear:both}.uk-dotnav>*{float:left}.uk-dotnav>*>*{display:block;box-sizing:content-box;width:20px;height:20px;border-radius:50%;background:rgba(50,50,50,.1);text-indent:100%;overflow:hidden;white-space:nowrap;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.uk-dotnav>*>:focus,.uk-dotnav>*>:hover{background:rgba(50,50,50,.4);outline:0}.uk-dotnav>*>:active{background:rgba(50,50,50,.6)}.uk-dotnav>.uk-active>*{background:rgba(50,50,50,.4);-webkit-transform:scale(1.3);transform:scale(1.3)}.uk-dotnav-contrast>*>*{background:rgba(255,255,255,.4)}.uk-dotnav-contrast>*>:focus,.uk-dotnav-contrast>*>:hover{background:rgba(255,255,255,.7)}.uk-dotnav-contrast>*>:active{background:rgba(255,255,255,.9)}.uk-dotnav-contrast>.uk-active>*{background:rgba(255,255,255,.9)}.uk-dotnav-vertical{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-dotnav-vertical>*{float:none} \ No newline at end of file diff --git a/media/uikit/css/components/dotnav.css b/media/uikit-v2/css/components/dotnav.css similarity index 96% rename from media/uikit/css/components/dotnav.css rename to media/uikit-v2/css/components/dotnav.css index 57a1771..7e1e951 100644 --- a/media/uikit/css/components/dotnav.css +++ b/media/uikit-v2/css/components/dotnav.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Dotnav ========================================================================== */ @@ -56,7 +56,6 @@ */ .uk-dotnav > * > * { display: block; - -moz-box-sizing: content-box; box-sizing: content-box; width: 20px; height: 20px; diff --git a/media/uikit/css/components/dotnav.gradient.css b/media/uikit-v2/css/components/dotnav.gradient.css similarity index 96% rename from media/uikit/css/components/dotnav.gradient.css rename to media/uikit-v2/css/components/dotnav.gradient.css index 78bf049..7312e0f 100644 --- a/media/uikit/css/components/dotnav.gradient.css +++ b/media/uikit-v2/css/components/dotnav.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Dotnav ========================================================================== */ @@ -56,7 +56,6 @@ */ .uk-dotnav > * > * { display: block; - -moz-box-sizing: content-box; box-sizing: content-box; width: 20px; height: 20px; diff --git a/media/uikit-v2/css/components/dotnav.gradient.min.css b/media/uikit-v2/css/components/dotnav.gradient.min.css new file mode 100644 index 0000000..74c5d09 --- /dev/null +++ b/media/uikit-v2/css/components/dotnav.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-dotnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-15px;margin-top:-15px;padding:0;list-style:none}.uk-dotnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:15px;margin-top:15px}.uk-dotnav:after,.uk-dotnav:before{content:"";display:block;overflow:hidden}.uk-dotnav:after{clear:both}.uk-dotnav>*{float:left}.uk-dotnav>*>*{display:block;box-sizing:content-box;width:20px;height:20px;border-radius:50%;background:rgba(50,50,50,.1);text-indent:100%;overflow:hidden;white-space:nowrap;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.uk-dotnav>*>:focus,.uk-dotnav>*>:hover{background:rgba(50,50,50,.4);outline:0}.uk-dotnav>*>:active{background:rgba(50,50,50,.6)}.uk-dotnav>.uk-active>*{background:rgba(50,50,50,.4);-webkit-transform:scale(1.3);transform:scale(1.3)}.uk-dotnav-contrast>*>*{background:rgba(255,255,255,.4)}.uk-dotnav-contrast>*>:focus,.uk-dotnav-contrast>*>:hover{background:rgba(255,255,255,.7)}.uk-dotnav-contrast>*>:active{background:rgba(255,255,255,.9)}.uk-dotnav-contrast>.uk-active>*{background:rgba(255,255,255,.9)}.uk-dotnav-vertical{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-dotnav-vertical>*{float:none} \ No newline at end of file diff --git a/media/uikit-v2/css/components/dotnav.min.css b/media/uikit-v2/css/components/dotnav.min.css new file mode 100644 index 0000000..08a981a --- /dev/null +++ b/media/uikit-v2/css/components/dotnav.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-dotnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-15px;margin-top:-15px;padding:0;list-style:none}.uk-dotnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:15px;margin-top:15px}.uk-dotnav:after,.uk-dotnav:before{content:"";display:block;overflow:hidden}.uk-dotnav:after{clear:both}.uk-dotnav>*{float:left}.uk-dotnav>*>*{display:block;box-sizing:content-box;width:20px;height:20px;border-radius:50%;background:rgba(50,50,50,.1);text-indent:100%;overflow:hidden;white-space:nowrap}.uk-dotnav>*>:focus,.uk-dotnav>*>:hover{background:rgba(50,50,50,.4);outline:0}.uk-dotnav>*>:active{background:rgba(50,50,50,.6)}.uk-dotnav>.uk-active>*{background:rgba(50,50,50,.4)}.uk-dotnav-contrast>*>*{background:rgba(255,255,255,.4)}.uk-dotnav-contrast>*>:focus,.uk-dotnav-contrast>*>:hover{background:rgba(255,255,255,.7)}.uk-dotnav-contrast>*>:active{background:rgba(255,255,255,.9)}.uk-dotnav-contrast>.uk-active>*{background:rgba(255,255,255,.9)}.uk-dotnav-vertical{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-dotnav-vertical>*{float:none} \ No newline at end of file diff --git a/media/uikit/css/components/form-advanced.almost-flat.css b/media/uikit-v2/css/components/form-advanced.almost-flat.css similarity index 91% rename from media/uikit/css/components/form-advanced.almost-flat.css rename to media/uikit-v2/css/components/form-advanced.almost-flat.css index 4c80760..68b339a 100644 --- a/media/uikit/css/components/form-advanced.almost-flat.css +++ b/media/uikit-v2/css/components/form-advanced.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form advanced Note: Only works in Webkit at the moment @@ -16,7 +16,7 @@ display: inline-block; height: 14px; width: 14px; - border: 1px solid #aaaaaa; + border: 1px solid #aaa; /* 2 */ overflow: hidden; /* 3 */ @@ -67,12 +67,12 @@ */ .uk-form input[type=radio]:disabled, .uk-form input[type=checkbox]:disabled { - border-color: #dddddd; + border-color: #ddd; } .uk-form input[type=radio]:disabled:checked:before { - background-color: #aaaaaa; + background-color: #aaa; } .uk-form input[type=checkbox]:disabled:checked:before, .uk-form input[type=checkbox]:disabled:indeterminate:before { - color: #aaaaaa; + color: #aaa; } diff --git a/media/uikit/css/components/form-advanced.almost-flat.min.css b/media/uikit-v2/css/components/form-advanced.almost-flat.min.css similarity index 89% rename from media/uikit/css/components/form-advanced.almost-flat.min.css rename to media/uikit-v2/css/components/form-advanced.almost-flat.min.css index 03d82f0..92e1557 100644 --- a/media/uikit/css/components/form-advanced.almost-flat.min.css +++ b/media/uikit-v2/css/components/form-advanced.almost-flat.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form input[type=radio],.uk-form input[type=checkbox]{display:inline-block;height:14px;width:14px;border:1px solid #aaa;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;outline:0;background:0 0}.uk-form input[type=radio]{border-radius:50%}.uk-form input[type=checkbox]:before,.uk-form input[type=radio]:before{display:block}.uk-form input[type=radio]:checked:before{content:'';width:8px;height:8px;margin:2px auto 0;border-radius:50%;background:#00a8e6}.uk-form input[type=checkbox]:checked:before,.uk-form input[type=checkbox]:indeterminate:before{content:"\f00c";font-family:FontAwesome;font-size:12px;-webkit-font-smoothing:antialiased;text-align:center;line-height:12px;color:#00a8e6}.uk-form input[type=checkbox]:indeterminate:before{content:"\f068"}.uk-form input[type=checkbox]:disabled,.uk-form input[type=radio]:disabled{border-color:#ddd}.uk-form input[type=radio]:disabled:checked:before{background-color:#aaa}.uk-form input[type=checkbox]:disabled:checked:before,.uk-form input[type=checkbox]:disabled:indeterminate:before{color:#aaa} \ No newline at end of file diff --git a/media/uikit/css/components/form-advanced.css b/media/uikit-v2/css/components/form-advanced.css similarity index 91% rename from media/uikit/css/components/form-advanced.css rename to media/uikit-v2/css/components/form-advanced.css index 4c80760..68b339a 100644 --- a/media/uikit/css/components/form-advanced.css +++ b/media/uikit-v2/css/components/form-advanced.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form advanced Note: Only works in Webkit at the moment @@ -16,7 +16,7 @@ display: inline-block; height: 14px; width: 14px; - border: 1px solid #aaaaaa; + border: 1px solid #aaa; /* 2 */ overflow: hidden; /* 3 */ @@ -67,12 +67,12 @@ */ .uk-form input[type=radio]:disabled, .uk-form input[type=checkbox]:disabled { - border-color: #dddddd; + border-color: #ddd; } .uk-form input[type=radio]:disabled:checked:before { - background-color: #aaaaaa; + background-color: #aaa; } .uk-form input[type=checkbox]:disabled:checked:before, .uk-form input[type=checkbox]:disabled:indeterminate:before { - color: #aaaaaa; + color: #aaa; } diff --git a/media/uikit/css/components/form-advanced.gradient.css b/media/uikit-v2/css/components/form-advanced.gradient.css similarity index 91% rename from media/uikit/css/components/form-advanced.gradient.css rename to media/uikit-v2/css/components/form-advanced.gradient.css index 4c80760..68b339a 100644 --- a/media/uikit/css/components/form-advanced.gradient.css +++ b/media/uikit-v2/css/components/form-advanced.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form advanced Note: Only works in Webkit at the moment @@ -16,7 +16,7 @@ display: inline-block; height: 14px; width: 14px; - border: 1px solid #aaaaaa; + border: 1px solid #aaa; /* 2 */ overflow: hidden; /* 3 */ @@ -67,12 +67,12 @@ */ .uk-form input[type=radio]:disabled, .uk-form input[type=checkbox]:disabled { - border-color: #dddddd; + border-color: #ddd; } .uk-form input[type=radio]:disabled:checked:before { - background-color: #aaaaaa; + background-color: #aaa; } .uk-form input[type=checkbox]:disabled:checked:before, .uk-form input[type=checkbox]:disabled:indeterminate:before { - color: #aaaaaa; + color: #aaa; } diff --git a/media/uikit/css/components/form-advanced.gradient.min.css b/media/uikit-v2/css/components/form-advanced.gradient.min.css similarity index 89% rename from media/uikit/css/components/form-advanced.gradient.min.css rename to media/uikit-v2/css/components/form-advanced.gradient.min.css index 03d82f0..92e1557 100644 --- a/media/uikit/css/components/form-advanced.gradient.min.css +++ b/media/uikit-v2/css/components/form-advanced.gradient.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form input[type=radio],.uk-form input[type=checkbox]{display:inline-block;height:14px;width:14px;border:1px solid #aaa;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;outline:0;background:0 0}.uk-form input[type=radio]{border-radius:50%}.uk-form input[type=checkbox]:before,.uk-form input[type=radio]:before{display:block}.uk-form input[type=radio]:checked:before{content:'';width:8px;height:8px;margin:2px auto 0;border-radius:50%;background:#00a8e6}.uk-form input[type=checkbox]:checked:before,.uk-form input[type=checkbox]:indeterminate:before{content:"\f00c";font-family:FontAwesome;font-size:12px;-webkit-font-smoothing:antialiased;text-align:center;line-height:12px;color:#00a8e6}.uk-form input[type=checkbox]:indeterminate:before{content:"\f068"}.uk-form input[type=checkbox]:disabled,.uk-form input[type=radio]:disabled{border-color:#ddd}.uk-form input[type=radio]:disabled:checked:before{background-color:#aaa}.uk-form input[type=checkbox]:disabled:checked:before,.uk-form input[type=checkbox]:disabled:indeterminate:before{color:#aaa} \ No newline at end of file diff --git a/media/uikit/css/components/form-advanced.min.css b/media/uikit-v2/css/components/form-advanced.min.css similarity index 89% rename from media/uikit/css/components/form-advanced.min.css rename to media/uikit-v2/css/components/form-advanced.min.css index 03d82f0..92e1557 100644 --- a/media/uikit/css/components/form-advanced.min.css +++ b/media/uikit-v2/css/components/form-advanced.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form input[type=radio],.uk-form input[type=checkbox]{display:inline-block;height:14px;width:14px;border:1px solid #aaa;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;outline:0;background:0 0}.uk-form input[type=radio]{border-radius:50%}.uk-form input[type=checkbox]:before,.uk-form input[type=radio]:before{display:block}.uk-form input[type=radio]:checked:before{content:'';width:8px;height:8px;margin:2px auto 0;border-radius:50%;background:#00a8e6}.uk-form input[type=checkbox]:checked:before,.uk-form input[type=checkbox]:indeterminate:before{content:"\f00c";font-family:FontAwesome;font-size:12px;-webkit-font-smoothing:antialiased;text-align:center;line-height:12px;color:#00a8e6}.uk-form input[type=checkbox]:indeterminate:before{content:"\f068"}.uk-form input[type=checkbox]:disabled,.uk-form input[type=radio]:disabled{border-color:#ddd}.uk-form input[type=radio]:disabled:checked:before{background-color:#aaa}.uk-form input[type=checkbox]:disabled:checked:before,.uk-form input[type=checkbox]:disabled:indeterminate:before{color:#aaa} \ No newline at end of file diff --git a/media/uikit/css/components/form-file.almost-flat.css b/media/uikit-v2/css/components/form-file.almost-flat.css similarity index 91% rename from media/uikit/css/components/form-file.almost-flat.css rename to media/uikit-v2/css/components/form-file.almost-flat.css index 70fe2c4..cff14a3 100644 --- a/media/uikit/css/components/form-file.almost-flat.css +++ b/media/uikit-v2/css/components/form-file.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form file ========================================================================== */ diff --git a/media/uikit/css/components/form-file.almost-flat.min.css b/media/uikit-v2/css/components/form-file.almost-flat.min.css similarity index 70% rename from media/uikit/css/components/form-file.almost-flat.min.css rename to media/uikit-v2/css/components/form-file.almost-flat.min.css index 3da0ea6..039634e 100644 --- a/media/uikit/css/components/form-file.almost-flat.min.css +++ b/media/uikit-v2/css/components/form-file.almost-flat.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-file{display:inline-block;vertical-align:middle;position:relative;overflow:hidden}.uk-form-file input[type=file]{position:absolute;top:0;z-index:1;width:100%;opacity:0;cursor:pointer;left:0;font-size:500px} \ No newline at end of file diff --git a/media/uikit/css/components/form-file.css b/media/uikit-v2/css/components/form-file.css similarity index 91% rename from media/uikit/css/components/form-file.css rename to media/uikit-v2/css/components/form-file.css index 70fe2c4..cff14a3 100644 --- a/media/uikit/css/components/form-file.css +++ b/media/uikit-v2/css/components/form-file.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form file ========================================================================== */ diff --git a/media/uikit/css/components/form-file.gradient.css b/media/uikit-v2/css/components/form-file.gradient.css similarity index 91% rename from media/uikit/css/components/form-file.gradient.css rename to media/uikit-v2/css/components/form-file.gradient.css index 70fe2c4..cff14a3 100644 --- a/media/uikit/css/components/form-file.gradient.css +++ b/media/uikit-v2/css/components/form-file.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form file ========================================================================== */ diff --git a/media/uikit/css/components/form-file.gradient.min.css b/media/uikit-v2/css/components/form-file.gradient.min.css similarity index 70% rename from media/uikit/css/components/form-file.gradient.min.css rename to media/uikit-v2/css/components/form-file.gradient.min.css index 3da0ea6..039634e 100644 --- a/media/uikit/css/components/form-file.gradient.min.css +++ b/media/uikit-v2/css/components/form-file.gradient.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-file{display:inline-block;vertical-align:middle;position:relative;overflow:hidden}.uk-form-file input[type=file]{position:absolute;top:0;z-index:1;width:100%;opacity:0;cursor:pointer;left:0;font-size:500px} \ No newline at end of file diff --git a/media/uikit/css/components/form-file.min.css b/media/uikit-v2/css/components/form-file.min.css similarity index 70% rename from media/uikit/css/components/form-file.min.css rename to media/uikit-v2/css/components/form-file.min.css index 3da0ea6..039634e 100644 --- a/media/uikit/css/components/form-file.min.css +++ b/media/uikit-v2/css/components/form-file.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-file{display:inline-block;vertical-align:middle;position:relative;overflow:hidden}.uk-form-file input[type=file]{position:absolute;top:0;z-index:1;width:100%;opacity:0;cursor:pointer;left:0;font-size:500px} \ No newline at end of file diff --git a/media/uikit/css/components/form-password.almost-flat.css b/media/uikit-v2/css/components/form-password.almost-flat.css similarity index 87% rename from media/uikit/css/components/form-password.almost-flat.css rename to media/uikit-v2/css/components/form-password.almost-flat.css index b328f60..c3485ef 100644 --- a/media/uikit/css/components/form-password.almost-flat.css +++ b/media/uikit-v2/css/components/form-password.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form password ========================================================================== */ @@ -23,10 +23,10 @@ margin-top: -6px; font-size: 13px; line-height: 13px; - color: #999999; + color: #999; } .uk-form-password-toggle:hover { - color: #999999; + color: #999; text-decoration: none; } .uk-form-password > input { diff --git a/media/uikit/css/components/form-password.almost-flat.min.css b/media/uikit-v2/css/components/form-password.almost-flat.min.css similarity index 83% rename from media/uikit/css/components/form-password.almost-flat.min.css rename to media/uikit-v2/css/components/form-password.almost-flat.min.css index 1f55b7c..0ccb1ef 100644 --- a/media/uikit/css/components/form-password.almost-flat.min.css +++ b/media/uikit-v2/css/components/form-password.almost-flat.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-password{display:inline-block;position:relative;max-width:100%}.uk-form-password-toggle{display:block;position:absolute;top:50%;right:10px;margin-top:-6px;font-size:13px;line-height:13px;color:#999}.uk-form-password-toggle:hover{color:#999;text-decoration:none}.uk-form-password>input{padding-right:50px!important} \ No newline at end of file diff --git a/media/uikit/css/components/form-password.css b/media/uikit-v2/css/components/form-password.css similarity index 87% rename from media/uikit/css/components/form-password.css rename to media/uikit-v2/css/components/form-password.css index b328f60..c3485ef 100644 --- a/media/uikit/css/components/form-password.css +++ b/media/uikit-v2/css/components/form-password.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form password ========================================================================== */ @@ -23,10 +23,10 @@ margin-top: -6px; font-size: 13px; line-height: 13px; - color: #999999; + color: #999; } .uk-form-password-toggle:hover { - color: #999999; + color: #999; text-decoration: none; } .uk-form-password > input { diff --git a/media/uikit/css/components/form-password.gradient.css b/media/uikit-v2/css/components/form-password.gradient.css similarity index 87% rename from media/uikit/css/components/form-password.gradient.css rename to media/uikit-v2/css/components/form-password.gradient.css index b328f60..c3485ef 100644 --- a/media/uikit/css/components/form-password.gradient.css +++ b/media/uikit-v2/css/components/form-password.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form password ========================================================================== */ @@ -23,10 +23,10 @@ margin-top: -6px; font-size: 13px; line-height: 13px; - color: #999999; + color: #999; } .uk-form-password-toggle:hover { - color: #999999; + color: #999; text-decoration: none; } .uk-form-password > input { diff --git a/media/uikit/css/components/form-password.gradient.min.css b/media/uikit-v2/css/components/form-password.gradient.min.css similarity index 83% rename from media/uikit/css/components/form-password.gradient.min.css rename to media/uikit-v2/css/components/form-password.gradient.min.css index 1f55b7c..0ccb1ef 100644 --- a/media/uikit/css/components/form-password.gradient.min.css +++ b/media/uikit-v2/css/components/form-password.gradient.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-password{display:inline-block;position:relative;max-width:100%}.uk-form-password-toggle{display:block;position:absolute;top:50%;right:10px;margin-top:-6px;font-size:13px;line-height:13px;color:#999}.uk-form-password-toggle:hover{color:#999;text-decoration:none}.uk-form-password>input{padding-right:50px!important} \ No newline at end of file diff --git a/media/uikit/css/components/form-password.min.css b/media/uikit-v2/css/components/form-password.min.css similarity index 83% rename from media/uikit/css/components/form-password.min.css rename to media/uikit-v2/css/components/form-password.min.css index 1f55b7c..0ccb1ef 100644 --- a/media/uikit/css/components/form-password.min.css +++ b/media/uikit-v2/css/components/form-password.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-password{display:inline-block;position:relative;max-width:100%}.uk-form-password-toggle{display:block;position:absolute;top:50%;right:10px;margin-top:-6px;font-size:13px;line-height:13px;color:#999}.uk-form-password-toggle:hover{color:#999;text-decoration:none}.uk-form-password>input{padding-right:50px!important} \ No newline at end of file diff --git a/media/uikit/css/components/form-select.almost-flat.css b/media/uikit-v2/css/components/form-select.almost-flat.css similarity index 91% rename from media/uikit/css/components/form-select.almost-flat.css rename to media/uikit-v2/css/components/form-select.almost-flat.css index 1783909..14ea9f7 100644 --- a/media/uikit/css/components/form-select.almost-flat.css +++ b/media/uikit-v2/css/components/form-select.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form select ========================================================================== */ diff --git a/media/uikit/css/components/form-select.almost-flat.min.css b/media/uikit-v2/css/components/form-select.almost-flat.min.css similarity index 67% rename from media/uikit/css/components/form-select.almost-flat.min.css rename to media/uikit-v2/css/components/form-select.almost-flat.min.css index 5a38b0f..7580244 100644 --- a/media/uikit/css/components/form-select.almost-flat.min.css +++ b/media/uikit-v2/css/components/form-select.almost-flat.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-select{display:inline-block;vertical-align:middle;position:relative;overflow:hidden}.uk-form-select select{position:absolute;top:0;z-index:1;width:100%;height:100%;opacity:0;cursor:pointer;left:0;-webkit-appearance:none} \ No newline at end of file diff --git a/media/uikit/css/components/form-select.css b/media/uikit-v2/css/components/form-select.css similarity index 91% rename from media/uikit/css/components/form-select.css rename to media/uikit-v2/css/components/form-select.css index 1783909..14ea9f7 100644 --- a/media/uikit/css/components/form-select.css +++ b/media/uikit-v2/css/components/form-select.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form select ========================================================================== */ diff --git a/media/uikit/css/components/form-select.gradient.css b/media/uikit-v2/css/components/form-select.gradient.css similarity index 91% rename from media/uikit/css/components/form-select.gradient.css rename to media/uikit-v2/css/components/form-select.gradient.css index 1783909..14ea9f7 100644 --- a/media/uikit/css/components/form-select.gradient.css +++ b/media/uikit-v2/css/components/form-select.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Form select ========================================================================== */ diff --git a/media/uikit/css/components/form-select.gradient.min.css b/media/uikit-v2/css/components/form-select.gradient.min.css similarity index 67% rename from media/uikit/css/components/form-select.gradient.min.css rename to media/uikit-v2/css/components/form-select.gradient.min.css index 5a38b0f..7580244 100644 --- a/media/uikit/css/components/form-select.gradient.min.css +++ b/media/uikit-v2/css/components/form-select.gradient.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-select{display:inline-block;vertical-align:middle;position:relative;overflow:hidden}.uk-form-select select{position:absolute;top:0;z-index:1;width:100%;height:100%;opacity:0;cursor:pointer;left:0;-webkit-appearance:none} \ No newline at end of file diff --git a/media/uikit/css/components/form-select.min.css b/media/uikit-v2/css/components/form-select.min.css similarity index 67% rename from media/uikit/css/components/form-select.min.css rename to media/uikit-v2/css/components/form-select.min.css index 5a38b0f..7580244 100644 --- a/media/uikit/css/components/form-select.min.css +++ b/media/uikit-v2/css/components/form-select.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ .uk-form-select{display:inline-block;vertical-align:middle;position:relative;overflow:hidden}.uk-form-select select{position:absolute;top:0;z-index:1;width:100%;height:100%;opacity:0;cursor:pointer;left:0;-webkit-appearance:none} \ No newline at end of file diff --git a/media/uikit/css/components/htmleditor.almost-flat.css b/media/uikit-v2/css/components/htmleditor.almost-flat.css similarity index 92% rename from media/uikit/css/components/htmleditor.almost-flat.css rename to media/uikit-v2/css/components/htmleditor.almost-flat.css index c24af88..8343b93 100644 --- a/media/uikit/css/components/htmleditor.almost-flat.css +++ b/media/uikit-v2/css/components/htmleditor.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: HTML editor ========================================================================== */ @@ -38,7 +38,6 @@ */ .uk-htmleditor-navbar-nav > li > a { display: block; - -moz-box-sizing: border-box; box-sizing: border-box; text-decoration: none; /* 1 */ @@ -46,14 +45,14 @@ padding: 0 15px; line-height: 40px; /* 2 */ - color: #444444; + color: #444; font-size: 11px; cursor: pointer; margin-top: -1px; margin-left: -1px; border: 1px solid transparent; border-bottom-width: 0; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* * Hover @@ -63,7 +62,7 @@ .uk-htmleditor-navbar-nav > li:hover > a, .uk-htmleditor-navbar-nav > li > a:focus { background-color: #fafafa; - color: #444444; + color: #444; outline: none; /* 2 */ position: relative; @@ -74,8 +73,8 @@ } /* OnClick */ .uk-htmleditor-navbar-nav > li > a:active { - background-color: #eeeeee; - color: #444444; + background-color: #eee; + color: #444; border-left-color: rgba(0, 0, 0, 0.1); border-right-color: rgba(0, 0, 0, 0.1); border-top-color: rgba(0, 0, 0, 0.2); @@ -83,7 +82,7 @@ /* Active */ .uk-htmleditor-navbar-nav > li.uk-active > a { background-color: #fafafa; - color: #444444; + color: #444; border-left-color: rgba(0, 0, 0, 0.1); border-right-color: rgba(0, 0, 0, 0.1); border-top-color: rgba(0, 0, 0, 0.1); @@ -102,10 +101,10 @@ /* Sub-object `uk-htmleditor-content` ========================================================================== */ .uk-htmleditor-content { - border-left: 1px solid #dddddd; - border-right: 1px solid #dddddd; - border-bottom: 1px solid #dddddd; - background: #ffffff; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + border-bottom: 1px solid #ddd; + background: #fff; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; } @@ -144,7 +143,6 @@ ========================================================================== */ .uk-htmleditor-code, .uk-htmleditor-preview { - -moz-box-sizing: border-box; box-sizing: border-box; } .uk-htmleditor-preview { @@ -168,7 +166,7 @@ width: 50%; } [data-mode='split'] .uk-htmleditor-code { - border-right: 1px solid #eeeeee; + border-right: 1px solid #eee; } /* Sub-object `uk-htmleditor-iframe` ========================================================================== */ @@ -183,7 +181,6 @@ ========================================================================== */ .uk-htmleditor .CodeMirror { padding: 10px; - -moz-box-sizing: border-box; box-sizing: border-box; } /* diff --git a/media/uikit-v2/css/components/htmleditor.almost-flat.min.css b/media/uikit-v2/css/components/htmleditor.almost-flat.min.css new file mode 100644 index 0000000..9d585a9 --- /dev/null +++ b/media/uikit-v2/css/components/htmleditor.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-htmleditor-navbar{background:#f5f5f5;border:1px solid rgba(0,0,0,.06);border-top-left-radius:4px;border-top-right-radius:4px}.uk-htmleditor-navbar:after,.uk-htmleditor-navbar:before{content:"";display:table}.uk-htmleditor-navbar:after{clear:both}.uk-htmleditor-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-htmleditor-navbar-nav>li{float:left}.uk-htmleditor-navbar-nav>li>a{display:block;box-sizing:border-box;text-decoration:none;height:41px;padding:0 15px;line-height:40px;color:#444;font-size:11px;cursor:pointer;margin-top:-1px;margin-left:-1px;border:1px solid transparent;border-bottom-width:0;text-shadow:0 1px 0 #fff}.uk-htmleditor-navbar-nav>li:hover>a,.uk-htmleditor-navbar-nav>li>a:focus{background-color:#fafafa;color:#444;outline:0;position:relative;z-index:1;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1)}.uk-htmleditor-navbar-nav>li>a:active{background-color:#eee;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2)}.uk-htmleditor-navbar-nav>li.uk-active>a{background-color:#fafafa;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1)}.uk-htmleditor-navbar-flip{float:right}[data-mode=split] .uk-htmleditor-button-code,[data-mode=split] .uk-htmleditor-button-preview{display:none}.uk-htmleditor-content{border-left:1px solid #ddd;border-right:1px solid #ddd;border-bottom:1px solid #ddd;background:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.uk-htmleditor-content:after,.uk-htmleditor-content:before{content:"";display:table}.uk-htmleditor-content:after{clear:both}.uk-htmleditor-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;z-index:990}.uk-htmleditor-fullscreen .uk-htmleditor-content{position:absolute;top:41px;left:0;right:0;bottom:0}.uk-htmleditor-fullscreen .uk-icon-expand:before{content:"\f066"}.uk-htmleditor-code,.uk-htmleditor-preview{box-sizing:border-box}.uk-htmleditor-preview{padding:20px;overflow-y:scroll;position:relative}[data-mode=tab][data-active-tab=code] .uk-htmleditor-preview,[data-mode=tab][data-active-tab=preview] .uk-htmleditor-code{display:none}[data-mode=split] .uk-htmleditor-code,[data-mode=split] .uk-htmleditor-preview{float:left;width:50%}[data-mode=split] .uk-htmleditor-code{border-right:1px solid #eee}.uk-htmleditor-iframe{position:absolute;top:0;left:0;width:100%;height:100%}.uk-htmleditor .CodeMirror{padding:10px;box-sizing:border-box}.uk-htmleditor-navbar-nav:first-child>li:first-child>a{border-top-left-radius:4px}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav>li>a{margin-left:0;margin-right:-1px}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav:first-child>li:first-child>a{border-top-left-radius:0}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav:last-child>li:last-child>a{border-top-right-radius:4px}.uk-htmleditor-fullscreen .uk-htmleditor-navbar{border-top:none;border-left:none;border-right:none;border-radius:0}.uk-htmleditor-fullscreen .uk-htmleditor-content{border:none;border-radius:0}.uk-htmleditor-fullscreen .uk-htmleditor-navbar-nav>li>a{border-radius:0!important} \ No newline at end of file diff --git a/media/uikit/css/components/htmleditor.css b/media/uikit-v2/css/components/htmleditor.css similarity index 89% rename from media/uikit/css/components/htmleditor.css rename to media/uikit-v2/css/components/htmleditor.css index 3861baa..46deed6 100644 --- a/media/uikit/css/components/htmleditor.css +++ b/media/uikit-v2/css/components/htmleditor.css @@ -1,11 +1,11 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: HTML editor ========================================================================== */ /* Sub-object `uk-htmleditor-navbar` ========================================================================== */ .uk-htmleditor-navbar { - background: #eeeeee; + background: #eee; } /* * Micro clearfix @@ -35,7 +35,6 @@ */ .uk-htmleditor-navbar-nav > li > a { display: block; - -moz-box-sizing: border-box; box-sizing: border-box; text-decoration: none; /* 1 */ @@ -43,7 +42,7 @@ padding: 0 15px; line-height: 40px; /* 2 */ - color: #444444; + color: #444; font-size: 11px; cursor: pointer; } @@ -55,19 +54,19 @@ .uk-htmleditor-navbar-nav > li:hover > a, .uk-htmleditor-navbar-nav > li > a:focus { background-color: #f5f5f5; - color: #444444; + color: #444; outline: none; /* 2 */ } /* OnClick */ .uk-htmleditor-navbar-nav > li > a:active { - background-color: #dddddd; - color: #444444; + background-color: #ddd; + color: #444; } /* Active */ .uk-htmleditor-navbar-nav > li.uk-active > a { background-color: #f5f5f5; - color: #444444; + color: #444; } /* Sub-object: `uk-htmleditor-navbar-flip` ========================================================================== */ @@ -83,10 +82,10 @@ /* Sub-object `uk-htmleditor-content` ========================================================================== */ .uk-htmleditor-content { - border-left: 1px solid #dddddd; - border-right: 1px solid #dddddd; - border-bottom: 1px solid #dddddd; - background: #ffffff; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + border-bottom: 1px solid #ddd; + background: #fff; } /* * Micro clearfix @@ -123,7 +122,6 @@ ========================================================================== */ .uk-htmleditor-code, .uk-htmleditor-preview { - -moz-box-sizing: border-box; box-sizing: border-box; } .uk-htmleditor-preview { @@ -147,7 +145,7 @@ width: 50%; } [data-mode='split'] .uk-htmleditor-code { - border-right: 1px solid #eeeeee; + border-right: 1px solid #eee; } /* Sub-object `uk-htmleditor-iframe` ========================================================================== */ @@ -162,6 +160,5 @@ ========================================================================== */ .uk-htmleditor .CodeMirror { padding: 10px; - -moz-box-sizing: border-box; box-sizing: border-box; } diff --git a/media/uikit/css/components/htmleditor.gradient.css b/media/uikit-v2/css/components/htmleditor.gradient.css similarity index 90% rename from media/uikit/css/components/htmleditor.gradient.css rename to media/uikit-v2/css/components/htmleditor.gradient.css index 9c9624e..7b18e18 100644 --- a/media/uikit/css/components/htmleditor.gradient.css +++ b/media/uikit-v2/css/components/htmleditor.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: HTML editor ========================================================================== */ @@ -11,8 +11,8 @@ border-top-left-radius: 4px; border-top-right-radius: 4px; background-origin: border-box; - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(to bottom, #ffffff, #eeeeee); + background-image: -webkit-linear-gradient(top, #fff, #eee); + background-image: linear-gradient(to bottom, #fff, #eee); } /* * Micro clearfix @@ -42,7 +42,6 @@ */ .uk-htmleditor-navbar-nav > li > a { display: block; - -moz-box-sizing: border-box; box-sizing: border-box; text-decoration: none; /* 1 */ @@ -50,14 +49,14 @@ padding: 0 15px; line-height: 40px; /* 2 */ - color: #444444; + color: #444; font-size: 11px; cursor: pointer; margin-top: -1px; margin-left: -1px; border: 1px solid transparent; border-bottom-width: 0; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* * Hover @@ -67,7 +66,7 @@ .uk-htmleditor-navbar-nav > li:hover > a, .uk-htmleditor-navbar-nav > li > a:focus { background-color: transparent; - color: #444444; + color: #444; outline: none; /* 2 */ position: relative; @@ -80,7 +79,7 @@ /* OnClick */ .uk-htmleditor-navbar-nav > li > a:active { background-color: #f5f5f5; - color: #444444; + color: #444; border-left-color: rgba(0, 0, 0, 0.1); border-right-color: rgba(0, 0, 0, 0.1); border-top-color: rgba(0, 0, 0, 0.2); @@ -89,7 +88,7 @@ /* Active */ .uk-htmleditor-navbar-nav > li.uk-active > a { background-color: #fafafa; - color: #444444; + color: #444; border-left-color: rgba(0, 0, 0, 0.1); border-right-color: rgba(0, 0, 0, 0.1); border-top-color: rgba(0, 0, 0, 0.2); @@ -109,10 +108,10 @@ /* Sub-object `uk-htmleditor-content` ========================================================================== */ .uk-htmleditor-content { - border-left: 1px solid #dddddd; - border-right: 1px solid #dddddd; - border-bottom: 1px solid #dddddd; - background: #ffffff; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + border-bottom: 1px solid #ddd; + background: #fff; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; } @@ -151,7 +150,6 @@ ========================================================================== */ .uk-htmleditor-code, .uk-htmleditor-preview { - -moz-box-sizing: border-box; box-sizing: border-box; } .uk-htmleditor-preview { @@ -175,7 +173,7 @@ width: 50%; } [data-mode='split'] .uk-htmleditor-code { - border-right: 1px solid #eeeeee; + border-right: 1px solid #eee; } /* Sub-object `uk-htmleditor-iframe` ========================================================================== */ @@ -190,7 +188,6 @@ ========================================================================== */ .uk-htmleditor .CodeMirror { padding: 10px; - -moz-box-sizing: border-box; box-sizing: border-box; } /* diff --git a/media/uikit-v2/css/components/htmleditor.gradient.min.css b/media/uikit-v2/css/components/htmleditor.gradient.min.css new file mode 100644 index 0000000..325009f --- /dev/null +++ b/media/uikit-v2/css/components/htmleditor.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-htmleditor-navbar{background:#f7f7f7;border:1px solid rgba(0,0,0,.1);border-bottom-color:rgba(0,0,0,.2);border-top-left-radius:4px;border-top-right-radius:4px;background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee)}.uk-htmleditor-navbar:after,.uk-htmleditor-navbar:before{content:"";display:table}.uk-htmleditor-navbar:after{clear:both}.uk-htmleditor-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-htmleditor-navbar-nav>li{float:left}.uk-htmleditor-navbar-nav>li>a{display:block;box-sizing:border-box;text-decoration:none;height:41px;padding:0 15px;line-height:40px;color:#444;font-size:11px;cursor:pointer;margin-top:-1px;margin-left:-1px;border:1px solid transparent;border-bottom-width:0;text-shadow:0 1px 0 #fff}.uk-htmleditor-navbar-nav>li:hover>a,.uk-htmleditor-navbar-nav>li>a:focus{background-color:transparent;color:#444;outline:0;position:relative;z-index:1;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-htmleditor-navbar-nav>li>a:active{background-color:#f5f5f5;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-htmleditor-navbar-nav>li.uk-active>a{background-color:#fafafa;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-htmleditor-navbar-flip{float:right}[data-mode=split] .uk-htmleditor-button-code,[data-mode=split] .uk-htmleditor-button-preview{display:none}.uk-htmleditor-content{border-left:1px solid #ddd;border-right:1px solid #ddd;border-bottom:1px solid #ddd;background:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.uk-htmleditor-content:after,.uk-htmleditor-content:before{content:"";display:table}.uk-htmleditor-content:after{clear:both}.uk-htmleditor-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;z-index:990}.uk-htmleditor-fullscreen .uk-htmleditor-content{position:absolute;top:41px;left:0;right:0;bottom:0}.uk-htmleditor-fullscreen .uk-icon-expand:before{content:"\f066"}.uk-htmleditor-code,.uk-htmleditor-preview{box-sizing:border-box}.uk-htmleditor-preview{padding:20px;overflow-y:scroll;position:relative}[data-mode=tab][data-active-tab=code] .uk-htmleditor-preview,[data-mode=tab][data-active-tab=preview] .uk-htmleditor-code{display:none}[data-mode=split] .uk-htmleditor-code,[data-mode=split] .uk-htmleditor-preview{float:left;width:50%}[data-mode=split] .uk-htmleditor-code{border-right:1px solid #eee}.uk-htmleditor-iframe{position:absolute;top:0;left:0;width:100%;height:100%}.uk-htmleditor .CodeMirror{padding:10px;box-sizing:border-box}.uk-htmleditor-navbar-nav:first-child>li:first-child>a{border-top-left-radius:4px}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav>li>a{margin-left:0;margin-right:-1px}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav:first-child>li:first-child>a{border-top-left-radius:0}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav:last-child>li:last-child>a{border-top-right-radius:4px}.uk-htmleditor-fullscreen .uk-htmleditor-navbar{border-top:none;border-left:none;border-right:none;border-radius:0}.uk-htmleditor-fullscreen .uk-htmleditor-content{border:none;border-radius:0}.uk-htmleditor-fullscreen .uk-htmleditor-navbar-nav>li>a{border-radius:0!important} \ No newline at end of file diff --git a/media/uikit-v2/css/components/htmleditor.min.css b/media/uikit-v2/css/components/htmleditor.min.css new file mode 100644 index 0000000..680f9c8 --- /dev/null +++ b/media/uikit-v2/css/components/htmleditor.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-htmleditor-navbar{background:#eee}.uk-htmleditor-navbar:after,.uk-htmleditor-navbar:before{content:"";display:table}.uk-htmleditor-navbar:after{clear:both}.uk-htmleditor-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-htmleditor-navbar-nav>li{float:left}.uk-htmleditor-navbar-nav>li>a{display:block;box-sizing:border-box;text-decoration:none;height:40px;padding:0 15px;line-height:40px;color:#444;font-size:11px;cursor:pointer}.uk-htmleditor-navbar-nav>li:hover>a,.uk-htmleditor-navbar-nav>li>a:focus{background-color:#f5f5f5;color:#444;outline:0}.uk-htmleditor-navbar-nav>li>a:active{background-color:#ddd;color:#444}.uk-htmleditor-navbar-nav>li.uk-active>a{background-color:#f5f5f5;color:#444}.uk-htmleditor-navbar-flip{float:right}[data-mode=split] .uk-htmleditor-button-code,[data-mode=split] .uk-htmleditor-button-preview{display:none}.uk-htmleditor-content{border-left:1px solid #ddd;border-right:1px solid #ddd;border-bottom:1px solid #ddd;background:#fff}.uk-htmleditor-content:after,.uk-htmleditor-content:before{content:"";display:table}.uk-htmleditor-content:after{clear:both}.uk-htmleditor-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;z-index:990}.uk-htmleditor-fullscreen .uk-htmleditor-content{position:absolute;top:40px;left:0;right:0;bottom:0}.uk-htmleditor-fullscreen .uk-icon-expand:before{content:"\f066"}.uk-htmleditor-code,.uk-htmleditor-preview{box-sizing:border-box}.uk-htmleditor-preview{padding:20px;overflow-y:scroll;position:relative}[data-mode=tab][data-active-tab=code] .uk-htmleditor-preview,[data-mode=tab][data-active-tab=preview] .uk-htmleditor-code{display:none}[data-mode=split] .uk-htmleditor-code,[data-mode=split] .uk-htmleditor-preview{float:left;width:50%}[data-mode=split] .uk-htmleditor-code{border-right:1px solid #eee}.uk-htmleditor-iframe{position:absolute;top:0;left:0;width:100%;height:100%}.uk-htmleditor .CodeMirror{padding:10px;box-sizing:border-box} \ No newline at end of file diff --git a/media/uikit-v2/css/components/index.html b/media/uikit-v2/css/components/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/uikit-v2/css/components/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/uikit/css/components/nestable.almost-flat.css b/media/uikit-v2/css/components/nestable.almost-flat.css similarity index 93% rename from media/uikit/css/components/nestable.almost-flat.css rename to media/uikit-v2/css/components/nestable.almost-flat.css index 4d6f3d4..9fb29d9 100644 --- a/media/uikit/css/components/nestable.almost-flat.css +++ b/media/uikit-v2/css/components/nestable.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Nestable ========================================================================== */ @@ -63,12 +63,12 @@ bottom: 0; left: 0; right: 0; - border: 1px dashed #dddddd; + border: 1px dashed #ddd; opacity: 1; } /* Empty List ========================================================================== */ -.uk-nestable:empty { +.uk-nestable-empty { min-height: 30px; } /* Sub-object `uk-nestable-handle` @@ -89,6 +89,10 @@ .uk-nestable-moving * { cursor: move; } +/* Fixes dragging items over iframes */ +.uk-nestable-moving iframe { + pointer-events: none; +} /* [data-nestable-action='toggle'] ========================================================================== */ /* @@ -131,5 +135,5 @@ background: #f5f5f5; border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.06); - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } diff --git a/media/uikit-v2/css/components/nestable.almost-flat.min.css b/media/uikit-v2/css/components/nestable.almost-flat.min.css new file mode 100644 index 0000000..733cdec --- /dev/null +++ b/media/uikit-v2/css/components/nestable.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-nestable{padding:0;list-style:none}.uk-nestable a,.uk-nestable img{-webkit-touch-callout:none}.uk-nestable-list{margin:0;padding-left:40px;list-style:none}.uk-nestable-item{touch-action:none}.uk-nestable-item+.uk-nestable-item{margin-top:10px}.uk-nestable-list:not(.uk-nestable-dragged)>.uk-nestable-item:first-child{margin-top:10px}.uk-nestable-dragged{position:absolute;z-index:1050;pointer-events:none;padding-left:0}.uk-nestable-placeholder{position:relative}.uk-nestable-placeholder>*{opacity:0}.uk-nestable-placeholder:after{content:'';position:absolute;top:0;bottom:0;left:0;right:0;border:1px dashed #ddd;opacity:1}.uk-nestable-empty{min-height:30px}.uk-nestable-handle{touch-action:none}.uk-nestable-handle:hover{cursor:move}.uk-nestable-moving,.uk-nestable-moving *{cursor:move}.uk-nestable-moving iframe{pointer-events:none}[data-nestable-action=toggle]{cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-nestable-toggle{display:inline-block;visibility:hidden}.uk-nestable-toggle:after{content:"\f147";font-family:FontAwesome}.uk-parent>:not(.uk-nestable-list) .uk-nestable-toggle{visibility:visible}.uk-collapsed .uk-nestable-list{display:none}.uk-collapsed .uk-nestable-toggle:after{content:"\f196"}.uk-nestable-panel{padding:5px;background:#f5f5f5;border-radius:4px;border:1px solid rgba(0,0,0,.06);text-shadow:0 1px 0 #fff} \ No newline at end of file diff --git a/media/uikit/css/components/nestable.css b/media/uikit-v2/css/components/nestable.css similarity index 93% rename from media/uikit/css/components/nestable.css rename to media/uikit-v2/css/components/nestable.css index aa4c644..e3e7621 100644 --- a/media/uikit/css/components/nestable.css +++ b/media/uikit-v2/css/components/nestable.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Nestable ========================================================================== */ @@ -63,12 +63,12 @@ bottom: 0; left: 0; right: 0; - border: 1px dashed #dddddd; + border: 1px dashed #ddd; opacity: 1; } /* Empty List ========================================================================== */ -.uk-nestable:empty { +.uk-nestable-empty { min-height: 30px; } /* Sub-object `uk-nestable-handle` @@ -89,6 +89,10 @@ .uk-nestable-moving * { cursor: move; } +/* Fixes dragging items over iframes */ +.uk-nestable-moving iframe { + pointer-events: none; +} /* [data-nestable-action='toggle'] ========================================================================== */ /* diff --git a/media/uikit/css/components/nestable.gradient.css b/media/uikit-v2/css/components/nestable.gradient.css similarity index 90% rename from media/uikit/css/components/nestable.gradient.css rename to media/uikit-v2/css/components/nestable.gradient.css index 26c5060..ba503da 100644 --- a/media/uikit/css/components/nestable.gradient.css +++ b/media/uikit-v2/css/components/nestable.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Nestable ========================================================================== */ @@ -63,12 +63,12 @@ bottom: 0; left: 0; right: 0; - border: 1px dashed #dddddd; + border: 1px dashed #ddd; opacity: 1; } /* Empty List ========================================================================== */ -.uk-nestable:empty { +.uk-nestable-empty { min-height: 30px; } /* Sub-object `uk-nestable-handle` @@ -89,6 +89,10 @@ .uk-nestable-moving * { cursor: move; } +/* Fixes dragging items over iframes */ +.uk-nestable-moving iframe { + pointer-events: none; +} /* [data-nestable-action='toggle'] ========================================================================== */ /* @@ -133,7 +137,7 @@ border: 1px solid rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.3); background-origin: border-box; - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(to bottom, #ffffff, #eeeeee); - text-shadow: 0 1px 0 #ffffff; + background-image: -webkit-linear-gradient(top, #fff, #eee); + background-image: linear-gradient(to bottom, #fff, #eee); + text-shadow: 0 1px 0 #fff; } diff --git a/media/uikit-v2/css/components/nestable.gradient.min.css b/media/uikit-v2/css/components/nestable.gradient.min.css new file mode 100644 index 0000000..7d4088b --- /dev/null +++ b/media/uikit-v2/css/components/nestable.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-nestable{padding:0;list-style:none}.uk-nestable a,.uk-nestable img{-webkit-touch-callout:none}.uk-nestable-list{margin:0;padding-left:40px;list-style:none}.uk-nestable-item{touch-action:none}.uk-nestable-item+.uk-nestable-item{margin-top:10px}.uk-nestable-list:not(.uk-nestable-dragged)>.uk-nestable-item:first-child{margin-top:10px}.uk-nestable-dragged{position:absolute;z-index:1050;pointer-events:none;padding-left:0}.uk-nestable-placeholder{position:relative}.uk-nestable-placeholder>*{opacity:0}.uk-nestable-placeholder:after{content:'';position:absolute;top:0;bottom:0;left:0;right:0;border:1px dashed #ddd;opacity:1}.uk-nestable-empty{min-height:30px}.uk-nestable-handle{touch-action:none}.uk-nestable-handle:hover{cursor:move}.uk-nestable-moving,.uk-nestable-moving *{cursor:move}.uk-nestable-moving iframe{pointer-events:none}[data-nestable-action=toggle]{cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-nestable-toggle{display:inline-block;visibility:hidden}.uk-nestable-toggle:after{content:"\f147";font-family:FontAwesome}.uk-parent>:not(.uk-nestable-list) .uk-nestable-toggle{visibility:visible}.uk-collapsed .uk-nestable-list{display:none}.uk-collapsed .uk-nestable-toggle:after{content:"\f196"}.uk-nestable-panel{padding:5px;background:#f7f7f7;border-radius:4px;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);text-shadow:0 1px 0 #fff} \ No newline at end of file diff --git a/media/uikit/css/components/nestable.min.css b/media/uikit-v2/css/components/nestable.min.css similarity index 51% rename from media/uikit/css/components/nestable.min.css rename to media/uikit-v2/css/components/nestable.min.css index 94941fb..e7fdfbb 100644 --- a/media/uikit/css/components/nestable.min.css +++ b/media/uikit-v2/css/components/nestable.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-nestable{padding:0;list-style:none}.uk-nestable a,.uk-nestable img{-webkit-touch-callout:none}.uk-nestable-list{margin:0;padding-left:40px;list-style:none}.uk-nestable-item{touch-action:none}.uk-nestable-item+.uk-nestable-item{margin-top:10px}.uk-nestable-list:not(.uk-nestable-dragged)>.uk-nestable-item:first-child{margin-top:10px}.uk-nestable-dragged{position:absolute;z-index:1050;pointer-events:none;padding-left:0}.uk-nestable-placeholder{position:relative}.uk-nestable-placeholder>*{opacity:0}.uk-nestable-placeholder:after{content:'';position:absolute;top:0;bottom:0;left:0;right:0;border:1px dashed #ddd;opacity:1}.uk-nestable:empty{min-height:30px}.uk-nestable-handle{touch-action:none}.uk-nestable-handle:hover{cursor:move}.uk-nestable-moving,.uk-nestable-moving *{cursor:move}[data-nestable-action=toggle]{cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-nestable-toggle{display:inline-block;visibility:hidden}.uk-nestable-toggle:after{content:"\f147";font-family:FontAwesome}.uk-parent>:not(.uk-nestable-list) .uk-nestable-toggle{visibility:visible}.uk-collapsed .uk-nestable-list{display:none}.uk-collapsed .uk-nestable-toggle:after{content:"\f196"}.uk-nestable-panel{padding:5px;background:#f5f5f5} \ No newline at end of file +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-nestable{padding:0;list-style:none}.uk-nestable a,.uk-nestable img{-webkit-touch-callout:none}.uk-nestable-list{margin:0;padding-left:40px;list-style:none}.uk-nestable-item{touch-action:none}.uk-nestable-item+.uk-nestable-item{margin-top:10px}.uk-nestable-list:not(.uk-nestable-dragged)>.uk-nestable-item:first-child{margin-top:10px}.uk-nestable-dragged{position:absolute;z-index:1050;pointer-events:none;padding-left:0}.uk-nestable-placeholder{position:relative}.uk-nestable-placeholder>*{opacity:0}.uk-nestable-placeholder:after{content:'';position:absolute;top:0;bottom:0;left:0;right:0;border:1px dashed #ddd;opacity:1}.uk-nestable-empty{min-height:30px}.uk-nestable-handle{touch-action:none}.uk-nestable-handle:hover{cursor:move}.uk-nestable-moving,.uk-nestable-moving *{cursor:move}.uk-nestable-moving iframe{pointer-events:none}[data-nestable-action=toggle]{cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-nestable-toggle{display:inline-block;visibility:hidden}.uk-nestable-toggle:after{content:"\f147";font-family:FontAwesome}.uk-parent>:not(.uk-nestable-list) .uk-nestable-toggle{visibility:visible}.uk-collapsed .uk-nestable-list{display:none}.uk-collapsed .uk-nestable-toggle:after{content:"\f196"}.uk-nestable-panel{padding:5px;background:#f5f5f5} \ No newline at end of file diff --git a/media/uikit/css/components/notify.almost-flat.css b/media/uikit-v2/css/components/notify.almost-flat.css similarity index 91% rename from media/uikit/css/components/notify.almost-flat.css rename to media/uikit-v2/css/components/notify.almost-flat.css index 6421119..f663991 100644 --- a/media/uikit/css/components/notify.almost-flat.css +++ b/media/uikit-v2/css/components/notify.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Notify ========================================================================== */ @@ -10,7 +10,6 @@ top: 10px; left: 10px; z-index: 1040; - -moz-box-sizing: border-box; box-sizing: border-box; width: 350px; } @@ -52,12 +51,12 @@ position: relative; margin-bottom: 10px; padding: 15px; - background: #444444; - color: #ffffff; + background: #444; + color: #fff; font-size: 16px; line-height: 22px; cursor: pointer; - border: 1px solid #444444; + border: 1px solid #444; border-radius: 4px; } /* Close in notify @@ -69,14 +68,14 @@ .uk-notify-message:hover > .uk-close { visibility: visible; } -/* Modifier: `uk-alert-info` +/* Modifier: `uk-notify-message-primary` ========================================================================== */ .uk-notify-message-primary { background: #ebf7fd; color: #2d7091; border-color: rgba(45, 112, 145, 0.3); } -/* Modifier: `uk-alert-success` +/* Modifier: `uk-notify-message-success` ========================================================================== */ .uk-notify-message-success { background: #f2fae3; diff --git a/media/uikit-v2/css/components/notify.almost-flat.min.css b/media/uikit-v2/css/components/notify.almost-flat.min.css new file mode 100644 index 0000000..208f55b --- /dev/null +++ b/media/uikit-v2/css/components/notify.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-notify{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notify-bottom-right,.uk-notify-top-right{left:auto;right:10px}.uk-notify-bottom-center,.uk-notify-top-center{left:50%;margin-left:-175px}.uk-notify-bottom-center,.uk-notify-bottom-left,.uk-notify-bottom-right{top:auto;bottom:10px}@media (max-width:479px){.uk-notify{left:10px;right:10px;width:auto;margin:0}}.uk-notify-message{position:relative;margin-bottom:10px;padding:15px;background:#444;color:#fff;font-size:16px;line-height:22px;cursor:pointer;border:1px solid #444;border-radius:4px}.uk-notify-message>.uk-close{visibility:hidden;float:right}.uk-notify-message:hover>.uk-close{visibility:visible}.uk-notify-message-primary{background:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-notify-message-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-notify-message-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-notify-message-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)} \ No newline at end of file diff --git a/media/uikit/css/components/notify.css b/media/uikit-v2/css/components/notify.css similarity index 91% rename from media/uikit/css/components/notify.css rename to media/uikit-v2/css/components/notify.css index 42d7bce..9b93b4a 100644 --- a/media/uikit/css/components/notify.css +++ b/media/uikit-v2/css/components/notify.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Notify ========================================================================== */ @@ -10,7 +10,6 @@ top: 10px; left: 10px; z-index: 1040; - -moz-box-sizing: border-box; box-sizing: border-box; width: 350px; } @@ -52,8 +51,8 @@ position: relative; margin-bottom: 10px; padding: 15px; - background: #444444; - color: #ffffff; + background: #444; + color: #fff; font-size: 16px; line-height: 22px; cursor: pointer; @@ -67,13 +66,13 @@ .uk-notify-message:hover > .uk-close { visibility: visible; } -/* Modifier: `uk-alert-info` +/* Modifier: `uk-notify-message-primary` ========================================================================== */ .uk-notify-message-primary { background: #ebf7fd; color: #2d7091; } -/* Modifier: `uk-alert-success` +/* Modifier: `uk-notify-message-success` ========================================================================== */ .uk-notify-message-success { background: #f2fae3; diff --git a/media/uikit/css/components/notify.gradient.css b/media/uikit-v2/css/components/notify.gradient.css similarity index 91% rename from media/uikit/css/components/notify.gradient.css rename to media/uikit-v2/css/components/notify.gradient.css index 6421119..f663991 100644 --- a/media/uikit/css/components/notify.gradient.css +++ b/media/uikit-v2/css/components/notify.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Notify ========================================================================== */ @@ -10,7 +10,6 @@ top: 10px; left: 10px; z-index: 1040; - -moz-box-sizing: border-box; box-sizing: border-box; width: 350px; } @@ -52,12 +51,12 @@ position: relative; margin-bottom: 10px; padding: 15px; - background: #444444; - color: #ffffff; + background: #444; + color: #fff; font-size: 16px; line-height: 22px; cursor: pointer; - border: 1px solid #444444; + border: 1px solid #444; border-radius: 4px; } /* Close in notify @@ -69,14 +68,14 @@ .uk-notify-message:hover > .uk-close { visibility: visible; } -/* Modifier: `uk-alert-info` +/* Modifier: `uk-notify-message-primary` ========================================================================== */ .uk-notify-message-primary { background: #ebf7fd; color: #2d7091; border-color: rgba(45, 112, 145, 0.3); } -/* Modifier: `uk-alert-success` +/* Modifier: `uk-notify-message-success` ========================================================================== */ .uk-notify-message-success { background: #f2fae3; diff --git a/media/uikit-v2/css/components/notify.gradient.min.css b/media/uikit-v2/css/components/notify.gradient.min.css new file mode 100644 index 0000000..208f55b --- /dev/null +++ b/media/uikit-v2/css/components/notify.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-notify{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notify-bottom-right,.uk-notify-top-right{left:auto;right:10px}.uk-notify-bottom-center,.uk-notify-top-center{left:50%;margin-left:-175px}.uk-notify-bottom-center,.uk-notify-bottom-left,.uk-notify-bottom-right{top:auto;bottom:10px}@media (max-width:479px){.uk-notify{left:10px;right:10px;width:auto;margin:0}}.uk-notify-message{position:relative;margin-bottom:10px;padding:15px;background:#444;color:#fff;font-size:16px;line-height:22px;cursor:pointer;border:1px solid #444;border-radius:4px}.uk-notify-message>.uk-close{visibility:hidden;float:right}.uk-notify-message:hover>.uk-close{visibility:visible}.uk-notify-message-primary{background:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-notify-message-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-notify-message-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-notify-message-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)} \ No newline at end of file diff --git a/media/uikit-v2/css/components/notify.min.css b/media/uikit-v2/css/components/notify.min.css new file mode 100644 index 0000000..6e257c6 --- /dev/null +++ b/media/uikit-v2/css/components/notify.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-notify{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notify-bottom-right,.uk-notify-top-right{left:auto;right:10px}.uk-notify-bottom-center,.uk-notify-top-center{left:50%;margin-left:-175px}.uk-notify-bottom-center,.uk-notify-bottom-left,.uk-notify-bottom-right{top:auto;bottom:10px}@media (max-width:479px){.uk-notify{left:10px;right:10px;width:auto;margin:0}}.uk-notify-message{position:relative;margin-bottom:10px;padding:15px;background:#444;color:#fff;font-size:16px;line-height:22px;cursor:pointer}.uk-notify-message>.uk-close{visibility:hidden;float:right}.uk-notify-message:hover>.uk-close{visibility:visible}.uk-notify-message-primary{background:#ebf7fd;color:#2d7091}.uk-notify-message-success{background:#f2fae3;color:#659f13}.uk-notify-message-warning{background:#fffceb;color:#e28327}.uk-notify-message-danger{background:#fff1f0;color:#d85030} \ No newline at end of file diff --git a/media/uikit/css/components/placeholder.almost-flat.css b/media/uikit-v2/css/components/placeholder.almost-flat.css similarity index 83% rename from media/uikit/css/components/placeholder.almost-flat.css rename to media/uikit-v2/css/components/placeholder.almost-flat.css index 7b72cfe..6cdb597 100644 --- a/media/uikit/css/components/placeholder.almost-flat.css +++ b/media/uikit-v2/css/components/placeholder.almost-flat.css @@ -1,13 +1,13 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Placeholder ========================================================================== */ .uk-placeholder { margin-bottom: 15px; - padding: 20px; - border: 1px dashed #dddddd; + padding: 15px; + border: 1px dashed #ddd; background: #fafafa; - color: #444444; + color: #444; } /* * Add margin if adjacent element diff --git a/media/uikit-v2/css/components/placeholder.almost-flat.min.css b/media/uikit-v2/css/components/placeholder.almost-flat.min.css new file mode 100644 index 0000000..c6a36cd --- /dev/null +++ b/media/uikit-v2/css/components/placeholder.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-placeholder{margin-bottom:15px;padding:15px;border:1px dashed #ddd;background:#fafafa;color:#444}*+.uk-placeholder{margin-top:15px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder-large{padding-top:80px;padding-bottom:80px} \ No newline at end of file diff --git a/media/uikit/css/components/placeholder.css b/media/uikit-v2/css/components/placeholder.css similarity index 83% rename from media/uikit/css/components/placeholder.css rename to media/uikit-v2/css/components/placeholder.css index 7b72cfe..6cdb597 100644 --- a/media/uikit/css/components/placeholder.css +++ b/media/uikit-v2/css/components/placeholder.css @@ -1,13 +1,13 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Placeholder ========================================================================== */ .uk-placeholder { margin-bottom: 15px; - padding: 20px; - border: 1px dashed #dddddd; + padding: 15px; + border: 1px dashed #ddd; background: #fafafa; - color: #444444; + color: #444; } /* * Add margin if adjacent element diff --git a/media/uikit/css/components/placeholder.gradient.css b/media/uikit-v2/css/components/placeholder.gradient.css similarity index 83% rename from media/uikit/css/components/placeholder.gradient.css rename to media/uikit-v2/css/components/placeholder.gradient.css index 7b72cfe..6cdb597 100644 --- a/media/uikit/css/components/placeholder.gradient.css +++ b/media/uikit-v2/css/components/placeholder.gradient.css @@ -1,13 +1,13 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Placeholder ========================================================================== */ .uk-placeholder { margin-bottom: 15px; - padding: 20px; - border: 1px dashed #dddddd; + padding: 15px; + border: 1px dashed #ddd; background: #fafafa; - color: #444444; + color: #444; } /* * Add margin if adjacent element diff --git a/media/uikit-v2/css/components/placeholder.gradient.min.css b/media/uikit-v2/css/components/placeholder.gradient.min.css new file mode 100644 index 0000000..c6a36cd --- /dev/null +++ b/media/uikit-v2/css/components/placeholder.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-placeholder{margin-bottom:15px;padding:15px;border:1px dashed #ddd;background:#fafafa;color:#444}*+.uk-placeholder{margin-top:15px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder-large{padding-top:80px;padding-bottom:80px} \ No newline at end of file diff --git a/media/uikit-v2/css/components/placeholder.min.css b/media/uikit-v2/css/components/placeholder.min.css new file mode 100644 index 0000000..c6a36cd --- /dev/null +++ b/media/uikit-v2/css/components/placeholder.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-placeholder{margin-bottom:15px;padding:15px;border:1px dashed #ddd;background:#fafafa;color:#444}*+.uk-placeholder{margin-top:15px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder-large{padding-top:80px;padding-bottom:80px} \ No newline at end of file diff --git a/media/uikit/css/components/progress.almost-flat.css b/media/uikit-v2/css/components/progress.almost-flat.css similarity index 96% rename from media/uikit/css/components/progress.almost-flat.css rename to media/uikit-v2/css/components/progress.almost-flat.css index baf0e68..f9582d6 100644 --- a/media/uikit/css/components/progress.almost-flat.css +++ b/media/uikit-v2/css/components/progress.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Progress ========================================================================== */ @@ -7,7 +7,6 @@ * 2. Vertical alignment if text is used */ .uk-progress { - -moz-box-sizing: border-box; box-sizing: border-box; height: 20px; margin-bottom: 15px; @@ -41,7 +40,7 @@ transition: width 0.6s ease; /* 2 */ font-size: 12px; - color: #ffffff; + color: #fff; text-align: center; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1); diff --git a/media/uikit-v2/css/components/progress.almost-flat.min.css b/media/uikit-v2/css/components/progress.almost-flat.min.css new file mode 100644 index 0000000..ab0c9aa --- /dev/null +++ b/media/uikit-v2/css/components/progress.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-progress{box-sizing:border-box;height:20px;margin-bottom:15px;background:#f5f5f5;overflow:hidden;line-height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);border-radius:4px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#00a8e6;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#8cc14c}.uk-progress-warning .uk-progress-bar{background-color:#faa732}.uk-progress-danger .uk-progress-bar{background-color:#da314b}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}.uk-progress-mini,.uk-progress-small{border-radius:500px} \ No newline at end of file diff --git a/media/uikit/css/components/progress.css b/media/uikit-v2/css/components/progress.css similarity index 94% rename from media/uikit/css/components/progress.css rename to media/uikit-v2/css/components/progress.css index 8ae61e5..ee29654 100644 --- a/media/uikit/css/components/progress.css +++ b/media/uikit-v2/css/components/progress.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Progress ========================================================================== */ @@ -7,11 +7,10 @@ * 2. Vertical alignment if text is used */ .uk-progress { - -moz-box-sizing: border-box; box-sizing: border-box; height: 20px; margin-bottom: 15px; - background: #eeeeee; + background: #eee; /* 1 */ overflow: hidden; /* 2 */ @@ -39,7 +38,7 @@ transition: width 0.6s ease; /* 2 */ font-size: 12px; - color: #ffffff; + color: #fff; text-align: center; } /* Size modifiers diff --git a/media/uikit/css/components/progress.gradient.css b/media/uikit-v2/css/components/progress.gradient.css similarity index 96% rename from media/uikit/css/components/progress.gradient.css rename to media/uikit-v2/css/components/progress.gradient.css index 452d8f2..7672dd2 100644 --- a/media/uikit/css/components/progress.gradient.css +++ b/media/uikit-v2/css/components/progress.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Progress ========================================================================== */ @@ -7,7 +7,6 @@ * 2. Vertical alignment if text is used */ .uk-progress { - -moz-box-sizing: border-box; box-sizing: border-box; height: 20px; margin-bottom: 15px; @@ -41,7 +40,7 @@ transition: width 0.6s ease; /* 2 */ font-size: 12px; - color: #ffffff; + color: #fff; text-align: center; background-image: -webkit-linear-gradient(top, #00b4f5, #008dc5); background-image: linear-gradient(to bottom, #00b4f5, #008dc5); diff --git a/media/uikit-v2/css/components/progress.gradient.min.css b/media/uikit-v2/css/components/progress.gradient.min.css new file mode 100644 index 0000000..7ce7f71 --- /dev/null +++ b/media/uikit-v2/css/components/progress.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-progress{box-sizing:border-box;height:20px;margin-bottom:15px;background:#f7f7f7;overflow:hidden;line-height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.07),inset 0 2px 2px rgba(0,0,0,.07);border-radius:4px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#009dd8;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);box-shadow:inset 0 -1px 0 rgba(0,0,0,.2),inset 0 0 0 1px rgba(0,0,0,.1);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#82bb42;background-image:-webkit-linear-gradient(top,#9fd256,#6fac34);background-image:linear-gradient(to bottom,#9fd256,#6fac34)}.uk-progress-warning .uk-progress-bar{background-color:#f9a124;background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406)}.uk-progress-danger .uk-progress-bar{background-color:#d32c46;background-image:-webkit-linear-gradient(top,#ee465a,#c11a39);background-image:linear-gradient(to bottom,#ee465a,#c11a39)}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}.uk-progress-mini,.uk-progress-small{border-radius:500px} \ No newline at end of file diff --git a/media/uikit-v2/css/components/progress.min.css b/media/uikit-v2/css/components/progress.min.css new file mode 100644 index 0000000..df31ff1 --- /dev/null +++ b/media/uikit-v2/css/components/progress.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-progress{box-sizing:border-box;height:20px;margin-bottom:15px;background:#eee;overflow:hidden;line-height:20px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#00a8e6;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#8cc14c}.uk-progress-warning .uk-progress-bar{background-color:#faa732}.uk-progress-danger .uk-progress-bar{background-color:#da314b}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}} \ No newline at end of file diff --git a/media/uikit/css/components/search.almost-flat.css b/media/uikit-v2/css/components/search.almost-flat.css similarity index 87% rename from media/uikit/css/components/search.almost-flat.css rename to media/uikit-v2/css/components/search.almost-flat.css index 513289b..02eb25d 100644 --- a/media/uikit/css/components/search.almost-flat.css +++ b/media/uikit-v2/css/components/search.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Search ========================================================================== */ @@ -66,7 +66,6 @@ */ .uk-search-field { /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 2 */ margin: 0; @@ -74,7 +73,7 @@ border-radius: 0; /* 4 */ font: inherit; - color: #444444; + color: #444; /* 5 */ -webkit-appearance: none; /* 6 */ @@ -83,19 +82,19 @@ padding: 0 0 0 30px; border: 1px solid rgba(0, 0, 0, 0); background: rgba(0, 0, 0, 0); - -webkit-transition: all linear 0.2s; - transition: all linear 0.2s; + -webkit-transition: all 0.2s linear; + transition: all 0.2s linear; vertical-align: middle; } /* Placeholder */ .uk-search-field:-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-search-field::-moz-placeholder { - color: #999999; + color: #999; } .uk-search-field::-webkit-input-placeholder { - color: #999999; + color: #999; } /* Focus */ .uk-search-field:focus { @@ -111,8 +110,8 @@ .uk-dropdown-search { width: 300px; margin-top: 0; - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } .uk-open > .uk-dropdown-search { -webkit-animation: uk-slide-top-fixed 0.2s ease-in-out; @@ -131,7 +130,7 @@ * Items */ .uk-nav-search > li > a { - color: #444444; + color: #444; } /* * Active @@ -139,7 +138,7 @@ */ .uk-nav-search > li.uk-active > a { background: #00a8e6; - color: #ffffff; + color: #fff; /* 1 */ outline: none; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); @@ -149,22 +148,22 @@ * Sub-object: `uk-nav-header` */ .uk-nav-search .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-search .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-search ul a { - color: #0077dd; + color: #07D; } .uk-nav-search ul a:hover { - color: #005599; + color: #059; } /* Search in offcanvas ========================================================================== */ @@ -173,20 +172,20 @@ margin: 20px 15px; } .uk-offcanvas .uk-search:before { - color: #777777; + color: #777; } .uk-offcanvas .uk-search-field { width: 100%; border-color: rgba(0, 0, 0, 0); background: #1a1a1a; - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-search-field:-ms-input-placeholder { - color: #777777 !important; + color: #777 !important; } .uk-offcanvas .uk-search-field::-moz-placeholder { - color: #777777; + color: #777; } .uk-offcanvas .uk-search-field::-webkit-input-placeholder { - color: #777777; + color: #777; } diff --git a/media/uikit-v2/css/components/search.almost-flat.min.css b/media/uikit-v2/css/components/search.almost-flat.min.css new file mode 100644 index 0000000..9fff2fd --- /dev/null +++ b/media/uikit-v2/css/components/search.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-search{display:inline-block;position:relative;margin:0}.uk-search:before{content:"\f002";position:absolute;top:0;left:0;width:30px;line-height:30px;text-align:center;font-family:FontAwesome;font-size:14px;color:rgba(0,0,0,.2)}.uk-search-field::-moz-focus-inner{border:0;padding:0}.uk-search-field::-webkit-search-cancel-button,.uk-search-field::-webkit-search-decoration{-webkit-appearance:none}.uk-search-field::-ms-clear{display:none}.uk-search-field::-moz-placeholder{opacity:1}.uk-search-field{box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:#444;-webkit-appearance:none;width:120px;height:30px;padding:0 0 0 30px;border:1px solid transparent;background:rgba(0,0,0,0);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.uk-search-field:-ms-input-placeholder{color:#999!important}.uk-search-field::-moz-placeholder{color:#999}.uk-search-field::-webkit-input-placeholder{color:#999}.uk-search-field:focus{outline:0}.uk-search-field:focus,.uk-search.uk-active .uk-search-field{width:180px}.uk-dropdown-search{width:300px;margin-top:0;background:#fff;color:#444}.uk-open>.uk-dropdown-search{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-navbar-flip .uk-dropdown-search{margin-top:12px;margin-right:-16px}.uk-nav-search>li>a{color:#444}.uk-nav-search>li.uk-active>a{background:#00a8e6;color:#fff;outline:0;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-search .uk-nav-header{color:#999}.uk-nav-search .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-search ul a{color:#07D}.uk-nav-search ul a:hover{color:#059}.uk-offcanvas .uk-search{display:block;margin:20px 15px}.uk-offcanvas .uk-search:before{color:#777}.uk-offcanvas .uk-search-field{width:100%;border-color:transparent;background:#1a1a1a;color:#ccc}.uk-offcanvas .uk-search-field:-ms-input-placeholder{color:#777!important}.uk-offcanvas .uk-search-field::-moz-placeholder{color:#777}.uk-offcanvas .uk-search-field::-webkit-input-placeholder{color:#777} \ No newline at end of file diff --git a/media/uikit/css/components/search.css b/media/uikit-v2/css/components/search.css similarity index 88% rename from media/uikit/css/components/search.css rename to media/uikit-v2/css/components/search.css index 5cb3071..cddc073 100644 --- a/media/uikit/css/components/search.css +++ b/media/uikit-v2/css/components/search.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Search ========================================================================== */ @@ -66,7 +66,6 @@ */ .uk-search-field { /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 2 */ margin: 0; @@ -74,7 +73,7 @@ border-radius: 0; /* 4 */ font: inherit; - color: #444444; + color: #444; /* 5 */ -webkit-appearance: none; /* 6 */ @@ -83,19 +82,19 @@ padding: 0 0 0 30px; border: 1px solid rgba(0, 0, 0, 0); background: rgba(0, 0, 0, 0); - -webkit-transition: all linear 0.2s; - transition: all linear 0.2s; + -webkit-transition: all 0.2s linear; + transition: all 0.2s linear; vertical-align: middle; } /* Placeholder */ .uk-search-field:-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-search-field::-moz-placeholder { - color: #999999; + color: #999; } .uk-search-field::-webkit-input-placeholder { - color: #999999; + color: #999; } /* Focus */ .uk-search-field:focus { @@ -112,7 +111,7 @@ width: 300px; margin-top: 0; background: #f5f5f5; - color: #444444; + color: #444; } .uk-open > .uk-dropdown-search { -webkit-animation: uk-slide-top-fixed 0.2s ease-in-out; @@ -131,7 +130,7 @@ * Items */ .uk-nav-search > li > a { - color: #444444; + color: #444; } /* * Active @@ -139,7 +138,7 @@ */ .uk-nav-search > li.uk-active > a { background: #00a8e6; - color: #ffffff; + color: #fff; /* 1 */ outline: none; } @@ -147,22 +146,22 @@ * Sub-object: `uk-nav-header` */ .uk-nav-search .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-search .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-search ul a { - color: #0077dd; + color: #07D; } .uk-nav-search ul a:hover { - color: #005599; + color: #059; } /* Search in offcanvas ========================================================================== */ @@ -171,20 +170,20 @@ margin: 20px 15px; } .uk-offcanvas .uk-search:before { - color: #777777; + color: #777; } .uk-offcanvas .uk-search-field { width: 100%; border-color: rgba(0, 0, 0, 0); background: #1a1a1a; - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-search-field:-ms-input-placeholder { - color: #777777 !important; + color: #777 !important; } .uk-offcanvas .uk-search-field::-moz-placeholder { - color: #777777; + color: #777; } .uk-offcanvas .uk-search-field::-webkit-input-placeholder { - color: #777777; + color: #777; } diff --git a/media/uikit/css/components/search.gradient.css b/media/uikit-v2/css/components/search.gradient.css similarity index 87% rename from media/uikit/css/components/search.gradient.css rename to media/uikit-v2/css/components/search.gradient.css index b5853b0..ecafcad 100644 --- a/media/uikit/css/components/search.gradient.css +++ b/media/uikit-v2/css/components/search.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Search ========================================================================== */ @@ -66,7 +66,6 @@ */ .uk-search-field { /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 2 */ margin: 0; @@ -74,7 +73,7 @@ border-radius: 0; /* 4 */ font: inherit; - color: #444444; + color: #444; /* 5 */ -webkit-appearance: none; /* 6 */ @@ -83,19 +82,19 @@ padding: 0 0 0 30px; border: 1px solid rgba(0, 0, 0, 0); background: rgba(0, 0, 0, 0); - -webkit-transition: all linear 0.2s; - transition: all linear 0.2s; + -webkit-transition: all 0.2s linear; + transition: all 0.2s linear; vertical-align: middle; } /* Placeholder */ .uk-search-field:-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-search-field::-moz-placeholder { - color: #999999; + color: #999; } .uk-search-field::-webkit-input-placeholder { - color: #999999; + color: #999; } /* Focus */ .uk-search-field:focus { @@ -111,8 +110,8 @@ .uk-dropdown-search { width: 300px; margin-top: 0; - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } .uk-open > .uk-dropdown-search { -webkit-animation: uk-slide-top-fixed 0.2s ease-in-out; @@ -131,7 +130,7 @@ * Items */ .uk-nav-search > li > a { - color: #444444; + color: #444; } /* * Active @@ -139,7 +138,7 @@ */ .uk-nav-search > li.uk-active > a { background: #009dd8; - color: #ffffff; + color: #fff; /* 1 */ outline: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); @@ -149,22 +148,22 @@ * Sub-object: `uk-nav-header` */ .uk-nav-search .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-search .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-search ul a { - color: #0077dd; + color: #07D; } .uk-nav-search ul a:hover { - color: #005599; + color: #059; } /* Search in offcanvas ========================================================================== */ @@ -173,20 +172,20 @@ margin: 20px 15px; } .uk-offcanvas .uk-search:before { - color: #777777; + color: #777; } .uk-offcanvas .uk-search-field { width: 100%; border-color: rgba(0, 0, 0, 0); background: #1a1a1a; - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-search-field:-ms-input-placeholder { - color: #777777 !important; + color: #777 !important; } .uk-offcanvas .uk-search-field::-moz-placeholder { - color: #777777; + color: #777; } .uk-offcanvas .uk-search-field::-webkit-input-placeholder { - color: #777777; + color: #777; } diff --git a/media/uikit-v2/css/components/search.gradient.min.css b/media/uikit-v2/css/components/search.gradient.min.css new file mode 100644 index 0000000..7d56488 --- /dev/null +++ b/media/uikit-v2/css/components/search.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-search{display:inline-block;position:relative;margin:0}.uk-search:before{content:"\f002";position:absolute;top:0;left:0;width:30px;line-height:30px;text-align:center;font-family:FontAwesome;font-size:14px;color:rgba(0,0,0,.2)}.uk-search-field::-moz-focus-inner{border:0;padding:0}.uk-search-field::-webkit-search-cancel-button,.uk-search-field::-webkit-search-decoration{-webkit-appearance:none}.uk-search-field::-ms-clear{display:none}.uk-search-field::-moz-placeholder{opacity:1}.uk-search-field{box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:#444;-webkit-appearance:none;width:120px;height:30px;padding:0 0 0 30px;border:1px solid transparent;background:rgba(0,0,0,0);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.uk-search-field:-ms-input-placeholder{color:#999!important}.uk-search-field::-moz-placeholder{color:#999}.uk-search-field::-webkit-input-placeholder{color:#999}.uk-search-field:focus{outline:0}.uk-search-field:focus,.uk-search.uk-active .uk-search-field{width:180px}.uk-dropdown-search{width:300px;margin-top:0;background:#fff;color:#444}.uk-open>.uk-dropdown-search{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-navbar-flip .uk-dropdown-search{margin-top:12px;margin-right:-16px}.uk-nav-search>li>a{color:#444}.uk-nav-search>li.uk-active>a{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-search .uk-nav-header{color:#999}.uk-nav-search .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-search ul a{color:#07D}.uk-nav-search ul a:hover{color:#059}.uk-offcanvas .uk-search{display:block;margin:20px 15px}.uk-offcanvas .uk-search:before{color:#777}.uk-offcanvas .uk-search-field{width:100%;border-color:transparent;background:#1a1a1a;color:#ccc}.uk-offcanvas .uk-search-field:-ms-input-placeholder{color:#777!important}.uk-offcanvas .uk-search-field::-moz-placeholder{color:#777}.uk-offcanvas .uk-search-field::-webkit-input-placeholder{color:#777} \ No newline at end of file diff --git a/media/uikit-v2/css/components/search.min.css b/media/uikit-v2/css/components/search.min.css new file mode 100644 index 0000000..b624d68 --- /dev/null +++ b/media/uikit-v2/css/components/search.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-search{display:inline-block;position:relative;margin:0}.uk-search:before{content:"\f002";position:absolute;top:0;left:0;width:30px;line-height:30px;text-align:center;font-family:FontAwesome;font-size:14px;color:rgba(0,0,0,.2)}.uk-search-field::-moz-focus-inner{border:0;padding:0}.uk-search-field::-webkit-search-cancel-button,.uk-search-field::-webkit-search-decoration{-webkit-appearance:none}.uk-search-field::-ms-clear{display:none}.uk-search-field::-moz-placeholder{opacity:1}.uk-search-field{box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:#444;-webkit-appearance:none;width:120px;height:30px;padding:0 0 0 30px;border:1px solid transparent;background:rgba(0,0,0,0);-webkit-transition:all .2s linear;transition:all .2s linear;vertical-align:middle}.uk-search-field:-ms-input-placeholder{color:#999!important}.uk-search-field::-moz-placeholder{color:#999}.uk-search-field::-webkit-input-placeholder{color:#999}.uk-search-field:focus{outline:0}.uk-search-field:focus,.uk-search.uk-active .uk-search-field{width:180px}.uk-dropdown-search{width:300px;margin-top:0;background:#f5f5f5;color:#444}.uk-open>.uk-dropdown-search{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-navbar-flip .uk-dropdown-search{margin-top:5px;margin-right:-15px}.uk-nav-search>li>a{color:#444}.uk-nav-search>li.uk-active>a{background:#00a8e6;color:#fff;outline:0}.uk-nav-search .uk-nav-header{color:#999}.uk-nav-search .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-search ul a{color:#07D}.uk-nav-search ul a:hover{color:#059}.uk-offcanvas .uk-search{display:block;margin:20px 15px}.uk-offcanvas .uk-search:before{color:#777}.uk-offcanvas .uk-search-field{width:100%;border-color:transparent;background:#1a1a1a;color:#ccc}.uk-offcanvas .uk-search-field:-ms-input-placeholder{color:#777!important}.uk-offcanvas .uk-search-field::-moz-placeholder{color:#777}.uk-offcanvas .uk-search-field::-webkit-input-placeholder{color:#777} \ No newline at end of file diff --git a/media/uikit/css/components/slidenav.almost-flat.css b/media/uikit-v2/css/components/slidenav.almost-flat.css similarity index 95% rename from media/uikit/css/components/slidenav.almost-flat.css rename to media/uikit-v2/css/components/slidenav.almost-flat.css index 7445f25..73f7582 100644 --- a/media/uikit/css/components/slidenav.almost-flat.css +++ b/media/uikit-v2/css/components/slidenav.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slidenav ========================================================================== */ @@ -11,7 +11,6 @@ /* 1 */ display: inline-block; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; width: 60px; height: 60px; diff --git a/media/uikit-v2/css/components/slidenav.almost-flat.min.css b/media/uikit-v2/css/components/slidenav.almost-flat.min.css new file mode 100644 index 0000000..e2d2c76 --- /dev/null +++ b/media/uikit-v2/css/components/slidenav.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-slidenav{display:inline-block;box-sizing:border-box;width:60px;height:60px;line-height:60px;color:rgba(50,50,50,.4);font-size:60px;text-align:center}.uk-slidenav:focus,.uk-slidenav:hover{outline:0;text-decoration:none;color:rgba(50,50,50,.7);cursor:pointer}.uk-slidenav:active{color:rgba(50,50,50,.9)}.uk-slidenav-previous:before{content:"\f104";font-family:FontAwesome}.uk-slidenav-next:before{content:"\f105";font-family:FontAwesome}.uk-slidenav-position{position:relative}.uk-slidenav-position .uk-slidenav{display:none;position:absolute;top:50%;z-index:1;margin-top:-30px}.uk-slidenav-position:hover .uk-slidenav{display:block}.uk-slidenav-position .uk-slidenav-previous{left:20px}.uk-slidenav-position .uk-slidenav-next{right:20px}.uk-slidenav-contrast{color:rgba(255,255,255,.5)}.uk-slidenav-contrast:focus,.uk-slidenav-contrast:hover{color:rgba(255,255,255,.7)}.uk-slidenav-contrast:active{color:rgba(255,255,255,.9)} \ No newline at end of file diff --git a/media/uikit/css/components/slidenav.css b/media/uikit-v2/css/components/slidenav.css similarity index 95% rename from media/uikit/css/components/slidenav.css rename to media/uikit-v2/css/components/slidenav.css index 7445f25..73f7582 100644 --- a/media/uikit/css/components/slidenav.css +++ b/media/uikit-v2/css/components/slidenav.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slidenav ========================================================================== */ @@ -11,7 +11,6 @@ /* 1 */ display: inline-block; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; width: 60px; height: 60px; diff --git a/media/uikit/css/components/slidenav.gradient.css b/media/uikit-v2/css/components/slidenav.gradient.css similarity index 95% rename from media/uikit/css/components/slidenav.gradient.css rename to media/uikit-v2/css/components/slidenav.gradient.css index 7445f25..73f7582 100644 --- a/media/uikit/css/components/slidenav.gradient.css +++ b/media/uikit-v2/css/components/slidenav.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slidenav ========================================================================== */ @@ -11,7 +11,6 @@ /* 1 */ display: inline-block; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; width: 60px; height: 60px; diff --git a/media/uikit-v2/css/components/slidenav.gradient.min.css b/media/uikit-v2/css/components/slidenav.gradient.min.css new file mode 100644 index 0000000..e2d2c76 --- /dev/null +++ b/media/uikit-v2/css/components/slidenav.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-slidenav{display:inline-block;box-sizing:border-box;width:60px;height:60px;line-height:60px;color:rgba(50,50,50,.4);font-size:60px;text-align:center}.uk-slidenav:focus,.uk-slidenav:hover{outline:0;text-decoration:none;color:rgba(50,50,50,.7);cursor:pointer}.uk-slidenav:active{color:rgba(50,50,50,.9)}.uk-slidenav-previous:before{content:"\f104";font-family:FontAwesome}.uk-slidenav-next:before{content:"\f105";font-family:FontAwesome}.uk-slidenav-position{position:relative}.uk-slidenav-position .uk-slidenav{display:none;position:absolute;top:50%;z-index:1;margin-top:-30px}.uk-slidenav-position:hover .uk-slidenav{display:block}.uk-slidenav-position .uk-slidenav-previous{left:20px}.uk-slidenav-position .uk-slidenav-next{right:20px}.uk-slidenav-contrast{color:rgba(255,255,255,.5)}.uk-slidenav-contrast:focus,.uk-slidenav-contrast:hover{color:rgba(255,255,255,.7)}.uk-slidenav-contrast:active{color:rgba(255,255,255,.9)} \ No newline at end of file diff --git a/media/uikit-v2/css/components/slidenav.min.css b/media/uikit-v2/css/components/slidenav.min.css new file mode 100644 index 0000000..e2d2c76 --- /dev/null +++ b/media/uikit-v2/css/components/slidenav.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-slidenav{display:inline-block;box-sizing:border-box;width:60px;height:60px;line-height:60px;color:rgba(50,50,50,.4);font-size:60px;text-align:center}.uk-slidenav:focus,.uk-slidenav:hover{outline:0;text-decoration:none;color:rgba(50,50,50,.7);cursor:pointer}.uk-slidenav:active{color:rgba(50,50,50,.9)}.uk-slidenav-previous:before{content:"\f104";font-family:FontAwesome}.uk-slidenav-next:before{content:"\f105";font-family:FontAwesome}.uk-slidenav-position{position:relative}.uk-slidenav-position .uk-slidenav{display:none;position:absolute;top:50%;z-index:1;margin-top:-30px}.uk-slidenav-position:hover .uk-slidenav{display:block}.uk-slidenav-position .uk-slidenav-previous{left:20px}.uk-slidenav-position .uk-slidenav-next{right:20px}.uk-slidenav-contrast{color:rgba(255,255,255,.5)}.uk-slidenav-contrast:focus,.uk-slidenav-contrast:hover{color:rgba(255,255,255,.7)}.uk-slidenav-contrast:active{color:rgba(255,255,255,.9)} \ No newline at end of file diff --git a/media/uikit/css/components/slider.almost-flat.css b/media/uikit-v2/css/components/slider.almost-flat.css similarity index 90% rename from media/uikit/css/components/slider.almost-flat.css rename to media/uikit-v2/css/components/slider.almost-flat.css index 2f16434..cee68da 100644 --- a/media/uikit/css/components/slider.almost-flat.css +++ b/media/uikit-v2/css/components/slider.almost-flat.css @@ -1,7 +1,16 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slider ========================================================================== */ +/* + * RTL Compatibility + */ +[data-uk-slider] { + direction: ltr; +} +html[dir="rtl"] .uk-slider > * { + direction: rtl; +} /* * 1. Create position context * 2. Create stacking context to prevent z-index issues with other components diff --git a/media/uikit-v2/css/components/slider.almost-flat.min.css b/media/uikit-v2/css/components/slider.almost-flat.min.css new file mode 100644 index 0000000..e40e75d --- /dev/null +++ b/media/uikit-v2/css/components/slider.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +[data-uk-slider]{direction:ltr}html[dir=rtl] .uk-slider>*{direction:rtl}.uk-slider{position:relative;z-index:0;touch-action:pan-y}.uk-slider:not(.uk-grid){margin:0;padding:0;list-style:none}.uk-slider>*{position:absolute;top:0;left:0}.uk-slider-container{overflow:hidden}.uk-slider:not(.uk-drag){-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.uk-slider.uk-drag{cursor:col-resize;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-slider a,.uk-slider img{-webkit-user-drag:none;user-drag:none;-webkit-touch-callout:none}.uk-slider img{pointer-events:none}.uk-slider-fullscreen,.uk-slider-fullscreen>li{height:100vh} \ No newline at end of file diff --git a/media/uikit/css/components/slider.css b/media/uikit-v2/css/components/slider.css similarity index 90% rename from media/uikit/css/components/slider.css rename to media/uikit-v2/css/components/slider.css index 2f16434..cee68da 100644 --- a/media/uikit/css/components/slider.css +++ b/media/uikit-v2/css/components/slider.css @@ -1,7 +1,16 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slider ========================================================================== */ +/* + * RTL Compatibility + */ +[data-uk-slider] { + direction: ltr; +} +html[dir="rtl"] .uk-slider > * { + direction: rtl; +} /* * 1. Create position context * 2. Create stacking context to prevent z-index issues with other components diff --git a/media/uikit/css/components/slider.gradient.css b/media/uikit-v2/css/components/slider.gradient.css similarity index 90% rename from media/uikit/css/components/slider.gradient.css rename to media/uikit-v2/css/components/slider.gradient.css index 2f16434..cee68da 100644 --- a/media/uikit/css/components/slider.gradient.css +++ b/media/uikit-v2/css/components/slider.gradient.css @@ -1,7 +1,16 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slider ========================================================================== */ +/* + * RTL Compatibility + */ +[data-uk-slider] { + direction: ltr; +} +html[dir="rtl"] .uk-slider > * { + direction: rtl; +} /* * 1. Create position context * 2. Create stacking context to prevent z-index issues with other components diff --git a/media/uikit-v2/css/components/slider.gradient.min.css b/media/uikit-v2/css/components/slider.gradient.min.css new file mode 100644 index 0000000..e40e75d --- /dev/null +++ b/media/uikit-v2/css/components/slider.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +[data-uk-slider]{direction:ltr}html[dir=rtl] .uk-slider>*{direction:rtl}.uk-slider{position:relative;z-index:0;touch-action:pan-y}.uk-slider:not(.uk-grid){margin:0;padding:0;list-style:none}.uk-slider>*{position:absolute;top:0;left:0}.uk-slider-container{overflow:hidden}.uk-slider:not(.uk-drag){-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.uk-slider.uk-drag{cursor:col-resize;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-slider a,.uk-slider img{-webkit-user-drag:none;user-drag:none;-webkit-touch-callout:none}.uk-slider img{pointer-events:none}.uk-slider-fullscreen,.uk-slider-fullscreen>li{height:100vh} \ No newline at end of file diff --git a/media/uikit-v2/css/components/slider.min.css b/media/uikit-v2/css/components/slider.min.css new file mode 100644 index 0000000..e40e75d --- /dev/null +++ b/media/uikit-v2/css/components/slider.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +[data-uk-slider]{direction:ltr}html[dir=rtl] .uk-slider>*{direction:rtl}.uk-slider{position:relative;z-index:0;touch-action:pan-y}.uk-slider:not(.uk-grid){margin:0;padding:0;list-style:none}.uk-slider>*{position:absolute;top:0;left:0}.uk-slider-container{overflow:hidden}.uk-slider:not(.uk-drag){-webkit-transition:-webkit-transform .2s linear;transition:transform .2s linear}.uk-slider.uk-drag{cursor:col-resize;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-slider a,.uk-slider img{-webkit-user-drag:none;user-drag:none;-webkit-touch-callout:none}.uk-slider img{pointer-events:none}.uk-slider-fullscreen,.uk-slider-fullscreen>li{height:100vh} \ No newline at end of file diff --git a/media/uikit/css/components/slideshow.almost-flat.css b/media/uikit-v2/css/components/slideshow.almost-flat.css similarity index 95% rename from media/uikit/css/components/slideshow.almost-flat.css rename to media/uikit-v2/css/components/slideshow.almost-flat.css index 8b6d69c..7c8ba2d 100644 --- a/media/uikit/css/components/slideshow.almost-flat.css +++ b/media/uikit-v2/css/components/slideshow.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slideshow ========================================================================== */ @@ -76,6 +76,10 @@ /* * Fade */ +.uk-slideshow-fade-in { + -webkit-animation: uk-fade 0.5s linear; + animation: uk-fade 0.5s linear; +} .uk-slideshow-fade-out { -webkit-animation: uk-fade 0.5s linear reverse; animation: uk-fade 0.5s linear reverse; diff --git a/media/uikit-v2/css/components/slideshow.almost-flat.min.css b/media/uikit-v2/css/components/slideshow.almost-flat.min.css new file mode 100644 index 0000000..61ef3a0 --- /dev/null +++ b/media/uikit-v2/css/components/slideshow.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-slideshow{position:relative;z-index:0;width:100%;margin:0;padding:0;list-style:none;overflow:hidden;touch-action:pan-y}.uk-slideshow>li{position:absolute;top:0;left:0;width:100%;opacity:0}.uk-slideshow>.uk-active{z-index:10;opacity:1}.uk-slideshow>li>img{visibility:hidden}[data-uk-slideshow-slide]{cursor:pointer}.uk-slideshow-fullscreen,.uk-slideshow-fullscreen>li{height:100vh}.uk-slideshow-fade-in{-webkit-animation:uk-fade .5s linear;animation:uk-fade .5s linear}.uk-slideshow-fade-out{-webkit-animation:uk-fade .5s linear reverse;animation:uk-fade .5s linear reverse}.uk-slideshow-scroll-forward-in{-webkit-animation:uk-slide-right .5s ease-in-out;animation:uk-slide-right .5s ease-in-out}.uk-slideshow-scroll-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-scroll-backward-in{-webkit-animation:uk-slide-left .5s ease-in-out;animation:uk-slide-left .5s ease-in-out}.uk-slideshow-scroll-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-scale-out{-webkit-animation:uk-fade-scale-15 .5s ease-in-out reverse;animation:uk-fade-scale-15 .5s ease-in-out reverse}.uk-slideshow-swipe-forward-in{-webkit-animation:uk-slide-left-33 .5s ease-in-out;animation:uk-slide-left-33 .5s ease-in-out}.uk-slideshow-swipe-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in{-webkit-animation:uk-slide-right-33 .5s ease-in-out;animation:uk-slide-right-33 .5s ease-in-out}.uk-slideshow-swipe-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in:before,.uk-slideshow-swipe-forward-in:before{content:'';position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;background:rgba(0,0,0,.6);-webkit-animation:uk-fade .5s ease-in-out reverse;animation:uk-fade .5s ease-in-out reverse} \ No newline at end of file diff --git a/media/uikit/css/components/slideshow.css b/media/uikit-v2/css/components/slideshow.css similarity index 95% rename from media/uikit/css/components/slideshow.css rename to media/uikit-v2/css/components/slideshow.css index 8b6d69c..7c8ba2d 100644 --- a/media/uikit/css/components/slideshow.css +++ b/media/uikit-v2/css/components/slideshow.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slideshow ========================================================================== */ @@ -76,6 +76,10 @@ /* * Fade */ +.uk-slideshow-fade-in { + -webkit-animation: uk-fade 0.5s linear; + animation: uk-fade 0.5s linear; +} .uk-slideshow-fade-out { -webkit-animation: uk-fade 0.5s linear reverse; animation: uk-fade 0.5s linear reverse; diff --git a/media/uikit/css/components/slideshow.gradient.css b/media/uikit-v2/css/components/slideshow.gradient.css similarity index 95% rename from media/uikit/css/components/slideshow.gradient.css rename to media/uikit-v2/css/components/slideshow.gradient.css index 8b6d69c..7c8ba2d 100644 --- a/media/uikit/css/components/slideshow.gradient.css +++ b/media/uikit-v2/css/components/slideshow.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Slideshow ========================================================================== */ @@ -76,6 +76,10 @@ /* * Fade */ +.uk-slideshow-fade-in { + -webkit-animation: uk-fade 0.5s linear; + animation: uk-fade 0.5s linear; +} .uk-slideshow-fade-out { -webkit-animation: uk-fade 0.5s linear reverse; animation: uk-fade 0.5s linear reverse; diff --git a/media/uikit-v2/css/components/slideshow.gradient.min.css b/media/uikit-v2/css/components/slideshow.gradient.min.css new file mode 100644 index 0000000..61ef3a0 --- /dev/null +++ b/media/uikit-v2/css/components/slideshow.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-slideshow{position:relative;z-index:0;width:100%;margin:0;padding:0;list-style:none;overflow:hidden;touch-action:pan-y}.uk-slideshow>li{position:absolute;top:0;left:0;width:100%;opacity:0}.uk-slideshow>.uk-active{z-index:10;opacity:1}.uk-slideshow>li>img{visibility:hidden}[data-uk-slideshow-slide]{cursor:pointer}.uk-slideshow-fullscreen,.uk-slideshow-fullscreen>li{height:100vh}.uk-slideshow-fade-in{-webkit-animation:uk-fade .5s linear;animation:uk-fade .5s linear}.uk-slideshow-fade-out{-webkit-animation:uk-fade .5s linear reverse;animation:uk-fade .5s linear reverse}.uk-slideshow-scroll-forward-in{-webkit-animation:uk-slide-right .5s ease-in-out;animation:uk-slide-right .5s ease-in-out}.uk-slideshow-scroll-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-scroll-backward-in{-webkit-animation:uk-slide-left .5s ease-in-out;animation:uk-slide-left .5s ease-in-out}.uk-slideshow-scroll-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-scale-out{-webkit-animation:uk-fade-scale-15 .5s ease-in-out reverse;animation:uk-fade-scale-15 .5s ease-in-out reverse}.uk-slideshow-swipe-forward-in{-webkit-animation:uk-slide-left-33 .5s ease-in-out;animation:uk-slide-left-33 .5s ease-in-out}.uk-slideshow-swipe-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in{-webkit-animation:uk-slide-right-33 .5s ease-in-out;animation:uk-slide-right-33 .5s ease-in-out}.uk-slideshow-swipe-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in:before,.uk-slideshow-swipe-forward-in:before{content:'';position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;background:rgba(0,0,0,.6);-webkit-animation:uk-fade .5s ease-in-out reverse;animation:uk-fade .5s ease-in-out reverse} \ No newline at end of file diff --git a/media/uikit-v2/css/components/slideshow.min.css b/media/uikit-v2/css/components/slideshow.min.css new file mode 100644 index 0000000..61ef3a0 --- /dev/null +++ b/media/uikit-v2/css/components/slideshow.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-slideshow{position:relative;z-index:0;width:100%;margin:0;padding:0;list-style:none;overflow:hidden;touch-action:pan-y}.uk-slideshow>li{position:absolute;top:0;left:0;width:100%;opacity:0}.uk-slideshow>.uk-active{z-index:10;opacity:1}.uk-slideshow>li>img{visibility:hidden}[data-uk-slideshow-slide]{cursor:pointer}.uk-slideshow-fullscreen,.uk-slideshow-fullscreen>li{height:100vh}.uk-slideshow-fade-in{-webkit-animation:uk-fade .5s linear;animation:uk-fade .5s linear}.uk-slideshow-fade-out{-webkit-animation:uk-fade .5s linear reverse;animation:uk-fade .5s linear reverse}.uk-slideshow-scroll-forward-in{-webkit-animation:uk-slide-right .5s ease-in-out;animation:uk-slide-right .5s ease-in-out}.uk-slideshow-scroll-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-scroll-backward-in{-webkit-animation:uk-slide-left .5s ease-in-out;animation:uk-slide-left .5s ease-in-out}.uk-slideshow-scroll-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-scale-out{-webkit-animation:uk-fade-scale-15 .5s ease-in-out reverse;animation:uk-fade-scale-15 .5s ease-in-out reverse}.uk-slideshow-swipe-forward-in{-webkit-animation:uk-slide-left-33 .5s ease-in-out;animation:uk-slide-left-33 .5s ease-in-out}.uk-slideshow-swipe-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in{-webkit-animation:uk-slide-right-33 .5s ease-in-out;animation:uk-slide-right-33 .5s ease-in-out}.uk-slideshow-swipe-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in:before,.uk-slideshow-swipe-forward-in:before{content:'';position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;background:rgba(0,0,0,.6);-webkit-animation:uk-fade .5s ease-in-out reverse;animation:uk-fade .5s ease-in-out reverse} \ No newline at end of file diff --git a/media/uikit/css/components/sortable.almost-flat.css b/media/uikit-v2/css/components/sortable.almost-flat.css similarity index 89% rename from media/uikit/css/components/sortable.almost-flat.css rename to media/uikit-v2/css/components/sortable.almost-flat.css index 862682c..f903c34 100644 --- a/media/uikit/css/components/sortable.almost-flat.css +++ b/media/uikit-v2/css/components/sortable.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Sortable ========================================================================== */ @@ -39,7 +39,7 @@ } /* Empty List ========================================================================== */ -.uk-sortable:empty { +.uk-sortable-empty { min-height: 30px; } /* Sub-object `uk-sortable-handle` @@ -60,3 +60,7 @@ .uk-sortable-moving * { cursor: move; } +/* Fixes dragging items over iframes */ +.uk-sortable-moving iframe { + pointer-events: none; +} diff --git a/media/uikit/css/components/sortable.almost-flat.min.css b/media/uikit-v2/css/components/sortable.almost-flat.min.css similarity index 59% rename from media/uikit/css/components/sortable.almost-flat.min.css rename to media/uikit-v2/css/components/sortable.almost-flat.min.css index d1b6a9d..7fda8bb 100644 --- a/media/uikit/css/components/sortable.almost-flat.min.css +++ b/media/uikit-v2/css/components/sortable.almost-flat.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable a,.uk-sortable img{-webkit-touch-callout:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-dragged{position:absolute;z-index:1050;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable:empty{min-height:30px}.uk-sortable-handle{touch-action:none}.uk-sortable-handle:hover{cursor:move}.uk-sortable-moving,.uk-sortable-moving *{cursor:move} \ No newline at end of file +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable a,.uk-sortable img{-webkit-touch-callout:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-dragged{position:absolute;z-index:1050;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:30px}.uk-sortable-handle{touch-action:none}.uk-sortable-handle:hover{cursor:move}.uk-sortable-moving,.uk-sortable-moving *{cursor:move}.uk-sortable-moving iframe{pointer-events:none} \ No newline at end of file diff --git a/media/uikit/css/components/sortable.css b/media/uikit-v2/css/components/sortable.css similarity index 89% rename from media/uikit/css/components/sortable.css rename to media/uikit-v2/css/components/sortable.css index 862682c..f903c34 100644 --- a/media/uikit/css/components/sortable.css +++ b/media/uikit-v2/css/components/sortable.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Sortable ========================================================================== */ @@ -39,7 +39,7 @@ } /* Empty List ========================================================================== */ -.uk-sortable:empty { +.uk-sortable-empty { min-height: 30px; } /* Sub-object `uk-sortable-handle` @@ -60,3 +60,7 @@ .uk-sortable-moving * { cursor: move; } +/* Fixes dragging items over iframes */ +.uk-sortable-moving iframe { + pointer-events: none; +} diff --git a/media/uikit/css/components/sortable.gradient.css b/media/uikit-v2/css/components/sortable.gradient.css similarity index 89% rename from media/uikit/css/components/sortable.gradient.css rename to media/uikit-v2/css/components/sortable.gradient.css index 862682c..f903c34 100644 --- a/media/uikit/css/components/sortable.gradient.css +++ b/media/uikit-v2/css/components/sortable.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Sortable ========================================================================== */ @@ -39,7 +39,7 @@ } /* Empty List ========================================================================== */ -.uk-sortable:empty { +.uk-sortable-empty { min-height: 30px; } /* Sub-object `uk-sortable-handle` @@ -60,3 +60,7 @@ .uk-sortable-moving * { cursor: move; } +/* Fixes dragging items over iframes */ +.uk-sortable-moving iframe { + pointer-events: none; +} diff --git a/media/uikit/css/components/sortable.gradient.min.css b/media/uikit-v2/css/components/sortable.gradient.min.css similarity index 59% rename from media/uikit/css/components/sortable.gradient.min.css rename to media/uikit-v2/css/components/sortable.gradient.min.css index d1b6a9d..7fda8bb 100644 --- a/media/uikit/css/components/sortable.gradient.min.css +++ b/media/uikit-v2/css/components/sortable.gradient.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable a,.uk-sortable img{-webkit-touch-callout:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-dragged{position:absolute;z-index:1050;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable:empty{min-height:30px}.uk-sortable-handle{touch-action:none}.uk-sortable-handle:hover{cursor:move}.uk-sortable-moving,.uk-sortable-moving *{cursor:move} \ No newline at end of file +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable a,.uk-sortable img{-webkit-touch-callout:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-dragged{position:absolute;z-index:1050;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:30px}.uk-sortable-handle{touch-action:none}.uk-sortable-handle:hover{cursor:move}.uk-sortable-moving,.uk-sortable-moving *{cursor:move}.uk-sortable-moving iframe{pointer-events:none} \ No newline at end of file diff --git a/media/uikit/css/components/sortable.min.css b/media/uikit-v2/css/components/sortable.min.css similarity index 59% rename from media/uikit/css/components/sortable.min.css rename to media/uikit-v2/css/components/sortable.min.css index d1b6a9d..7fda8bb 100644 --- a/media/uikit/css/components/sortable.min.css +++ b/media/uikit-v2/css/components/sortable.min.css @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable a,.uk-sortable img{-webkit-touch-callout:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-dragged{position:absolute;z-index:1050;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable:empty{min-height:30px}.uk-sortable-handle{touch-action:none}.uk-sortable-handle:hover{cursor:move}.uk-sortable-moving,.uk-sortable-moving *{cursor:move} \ No newline at end of file +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable a,.uk-sortable img{-webkit-touch-callout:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-dragged{position:absolute;z-index:1050;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:30px}.uk-sortable-handle{touch-action:none}.uk-sortable-handle:hover{cursor:move}.uk-sortable-moving,.uk-sortable-moving *{cursor:move}.uk-sortable-moving iframe{pointer-events:none} \ No newline at end of file diff --git a/media/uikit/css/components/sticky.almost-flat.css b/media/uikit-v2/css/components/sticky.almost-flat.css similarity index 54% rename from media/uikit/css/components/sticky.almost-flat.css rename to media/uikit-v2/css/components/sticky.almost-flat.css index a6dd3c4..5d630a5 100644 --- a/media/uikit/css/components/sticky.almost-flat.css +++ b/media/uikit-v2/css/components/sticky.almost-flat.css @@ -1,32 +1,26 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Sticky ========================================================================== */ /* * 1. More robust if padding and border are used + * 2. Enable hardware acceleration for iOS browsers, resolves scrolling issue */ [data-uk-sticky].uk-active { z-index: 980; /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; -} -/* - * 1. Resolve frame-rate issues on devices with lower frame-rates. Forces hardware acceleration - */ -.uk-sticky-placeholder > * { - /* 1 */ + /* 2 */ -webkit-backface-visibility: hidden; - backface-visibility: hidden; } /* * Faster animations */ [data-uk-sticky][class*='uk-animation-'] { - -webkit-animation-duration: 0.15s; - animation-duration: 0.15s; + -webkit-animation-duration: 0.2s; + animation-duration: 0.2s; } [data-uk-sticky].uk-animation-reverse { - -webkit-animation-duration: 0.04s; - animation-duration: 0.04s; + -webkit-animation-duration: 0.2s; + animation-duration: 0.2s; } diff --git a/media/uikit-v2/css/components/sticky.almost-flat.min.css b/media/uikit-v2/css/components/sticky.almost-flat.min.css new file mode 100644 index 0000000..a0d382a --- /dev/null +++ b/media/uikit-v2/css/components/sticky.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +[data-uk-sticky].uk-active{z-index:980;box-sizing:border-box;-webkit-backface-visibility:hidden}[data-uk-sticky][class*=uk-animation-]{-webkit-animation-duration:.2s;animation-duration:.2s}[data-uk-sticky].uk-animation-reverse{-webkit-animation-duration:.2s;animation-duration:.2s} \ No newline at end of file diff --git a/media/uikit/css/components/sticky.css b/media/uikit-v2/css/components/sticky.css similarity index 54% rename from media/uikit/css/components/sticky.css rename to media/uikit-v2/css/components/sticky.css index a6dd3c4..5d630a5 100644 --- a/media/uikit/css/components/sticky.css +++ b/media/uikit-v2/css/components/sticky.css @@ -1,32 +1,26 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Sticky ========================================================================== */ /* * 1. More robust if padding and border are used + * 2. Enable hardware acceleration for iOS browsers, resolves scrolling issue */ [data-uk-sticky].uk-active { z-index: 980; /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; -} -/* - * 1. Resolve frame-rate issues on devices with lower frame-rates. Forces hardware acceleration - */ -.uk-sticky-placeholder > * { - /* 1 */ + /* 2 */ -webkit-backface-visibility: hidden; - backface-visibility: hidden; } /* * Faster animations */ [data-uk-sticky][class*='uk-animation-'] { - -webkit-animation-duration: 0.15s; - animation-duration: 0.15s; + -webkit-animation-duration: 0.2s; + animation-duration: 0.2s; } [data-uk-sticky].uk-animation-reverse { - -webkit-animation-duration: 0.04s; - animation-duration: 0.04s; + -webkit-animation-duration: 0.2s; + animation-duration: 0.2s; } diff --git a/media/uikit/css/components/sticky.gradient.css b/media/uikit-v2/css/components/sticky.gradient.css similarity index 54% rename from media/uikit/css/components/sticky.gradient.css rename to media/uikit-v2/css/components/sticky.gradient.css index a6dd3c4..5d630a5 100644 --- a/media/uikit/css/components/sticky.gradient.css +++ b/media/uikit-v2/css/components/sticky.gradient.css @@ -1,32 +1,26 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Sticky ========================================================================== */ /* * 1. More robust if padding and border are used + * 2. Enable hardware acceleration for iOS browsers, resolves scrolling issue */ [data-uk-sticky].uk-active { z-index: 980; /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; -} -/* - * 1. Resolve frame-rate issues on devices with lower frame-rates. Forces hardware acceleration - */ -.uk-sticky-placeholder > * { - /* 1 */ + /* 2 */ -webkit-backface-visibility: hidden; - backface-visibility: hidden; } /* * Faster animations */ [data-uk-sticky][class*='uk-animation-'] { - -webkit-animation-duration: 0.15s; - animation-duration: 0.15s; + -webkit-animation-duration: 0.2s; + animation-duration: 0.2s; } [data-uk-sticky].uk-animation-reverse { - -webkit-animation-duration: 0.04s; - animation-duration: 0.04s; + -webkit-animation-duration: 0.2s; + animation-duration: 0.2s; } diff --git a/media/uikit-v2/css/components/sticky.gradient.min.css b/media/uikit-v2/css/components/sticky.gradient.min.css new file mode 100644 index 0000000..a0d382a --- /dev/null +++ b/media/uikit-v2/css/components/sticky.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +[data-uk-sticky].uk-active{z-index:980;box-sizing:border-box;-webkit-backface-visibility:hidden}[data-uk-sticky][class*=uk-animation-]{-webkit-animation-duration:.2s;animation-duration:.2s}[data-uk-sticky].uk-animation-reverse{-webkit-animation-duration:.2s;animation-duration:.2s} \ No newline at end of file diff --git a/media/uikit-v2/css/components/sticky.min.css b/media/uikit-v2/css/components/sticky.min.css new file mode 100644 index 0000000..a0d382a --- /dev/null +++ b/media/uikit-v2/css/components/sticky.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +[data-uk-sticky].uk-active{z-index:980;box-sizing:border-box;-webkit-backface-visibility:hidden}[data-uk-sticky][class*=uk-animation-]{-webkit-animation-duration:.2s;animation-duration:.2s}[data-uk-sticky].uk-animation-reverse{-webkit-animation-duration:.2s;animation-duration:.2s} \ No newline at end of file diff --git a/media/uikit/css/components/tooltip.almost-flat.css b/media/uikit-v2/css/components/tooltip.almost-flat.css similarity index 88% rename from media/uikit/css/components/tooltip.almost-flat.css rename to media/uikit-v2/css/components/tooltip.almost-flat.css index 27d9200..98247b5 100644 --- a/media/uikit/css/components/tooltip.almost-flat.css +++ b/media/uikit-v2/css/components/tooltip.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Tooltip ========================================================================== */ @@ -15,16 +15,14 @@ position: absolute; z-index: 1030; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; max-width: 200px; padding: 5px 8px; /* 4 */ - background: #333333; + background: #333; color: rgba(255, 255, 255, 0.7); font-size: 12px; line-height: 18px; - text-align: center; border-radius: 3px; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } @@ -40,7 +38,7 @@ width: 0; height: 0; /* 1 */ - border: 5px dashed #333333; + border: 5px dashed #333; } /* Direction modifiers ========================================================================== */ @@ -55,7 +53,7 @@ border-bottom: none; border-left-color: transparent; border-right-color: transparent; - border-top-color: #333333; + border-top-color: #333; } /* * Bottom @@ -68,7 +66,7 @@ border-top: none; border-left-color: transparent; border-right-color: transparent; - border-bottom-color: #333333; + border-bottom-color: #333; } /* * Top/Bottom center @@ -103,7 +101,7 @@ border-right: none; border-top-color: transparent; border-bottom-color: transparent; - border-left-color: #333333; + border-left-color: #333; } /* * Right @@ -116,5 +114,5 @@ border-left: none; border-top-color: transparent; border-bottom-color: transparent; - border-right-color: #333333; + border-right-color: #333; } diff --git a/media/uikit-v2/css/components/tooltip.almost-flat.min.css b/media/uikit-v2/css/components/tooltip.almost-flat.min.css new file mode 100644 index 0000000..4e64716 --- /dev/null +++ b/media/uikit-v2/css/components/tooltip.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-tooltip{display:none;position:absolute;z-index:1030;box-sizing:border-box;max-width:200px;padding:5px 8px;background:#333;color:rgba(255,255,255,.7);font-size:12px;line-height:18px;border-radius:3px;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-tooltip:after{content:"";display:block;position:absolute;width:0;height:0;border:5px dashed #333}.uk-tooltip-top-left:after,.uk-tooltip-top-right:after,.uk-tooltip-top:after{bottom:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent;border-top-color:#333}.uk-tooltip-bottom-left:after,.uk-tooltip-bottom-right:after,.uk-tooltip-bottom:after{top:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent;border-bottom-color:#333}.uk-tooltip-bottom:after,.uk-tooltip-top:after{left:50%;margin-left:-5px}.uk-tooltip-bottom-left:after,.uk-tooltip-top-left:after{left:10px}.uk-tooltip-bottom-right:after,.uk-tooltip-top-right:after{right:10px}.uk-tooltip-left:after{right:-5px;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent;border-left-color:#333}.uk-tooltip-right:after{left:-5px;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent;border-right-color:#333} \ No newline at end of file diff --git a/media/uikit/css/components/tooltip.css b/media/uikit-v2/css/components/tooltip.css similarity index 87% rename from media/uikit/css/components/tooltip.css rename to media/uikit-v2/css/components/tooltip.css index 7ec0df0..30e06b6 100644 --- a/media/uikit/css/components/tooltip.css +++ b/media/uikit-v2/css/components/tooltip.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Tooltip ========================================================================== */ @@ -15,16 +15,14 @@ position: absolute; z-index: 1030; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; max-width: 200px; padding: 5px 8px; /* 4 */ - background: #333333; + background: #333; color: rgba(255, 255, 255, 0.7); font-size: 12px; line-height: 18px; - text-align: center; } /* Triangle ========================================================================== */ @@ -38,7 +36,7 @@ width: 0; height: 0; /* 1 */ - border: 5px dashed #333333; + border: 5px dashed #333; } /* Direction modifiers ========================================================================== */ @@ -53,7 +51,7 @@ border-bottom: none; border-left-color: transparent; border-right-color: transparent; - border-top-color: #333333; + border-top-color: #333; } /* * Bottom @@ -66,7 +64,7 @@ border-top: none; border-left-color: transparent; border-right-color: transparent; - border-bottom-color: #333333; + border-bottom-color: #333; } /* * Top/Bottom center @@ -101,7 +99,7 @@ border-right: none; border-top-color: transparent; border-bottom-color: transparent; - border-left-color: #333333; + border-left-color: #333; } /* * Right @@ -114,5 +112,5 @@ border-left: none; border-top-color: transparent; border-bottom-color: transparent; - border-right-color: #333333; + border-right-color: #333; } diff --git a/media/uikit/css/components/tooltip.gradient.css b/media/uikit-v2/css/components/tooltip.gradient.css similarity index 88% rename from media/uikit/css/components/tooltip.gradient.css rename to media/uikit-v2/css/components/tooltip.gradient.css index 27d9200..98247b5 100644 --- a/media/uikit/css/components/tooltip.gradient.css +++ b/media/uikit-v2/css/components/tooltip.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Tooltip ========================================================================== */ @@ -15,16 +15,14 @@ position: absolute; z-index: 1030; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; max-width: 200px; padding: 5px 8px; /* 4 */ - background: #333333; + background: #333; color: rgba(255, 255, 255, 0.7); font-size: 12px; line-height: 18px; - text-align: center; border-radius: 3px; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } @@ -40,7 +38,7 @@ width: 0; height: 0; /* 1 */ - border: 5px dashed #333333; + border: 5px dashed #333; } /* Direction modifiers ========================================================================== */ @@ -55,7 +53,7 @@ border-bottom: none; border-left-color: transparent; border-right-color: transparent; - border-top-color: #333333; + border-top-color: #333; } /* * Bottom @@ -68,7 +66,7 @@ border-top: none; border-left-color: transparent; border-right-color: transparent; - border-bottom-color: #333333; + border-bottom-color: #333; } /* * Top/Bottom center @@ -103,7 +101,7 @@ border-right: none; border-top-color: transparent; border-bottom-color: transparent; - border-left-color: #333333; + border-left-color: #333; } /* * Right @@ -116,5 +114,5 @@ border-left: none; border-top-color: transparent; border-bottom-color: transparent; - border-right-color: #333333; + border-right-color: #333; } diff --git a/media/uikit-v2/css/components/tooltip.gradient.min.css b/media/uikit-v2/css/components/tooltip.gradient.min.css new file mode 100644 index 0000000..4e64716 --- /dev/null +++ b/media/uikit-v2/css/components/tooltip.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-tooltip{display:none;position:absolute;z-index:1030;box-sizing:border-box;max-width:200px;padding:5px 8px;background:#333;color:rgba(255,255,255,.7);font-size:12px;line-height:18px;border-radius:3px;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-tooltip:after{content:"";display:block;position:absolute;width:0;height:0;border:5px dashed #333}.uk-tooltip-top-left:after,.uk-tooltip-top-right:after,.uk-tooltip-top:after{bottom:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent;border-top-color:#333}.uk-tooltip-bottom-left:after,.uk-tooltip-bottom-right:after,.uk-tooltip-bottom:after{top:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent;border-bottom-color:#333}.uk-tooltip-bottom:after,.uk-tooltip-top:after{left:50%;margin-left:-5px}.uk-tooltip-bottom-left:after,.uk-tooltip-top-left:after{left:10px}.uk-tooltip-bottom-right:after,.uk-tooltip-top-right:after{right:10px}.uk-tooltip-left:after{right:-5px;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent;border-left-color:#333}.uk-tooltip-right:after{left:-5px;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent;border-right-color:#333} \ No newline at end of file diff --git a/media/uikit-v2/css/components/tooltip.min.css b/media/uikit-v2/css/components/tooltip.min.css new file mode 100644 index 0000000..124e976 --- /dev/null +++ b/media/uikit-v2/css/components/tooltip.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-tooltip{display:none;position:absolute;z-index:1030;box-sizing:border-box;max-width:200px;padding:5px 8px;background:#333;color:rgba(255,255,255,.7);font-size:12px;line-height:18px}.uk-tooltip:after{content:"";display:block;position:absolute;width:0;height:0;border:5px dashed #333}.uk-tooltip-top-left:after,.uk-tooltip-top-right:after,.uk-tooltip-top:after{bottom:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent;border-top-color:#333}.uk-tooltip-bottom-left:after,.uk-tooltip-bottom-right:after,.uk-tooltip-bottom:after{top:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent;border-bottom-color:#333}.uk-tooltip-bottom:after,.uk-tooltip-top:after{left:50%;margin-left:-5px}.uk-tooltip-bottom-left:after,.uk-tooltip-top-left:after{left:10px}.uk-tooltip-bottom-right:after,.uk-tooltip-top-right:after{right:10px}.uk-tooltip-left:after{right:-5px;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent;border-left-color:#333}.uk-tooltip-right:after{left:-5px;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent;border-right-color:#333} \ No newline at end of file diff --git a/media/uikit/css/components/upload.almost-flat.css b/media/uikit-v2/css/components/upload.almost-flat.css similarity index 83% rename from media/uikit/css/components/upload.almost-flat.css rename to media/uikit-v2/css/components/upload.almost-flat.css index ab07f2b..d9dfc6d 100644 --- a/media/uikit/css/components/upload.almost-flat.css +++ b/media/uikit-v2/css/components/upload.almost-flat.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Upload ========================================================================== */ diff --git a/media/uikit-v2/css/components/upload.almost-flat.min.css b/media/uikit-v2/css/components/upload.almost-flat.min.css new file mode 100644 index 0000000..98f427f --- /dev/null +++ b/media/uikit-v2/css/components/upload.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)} \ No newline at end of file diff --git a/media/uikit/css/components/upload.css b/media/uikit-v2/css/components/upload.css similarity index 83% rename from media/uikit/css/components/upload.css rename to media/uikit-v2/css/components/upload.css index ab07f2b..d9dfc6d 100644 --- a/media/uikit/css/components/upload.css +++ b/media/uikit-v2/css/components/upload.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Upload ========================================================================== */ diff --git a/media/uikit/css/components/upload.gradient.css b/media/uikit-v2/css/components/upload.gradient.css similarity index 83% rename from media/uikit/css/components/upload.gradient.css rename to media/uikit-v2/css/components/upload.gradient.css index ab07f2b..d9dfc6d 100644 --- a/media/uikit/css/components/upload.gradient.css +++ b/media/uikit-v2/css/components/upload.gradient.css @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Upload ========================================================================== */ diff --git a/media/uikit-v2/css/components/upload.gradient.min.css b/media/uikit-v2/css/components/upload.gradient.min.css new file mode 100644 index 0000000..98f427f --- /dev/null +++ b/media/uikit-v2/css/components/upload.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)} \ No newline at end of file diff --git a/media/uikit-v2/css/components/upload.min.css b/media/uikit-v2/css/components/upload.min.css new file mode 100644 index 0000000..98f427f --- /dev/null +++ b/media/uikit-v2/css/components/upload.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)} \ No newline at end of file diff --git a/media/uikit-v2/css/index.html b/media/uikit-v2/css/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/uikit-v2/css/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/uikit/css/uikit.almost-flat.css b/media/uikit-v2/css/uikit.almost-flat.css similarity index 87% rename from media/uikit/css/uikit.almost-flat.css rename to media/uikit-v2/css/uikit.almost-flat.css index 5dd95df..647cb3f 100644 --- a/media/uikit/css/uikit.almost-flat.css +++ b/media/uikit-v2/css/uikit.almost-flat.css @@ -1,9 +1,9 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Base ========================================================================== */ /* - * 1. Normalizes default `font-family` and sets `font-size` here to support `rem` units + * 1. Normalize default `font-family` and set `font-size` to support `rem` units * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom * 3. Style */ @@ -14,8 +14,8 @@ html { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; /* 3 */ - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } /* * Removes default margin. @@ -32,7 +32,7 @@ a { background: transparent; } /* - * Improves readability when focused and also mouse hovered in all browsers. + * Improve readability of focused elements when they are also in an active/hover state. */ a:active, a:hover { @@ -43,25 +43,25 @@ a:hover { */ a, .uk-link { - color: #0077dd; + color: #07D; text-decoration: none; cursor: pointer; } a:hover, .uk-link:hover { - color: #005599; + color: #059; text-decoration: underline; } /* Text-level semantics ========================================================================== */ /* - * Addresses styling not present in Chrome, Safari, Opera and IE 8/9/10. + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ abbr[title] { border-bottom: 1px dotted; } /* - * Addresses style set to `bolder` in Firefox + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ b, strong { @@ -79,10 +79,10 @@ strong { /* 2 */ font-family: Consolas, monospace, serif; /* 3 */ - color: #dd0055; + color: #D05; white-space: nowrap; padding: 0 4px; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 3px; background: #fafafa; } @@ -90,14 +90,14 @@ strong { * Emphasize */ em { - color: #dd0055; + color: #D05; } /* * Insert */ ins { - background: #ffffaa; - color: #444444; + background: #ffa; + color: #444; text-decoration: none; } /* @@ -105,8 +105,8 @@ ins { * Note: Addresses styling not present in IE 8/9. */ mark { - background: #ffffaa; - color: #444444; + background: #ffa; + color: #444; } /* * Quote @@ -136,33 +136,52 @@ sup { sub { bottom: -0.25em; } -/* Images +/* Embedded content ========================================================================== */ /* - * 1. Responsiveness: Sets a maximum width relative to the parent and auto scales the height - * 2. Corrects `max-width` behavior if padding and border are used - * 3. Remove border when inside `a` element in IE 8/9/10. - * 4. Remove the gap between images and the bottom of their containers + * Remove the gap between embedded content and the bottom of their containers. */ -img { +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} +/* + * Responsiveness + * 1. Sets a maximum width relative to the parent and auto scales the height + * 2. Corrects `max-width` behavior if padding and border are used + */ +audio, +canvas, +img, +svg, +video { /* 1 */ max-width: 100%; height: auto; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; - /* 3 */ - border: 0; - /* 4 */ - vertical-align: middle; } /* - * Preserve original image dimensions + * Preserve original dimensions */ .uk-img-preserve, -.uk-img-preserve img { +.uk-img-preserve audio, +.uk-img-preserve canvas, +.uk-img-preserve img, +.uk-img-preserve svg, +.uk-img-preserve video { max-width: none; } +/* + * Remove border when inside `a` element in IE 8/9/10. + */ +img { + border: 0; +} /* * Correct overflow not hidden in IE 9/10/11. */ @@ -214,7 +233,7 @@ h6 { margin: 0 0 15px 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; - color: #444444; + color: #444; text-transform: none; } /* @@ -292,13 +311,12 @@ dd { */ hr { /* 1 */ - -moz-box-sizing: content-box; box-sizing: content-box; height: 0; /* 2 */ margin: 15px 0; border: 0; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Address ========================================================================== */ @@ -309,7 +327,7 @@ address { ========================================================================== */ blockquote { padding-left: 15px; - border-left: 5px solid #dddddd; + border-left: 5px solid #ddd; font-size: 16px; line-height: 22px; font-style: italic; @@ -323,30 +341,32 @@ pre { padding: 10px; background: #fafafa; font: 12px / 18px Consolas, monospace, serif; - color: #444444; + color: #444; -moz-tab-size: 4; tab-size: 4; /* 1 */ overflow: auto; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 3px; } -/* Selection pseudo-element +/* Selection pseudo-element ========================================================================== */ ::-moz-selection { - background: #3399ff; - color: #ffffff; + background: #39f; + color: #fff; text-shadow: none; } ::selection { - background: #3399ff; - color: #ffffff; + background: #39f; + color: #fff; text-shadow: none; } /* HTML5 elements ========================================================================== */ /* - * Corrects `block` display not defined in IE 8/9. + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. + * Correct `block` display not defined for `main` in IE 11. */ article, aside, @@ -362,7 +382,7 @@ summary { display: block; } /* - * Addresses inconsistent vertical alignment of `progress` in Chrome, Firefox and Opera. + * Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ progress { vertical-align: baseline; @@ -374,8 +394,8 @@ audio:not([controls]) { display: none; } /* - * Address `[hidden]` styling not present in IE 8/9. - * Hide the `template` element in IE and Safari + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. */ [hidden], template { @@ -529,6 +549,41 @@ iframe { .uk-grid-medium > * > .uk-panel + .uk-panel { margin-top: 25px; } +/* + * Large gutter + */ +/* Large screen and bigger */ +@media (min-width: 960px) { + /* Horizontal */ + .uk-grid-large { + margin-left: -35px; + } + .uk-grid-large > * { + padding-left: 35px; + } + /* Vertical */ + .uk-grid-large + .uk-grid-large, + .uk-grid-large-margin, + .uk-grid-large > * > .uk-panel + .uk-panel { + margin-top: 35px; + } +} +/* Extra Large screens */ +@media (min-width: 1220px) { + /* Horizontal */ + .uk-grid-large { + margin-left: -50px; + } + .uk-grid-large > * { + padding-left: 50px; + } + /* Vertical */ + .uk-grid-large + .uk-grid-large, + .uk-grid-large-margin, + .uk-grid-large > * > .uk-panel + .uk-panel { + margin-top: 50px; + } +} /* Modifier: `uk-grid-divider` ========================================================================== */ /* @@ -553,18 +608,18 @@ iframe { .uk-grid-divider > [class*='uk-width-7-']:nth-child(n+2), .uk-grid-divider > [class*='uk-width-8-']:nth-child(n+2), .uk-grid-divider > [class*='uk-width-9-']:nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* Tablet and bigger */ @media (min-width: 768px) { .uk-grid-divider > [class*='uk-width-medium-']:not(.uk-width-medium-1-1):nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } } /* Desktop and bigger */ @media (min-width: 960px) { .uk-grid-divider > [class*='uk-width-large-']:not(.uk-width-large-1-1):nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } } /* Large screen and bigger */ @@ -591,34 +646,33 @@ iframe { .uk-grid-divider:empty { margin-top: 25px; margin-bottom: 25px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Match panels in grids ========================================================================== */ +/* + * 1. Behave like a block element + */ .uk-grid-match > * { display: -ms-flexbox; display: -webkit-flex; display: flex; + /* 1 */ + -ms-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; } -/* - * 1. Behave like a block element - */ .uk-grid-match > * > * { /* 1 */ -ms-flex: none; -webkit-flex: none; flex: none; - -ms-flex-wrap: wrap; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } /* Even grid cell widths ========================================================================== */ [class*='uk-grid-width'] > * { - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } @@ -640,8 +694,14 @@ iframe { .uk-grid-width-1-10 > * { width: 10%; } +.uk-grid-width-auto > * { + width: auto; +} /* Phone landscape and bigger */ @media (min-width: 480px) { + .uk-grid-width-small-1-1 > * { + width: 100%; + } .uk-grid-width-small-1-2 > * { width: 50%; } @@ -663,6 +723,9 @@ iframe { } /* Tablet and bigger */ @media (min-width: 768px) { + .uk-grid-width-medium-1-1 > * { + width: 100%; + } .uk-grid-width-medium-1-2 > * { width: 50%; } @@ -684,6 +747,9 @@ iframe { } /* Desktop and bigger */ @media (min-width: 960px) { + .uk-grid-width-large-1-1 > * { + width: 100%; + } .uk-grid-width-large-1-2 > * { width: 50%; } @@ -705,6 +771,9 @@ iframe { } /* Large screen and bigger */ @media (min-width: 1220px) { + .uk-grid-width-xlarge-1-1 > * { + width: 100%; + } .uk-grid-width-xlarge-1-2 > * { width: 50%; } @@ -727,7 +796,6 @@ iframe { /* Sub-objects: `uk-width-*` ========================================================================== */ [class*='uk-width'] { - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } @@ -999,6 +1067,73 @@ iframe { width: 90%; } } +/* Large screen and bigger */ +@media (min-width: 1220px) { + /* Whole */ + .uk-width-xlarge-1-1 { + width: 100%; + } + /* Halves */ + .uk-width-xlarge-1-2, + .uk-width-xlarge-2-4, + .uk-width-xlarge-3-6, + .uk-width-xlarge-5-10 { + width: 50%; + } + /* Thirds */ + .uk-width-xlarge-1-3, + .uk-width-xlarge-2-6 { + width: 33.333%; + } + .uk-width-xlarge-2-3, + .uk-width-xlarge-4-6 { + width: 66.666%; + } + /* Quarters */ + .uk-width-xlarge-1-4 { + width: 25%; + } + .uk-width-xlarge-3-4 { + width: 75%; + } + /* Fifths */ + .uk-width-xlarge-1-5, + .uk-width-xlarge-2-10 { + width: 20%; + } + .uk-width-xlarge-2-5, + .uk-width-xlarge-4-10 { + width: 40%; + } + .uk-width-xlarge-3-5, + .uk-width-xlarge-6-10 { + width: 60%; + } + .uk-width-xlarge-4-5, + .uk-width-xlarge-8-10 { + width: 80%; + } + /* Sixths */ + .uk-width-xlarge-1-6 { + width: 16.666%; + } + .uk-width-xlarge-5-6 { + width: 83.333%; + } + /* Tenths */ + .uk-width-xlarge-1-10 { + width: 10%; + } + .uk-width-xlarge-3-10 { + width: 30%; + } + .uk-width-xlarge-7-10 { + width: 70%; + } + .uk-width-xlarge-9-10 { + width: 90%; + } +} /* Sub-object: `uk-push-*` and `uk-pull-*` ========================================================================== */ /* @@ -1184,7 +1319,7 @@ iframe { line-height: 24px; font-weight: normal; text-transform: none; - color: #444444; + color: #444; } /* Sub-object: `uk-panel-badge` ========================================================================== */ @@ -1199,26 +1334,31 @@ iframe { .uk-panel-teaser { margin-bottom: 15px; } +/* Sub-object: `uk-panel-body` + ========================================================================== */ +.uk-panel-body { + padding: 15px; +} /* Modifier: `uk-panel-box` ========================================================================== */ .uk-panel-box { padding: 15px; background: #fafafa; - color: #444444; - border: 1px solid #dddddd; + color: #444; + border: 1px solid #ddd; border-radius: 4px; } .uk-panel-box-hover:hover { - color: #444444; + color: #444; } .uk-panel-box .uk-panel-title { - color: #444444; + color: #444; } .uk-panel-box .uk-panel-badge { top: 10px; right: 10px; } -.uk-panel-box .uk-panel-teaser { +.uk-panel-box > .uk-panel-teaser { margin-top: -16px; margin-left: -16px; margin-right: -16px; @@ -1247,33 +1387,33 @@ iframe { * Sub-modifier: `uk-panel-box-secondary` */ .uk-panel-box-secondary { - background-color: #ffffff; - color: #444444; + background-color: #fff; + color: #444; } .uk-panel-box-secondary-hover:hover { - color: #444444; + color: #444; } .uk-panel-box-secondary .uk-panel-title { - color: #444444; + color: #444; } /* Modifier: `uk-panel-hover` ========================================================================== */ .uk-panel-hover { padding: 15px; - color: #444444; + color: #444; border: 1px solid transparent; border-radius: 4px; } .uk-panel-hover:hover { background: #fafafa; - color: #444444; - border-color: #dddddd; + color: #444; + border-color: #ddd; } .uk-panel-hover .uk-panel-badge { top: 10px; right: 10px; } -.uk-panel-hover .uk-panel-teaser { +.uk-panel-hover > .uk-panel-teaser { margin-top: -16px; margin-left: -16px; margin-right: -16px; @@ -1282,8 +1422,8 @@ iframe { ========================================================================== */ .uk-panel-header .uk-panel-title { padding-bottom: 10px; - border-bottom: 1px solid #dddddd; - color: #444444; + border-bottom: 1px solid #ddd; + color: #444; } /* Modifier: `uk-panel-space` ========================================================================== */ @@ -1306,7 +1446,7 @@ iframe { top: -25px; left: 0; right: 0; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Large screen and bigger */ @media (min-width: 1220px) { @@ -1328,7 +1468,6 @@ iframe { ========================================================================== */ .uk-block { position: relative; - -moz-box-sizing: border-box; box-sizing: border-box; padding-top: 20px; padding-bottom: 20px; @@ -1386,7 +1525,7 @@ iframe { * Default */ .uk-block-default { - background: #ffffff; + background: #fff; } /* * Muted @@ -1404,11 +1543,11 @@ iframe { * Secondary */ .uk-block-secondary { - background: #222222; + background: #222; } /* - * Adjust padding between equal colored blocks - */ + * Adjust padding between equal colored blocks + */ .uk-block-default + .uk-block-default, .uk-block-muted + .uk-block-muted, .uk-block-primary + .uk-block-primary, @@ -1458,12 +1597,12 @@ iframe { .uk-article-meta { font-size: 12px; line-height: 18px; - color: #999999; + color: #999; } /* Sub-object `uk-article-lead` ========================================================================== */ .uk-article-lead { - color: #444444; + color: #444; font-size: 18px; line-height: 24px; font-weight: normal; @@ -1472,14 +1611,14 @@ iframe { ========================================================================== */ .uk-article-divider { margin-bottom: 25px; - border-color: #dddddd; + border-color: #ddd; } * + .uk-article-divider { margin-top: 25px; } .uk-article + .uk-article { padding-top: 25px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* ======================================================================== Component: Comment @@ -1489,7 +1628,7 @@ iframe { .uk-comment-header { margin-bottom: 15px; padding: 10px; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 4px; background: #fafafa; } @@ -1523,7 +1662,7 @@ iframe { margin: 2px 0 0 0; font-size: 11px; line-height: 16px; - color: #999999; + color: #999; } /* Sub-object `uk-comment-body` ========================================================================== */ @@ -1563,7 +1702,7 @@ iframe { border-color: rgba(45, 112, 145, 0.3); background-color: #ebf7fd; color: #2d7091; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* ======================================================================== Component: Cover @@ -1690,7 +1829,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-side > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1700,16 +1839,16 @@ ul.uk-nav-sub { .uk-nav-side > li > a:hover, .uk-nav-side > li > a:focus { background: rgba(0, 0, 0, 0.03); - color: #444444; + color: #444; /* 2 */ outline: none; box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.06); - text-shadow: 0 -1px 0 #ffffff; + text-shadow: 0 -1px 0 #fff; } /* Active */ .uk-nav-side > li.uk-active > a { background: #00a8e6; - color: #ffffff; + color: #fff; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1); } @@ -1717,23 +1856,23 @@ ul.uk-nav-sub { * Sub-object: `uk-nav-header` */ .uk-nav-side .uk-nav-header { - color: #444444; + color: #444; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-side .uk-nav-divider { - border-top: 1px solid #dddddd; - box-shadow: 0 1px 0 #ffffff; + border-top: 1px solid #ddd; + box-shadow: 0 1px 0 #fff; } /* * Nested items */ .uk-nav-side ul a { - color: #0077dd; + color: #07D; } .uk-nav-side ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-dropdown` ========================================================================== */ @@ -1741,7 +1880,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-dropdown > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1751,7 +1890,7 @@ ul.uk-nav-sub { .uk-nav-dropdown > li > a:hover, .uk-nav-dropdown > li > a:focus { background: #00a8e6; - color: #ffffff; + color: #fff; /* 2 */ outline: none; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); @@ -1761,22 +1900,22 @@ ul.uk-nav-sub { * Sub-object: `uk-nav-header` */ .uk-nav-dropdown .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-dropdown .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-dropdown ul a { - color: #0077dd; + color: #07D; } .uk-nav-dropdown ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-navbar` ========================================================================== */ @@ -1784,7 +1923,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-navbar > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1794,7 +1933,7 @@ ul.uk-nav-sub { .uk-nav-navbar > li > a:hover, .uk-nav-navbar > li > a:focus { background: #00a8e6; - color: #ffffff; + color: #fff; /* 2 */ outline: none; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); @@ -1804,22 +1943,22 @@ ul.uk-nav-sub { * Sub-object: `uk-nav-header` */ .uk-nav-navbar .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-navbar .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-navbar ul a { - color: #0077dd; + color: #07D; } .uk-nav-navbar ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-offcanvas` ========================================================================== */ @@ -1827,7 +1966,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-offcanvas > li > a { - color: #cccccc; + color: #ccc; padding: 10px 15px; border-top: 1px solid rgba(0, 0, 0, 0.3); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05); @@ -1843,7 +1982,7 @@ ul.uk-nav-sub { html:not(.uk-touch) .uk-nav-offcanvas > li > a:hover, html:not(.uk-touch) .uk-nav-offcanvas > li > a:focus { background: #404040; - color: #ffffff; + color: #fff; /* 2 */ outline: none; } @@ -1853,14 +1992,14 @@ html:not(.uk-touch) .uk-nav-offcanvas > li > a:focus { */ html .uk-nav.uk-nav-offcanvas > li.uk-active > a { background: #1a1a1a; - color: #ffffff; + color: #fff; box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3); } /* * Sub-object: `uk-nav-header` */ .uk-nav-offcanvas .uk-nav-header { - color: #777777; + color: #777; margin-top: 0; border-top: 1px solid rgba(0, 0, 0, 0.3); background: #404040; @@ -1882,10 +2021,10 @@ html .uk-nav.uk-nav-offcanvas > li.uk-active > a { * No hover on touch devices because it behaves buggy in fixed offcanvas */ .uk-nav-offcanvas ul a { - color: #cccccc; + color: #ccc; } html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { - color: #ffffff; + color: #fff; } /* * Modifier `uk-nav-offcanvas` @@ -1906,7 +2045,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-navbar { background: #f5f5f5; - color: #444444; + color: #444; border: 1px solid rgba(0, 0, 0, 0.06); border-radius: 4px; } @@ -1943,7 +2082,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-nav > li > a { display: block; - -moz-box-sizing: border-box; box-sizing: border-box; text-decoration: none; /* 1 */ @@ -1951,7 +2089,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { padding: 0 15px; line-height: 40px; /* 2 */ - color: #444444; + color: #444; font-size: 14px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; @@ -1959,7 +2097,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { margin-left: -1px; border: 1px solid transparent; border-bottom-width: 0; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* Appear not as link */ .uk-navbar-nav > li > a[href='#'] { @@ -1975,7 +2113,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-navbar-nav > li > a:focus, .uk-navbar-nav > li.uk-open > a { background-color: #fafafa; - color: #444444; + color: #444; /* 3 */ outline: none; position: relative; @@ -1986,8 +2124,8 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } /* OnClick */ .uk-navbar-nav > li > a:active { - background-color: #eeeeee; - color: #444444; + background-color: #eee; + color: #444; border-left-color: rgba(0, 0, 0, 0.1); border-right-color: rgba(0, 0, 0, 0.1); border-top-color: rgba(0, 0, 0, 0.2); @@ -1995,7 +2133,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Active */ .uk-navbar-nav > li.uk-active > a { background-color: #fafafa; - color: #444444; + color: #444; border-left-color: rgba(0, 0, 0, 0.1); border-right-color: rgba(0, 0, 0, 0.1); border-top-color: rgba(0, 0, 0, 0.1); @@ -2018,14 +2156,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-navbar-content, .uk-navbar-brand, .uk-navbar-toggle { - -moz-box-sizing: border-box; box-sizing: border-box; display: block; height: 41px; padding: 0 15px; float: left; margin-top: -1px; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* * Helper to center all child elements vertically @@ -2050,16 +2187,16 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Link colors */ .uk-navbar-content > a:not([class]) { - color: #0077dd; + color: #07D; } .uk-navbar-content > a:not([class]):hover { - color: #005599; + color: #059; } /* Sub-objects: `uk-navbar-brand` ========================================================================== */ .uk-navbar-brand { font-size: 18px; - color: #444444; + color: #444; text-decoration: none; } /* @@ -2068,7 +2205,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-brand:hover, .uk-navbar-brand:focus { - color: #444444; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -2077,7 +2214,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-navbar-toggle { font-size: 18px; - color: #444444; + color: #444; text-decoration: none; } /* @@ -2086,7 +2223,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-toggle:hover, .uk-navbar-toggle:focus { - color: #444444; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -2214,7 +2351,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-subnav > * > * { display: inline-block; - color: #444444; + color: #444; } /* * Hover @@ -2222,14 +2359,14 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-subnav > * > :hover, .uk-subnav > * > :focus { - color: #0077dd; + color: #07D; text-decoration: none; } /* * Active */ .uk-subnav > .uk-active > * { - color: #0077dd; + color: #07D; } /* Modifier: 'subnav-line' ========================================================================== */ @@ -2241,7 +2378,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-subnav-line > :nth-child(n+2):before { margin-right: 10px; - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* Modifier: 'subnav-pill' ========================================================================== */ @@ -2257,7 +2394,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-subnav-pill > * > :hover, .uk-subnav-pill > * > :focus { background: #fafafa; - color: #444444; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -2269,14 +2406,14 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-subnav-pill > .uk-active > * { background: #00a8e6; - color: #ffffff; + color: #fff; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); } /* Disabled state ========================================================================== */ .uk-subnav > .uk-disabled > * { background: none; - color: #999999; + color: #999; text-decoration: none; cursor: text; box-shadow: none; @@ -2318,7 +2455,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Disabled */ .uk-breadcrumb > li:not(.uk-active) > span { - color: #999999; + color: #999; } /* ======================================================================== Component: Pagination @@ -2377,7 +2514,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { line-height: 20px; text-decoration: none; /* 1 */ - -moz-box-sizing: content-box; box-sizing: content-box; /* 2 */ text-align: center; @@ -2389,8 +2525,8 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-pagination > li > a { background: #f5f5f5; - color: #444444; - text-shadow: 0 1px 0 #ffffff; + color: #444; + text-shadow: 0 1px 0 #fff; } /* * Hover @@ -2400,22 +2536,22 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-pagination > li > a:hover, .uk-pagination > li > a:focus { background-color: #fafafa; - color: #444444; + color: #444; /* 2 */ outline: none; border-color: rgba(0, 0, 0, 0.16); } /* OnClick */ .uk-pagination > li > a:active { - background-color: #eeeeee; - color: #444444; + background-color: #eee; + color: #444; } /* * Active */ .uk-pagination > .uk-active > span { background: #00a8e6; - color: #ffffff; + color: #fff; border-color: transparent; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1); @@ -2425,9 +2561,9 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-pagination > .uk-disabled > span { background-color: #fafafa; - color: #999999; + color: #999; border: 1px solid rgba(0, 0, 0, 0.06); - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* Previous and next navigation ========================================================================== */ @@ -2452,7 +2588,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { margin: 0; padding: 0; list-style: none; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } /* * Micro clearfix on the deepest container @@ -2480,10 +2616,10 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { padding: 8px 12px 8px 12px; border: 1px solid transparent; border-bottom-width: 0; - color: #0077dd; + color: #07D; text-decoration: none; border-radius: 4px 4px 0 0; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } .uk-tab > li:nth-child(n+2) > a { margin-left: 5px; @@ -2499,7 +2635,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-tab > li.uk-open > a { border-color: rgba(0, 0, 0, 0.06); background: #f5f5f5; - color: #005599; + color: #059; /* 2 */ outline: none; } @@ -2511,14 +2647,14 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } /* Active */ .uk-tab > li.uk-active > a { - border-color: #dddddd; + border-color: #ddd; border-bottom-color: transparent; - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } /* Disabled */ .uk-tab > li.uk-disabled > a { - color: #999999; + color: #999; cursor: text; } .uk-tab > li.uk-disabled > a:hover, @@ -2552,11 +2688,11 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Modifier: 'tab-center' ========================================================================== */ .uk-tab-center { - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } .uk-tab-center-bottom { border-bottom: none; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .uk-tab-center:before, .uk-tab-center:after { @@ -2585,7 +2721,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Modifier: 'tab-bottom' ========================================================================== */ .uk-tab-bottom { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; border-bottom: none; } .uk-tab-bottom > li { @@ -2608,7 +2744,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-tab-bottom > li.uk-active > a { border-top-color: transparent; - border-bottom-color: #dddddd; + border-bottom-color: #ddd; } /* Modifier: 'tab-grid' ========================================================================== */ @@ -2628,7 +2764,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { left: 5px; right: 0; bottom: -1px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; /* 1 */ z-index: -1; } @@ -2673,13 +2809,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-tab-left > li.uk-active > a, .uk-tab-right > li.uk-active > a { - border-color: #dddddd; + border-color: #ddd; } /* * Modifier: 'tab-left' */ .uk-tab-left { - border-right: 1px solid #dddddd; + border-right: 1px solid #ddd; } .uk-tab-left > li { margin-right: -1px; @@ -2702,7 +2838,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Modifier: 'tab-right' */ .uk-tab-right { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } .uk-tab-right > li { margin-left: -1px; @@ -2797,7 +2933,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-thumbnav > * > * { display: block; - background: #ffffff; + background: #fff; } .uk-thumbnav > * > * > img { opacity: 0.7; @@ -2854,13 +2990,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-list-line > li:nth-child(n+2) { margin-top: 5px; padding-top: 5px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Modifier: `uk-list-striped` ========================================================================== */ .uk-list-striped > li { padding: 5px 5px; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } .uk-list-striped > li:nth-of-type(odd) { background: #fafafa; @@ -2871,7 +3007,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { margin-top: 10px; } .uk-list-striped > li:first-child { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* ======================================================================== Component: Description list @@ -2903,10 +3039,10 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-description-list-line > dt:nth-child(n+2) { margin-top: 5px; padding-top: 5px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .uk-description-list-line > dd { - color: #999999; + color: #999; } /* ======================================================================== Component: Table @@ -2934,7 +3070,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-table th, .uk-table td { padding: 8px 8px; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } /* * Set alignment @@ -2958,7 +3094,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-table caption { text-align: left; - color: #999999; + color: #999; } /* * Active State @@ -3004,7 +3140,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form select, .uk-form textarea { /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 2 */ margin: 0; @@ -3160,11 +3295,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* 3 */ padding: 4px 6px; /* 4 */ - border: 1px solid #dddddd; - background: #ffffff; - color: #444444; - -webkit-transition: all linear 0.2s; - transition: all linear 0.2s; + border: 1px solid #ddd; + background: #fff; + color: #444; + -webkit-transition: all 0.2s linear; + -webkit-transition-property: border, background, color, box-shadow, padding; + transition: all 0.2s linear; + transition-property: border, background, color, box-shadow, padding; border-radius: 4px; } .uk-form select:focus, @@ -3187,7 +3324,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { border-color: #99baca; outline: 0; background: #f5fbfe; - color: #444444; + color: #444; } .uk-form select:disabled, .uk-form textarea:disabled, @@ -3206,30 +3343,30 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form input[type="search"]:disabled, .uk-form input[type="tel"]:disabled, .uk-form input[type="color"]:disabled { - border-color: #dddddd; + border-color: #ddd; background-color: #fafafa; - color: #999999; + color: #999; } /* * Placeholder */ .uk-form :-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-form ::-moz-placeholder { - color: #999999; + color: #999; } .uk-form ::-webkit-input-placeholder { - color: #999999; + color: #999; } .uk-form :disabled:-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-form :disabled::-moz-placeholder { - color: #999999; + color: #999; } .uk-form :disabled::-webkit-input-placeholder { - color: #999999; + color: #999; } /* * Legend @@ -3259,7 +3396,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form legend:after { content: ""; display: block; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; /* 1 */ width: 100%; } @@ -3321,7 +3458,7 @@ input:not([type]).uk-form-large { background: none !important; } .uk-form-blank:focus { - border-color: #dddddd !important; + border-color: #ddd !important; } /* Size sub-modifiers ========================================================================== */ @@ -3452,7 +3589,7 @@ select.uk-form-width-mini { width: 30px; margin-top: -7px; font-size: 14px; - color: #999999; + color: #999; text-align: center; /* 1 */ pointer-events: none; @@ -3503,12 +3640,11 @@ select.uk-form-width-mini { overflow: visible; /* 5 */ font: inherit; - color: #444444; + color: #444; /* 6 */ text-transform: none; /* 7 */ display: inline-block; - -moz-box-sizing: border-box; box-sizing: border-box; padding: 0 12px; background: #f5f5f5; @@ -3524,7 +3660,7 @@ select.uk-form-width-mini { text-align: center; border: 1px solid rgba(0, 0, 0, 0.06); border-radius: 4px; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } .uk-button:not(:disabled) { cursor: pointer; @@ -3538,7 +3674,7 @@ select.uk-form-width-mini { .uk-button:hover, .uk-button:focus { background-color: #fafafa; - color: #444444; + color: #444; /* 2 */ outline: none; /* 3 */ @@ -3548,8 +3684,8 @@ select.uk-form-width-mini { /* Active */ .uk-button:active, .uk-button.uk-active { - background-color: #eeeeee; - color: #444444; + background-color: #eee; + color: #444; } /* Color modifiers ========================================================================== */ @@ -3558,57 +3694,57 @@ select.uk-form-width-mini { */ .uk-button-primary { background-color: #00a8e6; - color: #ffffff; + color: #fff; } /* Hover */ .uk-button-primary:hover, .uk-button-primary:focus { background-color: #35b3ee; - color: #ffffff; + color: #fff; } /* Active */ .uk-button-primary:active, .uk-button-primary.uk-active { background-color: #0091ca; - color: #ffffff; + color: #fff; } /* * Modifier: `uk-button-success` */ .uk-button-success { background-color: #8cc14c; - color: #ffffff; + color: #fff; } /* Hover */ .uk-button-success:hover, .uk-button-success:focus { background-color: #8ec73b; - color: #ffffff; + color: #fff; } /* Active */ .uk-button-success:active, .uk-button-success.uk-active { background-color: #72ae41; - color: #ffffff; + color: #fff; } /* * Modifier: `uk-button-danger` */ .uk-button-danger { background-color: #da314b; - color: #ffffff; + color: #fff; } /* Hover */ .uk-button-danger:hover, .uk-button-danger:focus { background-color: #e4354f; - color: #ffffff; + color: #fff; } /* Active */ .uk-button-danger:active, .uk-button-danger.uk-active { background-color: #c91032; - color: #ffffff; + color: #fff; } /* Disabled state * Overrides also the color modifiers @@ -3616,10 +3752,10 @@ select.uk-form-width-mini { /* Equal for all button types */ .uk-button:disabled { background-color: #fafafa; - color: #999999; + color: #999; border-color: rgba(0, 0, 0, 0.06); box-shadow: none; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* Modifier: `uk-button-link` ========================================================================== */ @@ -3637,17 +3773,17 @@ select.uk-form-width-mini { } /* Color */ .uk-button-link { - color: #0077dd; + color: #07D; } .uk-button-link:hover, .uk-button-link:focus, .uk-button-link:active, .uk-button-link.uk-active { - color: #005599; + color: #059; text-decoration: underline; } .uk-button-link:disabled { - color: #999999; + color: #999; } /* Focus */ .uk-button-link:focus { @@ -3767,7 +3903,8 @@ select.uk-form-width-mini { * Workaround: Just use a `button` or `input` element as button */ .uk-button-group .uk-button:hover, -.uk-button-group .uk-button:active { +.uk-button-group .uk-button:active, +.uk-button-group .uk-button.uk-active { position: relative; } /* ======================================================================== @@ -3775,8 +3912,7 @@ select.uk-form-width-mini { ========================================================================== */ @font-face { font-family: 'FontAwesome'; - src: url("../fonts/fontawesome-webfont.eot"); - src: url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2") format('woff2'), url("../fonts/fontawesome-webfont.woff") format("woff"), url("../fonts/fontawesome-webfont.ttf") format("truetype"); + src: url("../fonts/fontawesome-webfont.woff2") format('woff2'), url("../fonts/fontawesome-webfont.woff") format("woff"), url("../fonts/fontawesome-webfont.ttf") format("truetype"); font-weight: normal; font-style: normal; } @@ -3836,18 +3972,17 @@ select.uk-form-width-mini { /* Modifier: `uk-icon-hover` ========================================================================== */ .uk-icon-hover { - color: #999999; + color: #999; } /* * Hover */ .uk-icon-hover:hover { - color: #444444; + color: #444; } /* Modifier: `uk-icon-button` ========================================================================== */ .uk-icon-button { - -moz-box-sizing: border-box; box-sizing: border-box; display: inline-block; width: 35px; @@ -3855,11 +3990,11 @@ select.uk-form-width-mini { border-radius: 100%; background: #f5f5f5; line-height: 35px; - color: #444444; + color: #444; font-size: 18px; text-align: center; border: 1px solid #e7e7e7; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* * Hover @@ -3869,15 +4004,15 @@ select.uk-form-width-mini { .uk-icon-button:hover, .uk-icon-button:focus { background-color: #fafafa; - color: #444444; + color: #444; /* 2 */ outline: none; border-color: #d3d3d3; } /* Active */ .uk-icon-button:active { - background-color: #eeeeee; - color: #444444; + background-color: #eee; + color: #444; } /* Icon mapping ========================================================================== */ @@ -5512,6 +5647,530 @@ select.uk-form-width-mini { .uk-icon-medium-logo:before { content: "\f23a"; } +.uk-icon-500px:before { + content: "\f26e"; +} +.uk-icon-amazon:before { + content: "\f270"; +} +.uk-icon-balance-scale:before { + content: "\f24e"; +} +.uk-icon-battery-empty:before, +.uk-icon-battery-0:before { + content: "\f244"; +} +.uk-icon-battery-quarter:before, +.uk-icon-battery-1:before { + content: "\f243"; +} +.uk-icon-battery-half:before, +.uk-icon-battery-2:before { + content: "\f242"; +} +.uk-icon-battery-three-quarters:before, +.uk-icon-battery-3:before { + content: "\f241"; +} +.uk-icon-battery-full:before, +.uk-icon-battery-4:before { + content: "\f240"; +} +.uk-icon-black-tie:before { + content: "\f27e"; +} +.uk-icon-calendar-check-o:before { + content: "\f274"; +} +.uk-icon-calendar-minus-o:before { + content: "\f272"; +} +.uk-icon-calendar-plus-o:before { + content: "\f271"; +} +.uk-icon-calendar-times-o:before { + content: "\f273"; +} +.uk-icon-cc-diners-club:before { + content: "\f24c"; +} +.uk-icon-cc-jcb:before { + content: "\f24b"; +} +.uk-icon-chrome:before { + content: "\f268"; +} +.uk-icon-clone:before { + content: "\f24d"; +} +.uk-icon-commenting:before { + content: "\f27a"; +} +.uk-icon-commenting-o:before { + content: "\f27b"; +} +.uk-icon-contao:before { + content: "\f26d"; +} +.uk-icon-creative-commons:before { + content: "\f25e"; +} +.uk-icon-expeditedssl:before { + content: "\f23e"; +} +.uk-icon-firefox:before { + content: "\f269"; +} +.uk-icon-fonticons:before { + content: "\f280"; +} +.uk-icon-get-pocket:before { + content: "\f265"; +} +.uk-icon-gg:before { + content: "\f260"; +} +.uk-icon-gg-circle:before { + content: "\f261"; +} +.uk-icon-hand-lizard-o:before { + content: "\f258"; +} +.uk-icon-hand-stop-o:before, +.uk-icon-hand-paper-o:before { + content: "\f256"; +} +.uk-icon-hand-peace-o:before { + content: "\f25b"; +} +.uk-icon-hand-pointer-o:before { + content: "\f25a"; +} +.uk-icon-hand-grab-o:before, +.uk-icon-hand-rock-o:before { + content: "\f255"; +} +.uk-icon-hand-scissors-o:before { + content: "\f257"; +} +.uk-icon-hand-spock-o:before { + content: "\f259"; +} +.uk-icon-hourglass:before { + content: "\f254"; +} +.uk-icon-hourglass-o:before { + content: "\f250"; +} +.uk-icon-hourglass-1:before, +.uk-icon-hourglass-start:before { + content: "\f251"; +} +.uk-icon-hourglass-2:before, +.uk-icon-hourglass-half:before { + content: "\f252"; +} +.uk-icon-hourglass-3:before, +.uk-icon-hourglass-end:before { + content: "\f253"; +} +.uk-icon-houzz:before { + content: "\f27c"; +} +.uk-icon-i-cursor:before { + content: "\f246"; +} +.uk-icon-industry:before { + content: "\f275"; +} +.uk-icon-internet-explorer:before { + content: "\f26b"; +} +.uk-icon-map:before { + content: "\f279"; +} +.uk-icon-map-o:before { + content: "\f278"; +} +.uk-icon-map-pin:before { + content: "\f276"; +} +.uk-icon-map-signs:before { + content: "\f277"; +} +.uk-icon-mouse-pointer:before { + content: "\f245"; +} +.uk-icon-object-group:before { + content: "\f247"; +} +.uk-icon-object-ungroup:before { + content: "\f248"; +} +.uk-icon-odnoklassniki:before { + content: "\f263"; +} +.uk-icon-odnoklassniki-square:before { + content: "\f264"; +} +.uk-icon-opencart:before { + content: "\f23d"; +} +.uk-icon-opera:before { + content: "\f26a"; +} +.uk-icon-optin-monster:before { + content: "\f23c"; +} +.uk-icon-registered:before { + content: "\f25d"; +} +.uk-icon-safari:before { + content: "\f267"; +} +.uk-icon-sticky-note:before { + content: "\f249"; +} +.uk-icon-sticky-note-o:before { + content: "\f24a"; +} +.uk-icon-tv:before, +.uk-icon-television:before { + content: "\f26c"; +} +.uk-icon-trademark:before { + content: "\f25c"; +} +.uk-icon-tripadvisor:before { + content: "\f262"; +} +.uk-icon-vimeo:before { + content: "\f27d"; +} +.uk-icon-wikipedia-w:before { + content: "\f266"; +} +.uk-icon-yc:before, +.uk-icon-y-combinator:before { + content: "\f23b"; +} +.uk-icon-yc-square:before, +.uk-icon-y-combinator-square:before { + content: "\f1d4"; +} +.uk-icon-bluetooth:before { + content: "\f293"; +} +.uk-icon-bluetooth-b:before { + content: "\f294"; +} +.uk-icon-codiepie:before { + content: "\f284"; +} +.uk-icon-credit-card-alt:before { + content: "\f283"; +} +.uk-icon-edge:before { + content: "\f282"; +} +.uk-icon-fort-awesome:before { + content: "\f286"; +} +.uk-icon-hashtag:before { + content: "\f292"; +} +.uk-icon-mixcloud:before { + content: "\f289"; +} +.uk-icon-modx:before { + content: "\f285"; +} +.uk-icon-pause-circle:before { + content: "\f28b"; +} +.uk-icon-pause-circle-o:before { + content: "\f28c"; +} +.uk-icon-percent:before { + content: "\f295"; +} +.uk-icon-product-hunt:before { + content: "\f288"; +} +.uk-icon-reddit-alien:before { + content: "\f281"; +} +.uk-icon-scribd:before { + content: "\f28a"; +} +.uk-icon-shopping-bag:before { + content: "\f290"; +} +.uk-icon-shopping-basket:before { + content: "\f291"; +} +.uk-icon-stop-circle:before { + content: "\f28d"; +} +.uk-icon-stop-circle-o:before { + content: "\f28e"; +} +.uk-icon-usb:before { + content: "\f287"; +} +.uk-icon-american-sign-language-interpreting:before, +.uk-icon-asl-interpreting:before { + content: "\f2a3"; +} +.uk-icon-assistive-listening-systems:before { + content: "\f2a2"; +} +.uk-icon-audio-description:before { + content: "\f29e"; +} +.uk-icon-blind:before { + content: "\f29d"; +} +.uk-icon-braille:before { + content: "\f2a1"; +} +.uk-icon-deaf:before, +.uk-icon-deafness:before { + content: "\f2a4"; +} +.uk-icon-envira:before { + content: "\f299"; +} +.uk-icon-font-awesome:before, +.uk-icon-fa:before { + content: "\f2b4"; +} +.uk-icon-first-order:before { + content: "\f2b0"; +} +.uk-icon-gitlab:before { + content: "\f296"; +} +.uk-icon-glide:before { + content: "\f2a5"; +} +.uk-icon-glide-g:before { + content: "\f2a6"; +} +.uk-icon-hard-of-hearing:before { + content: "\f2a4"; +} +.uk-icon-low-vision:before { + content: "\f2a8"; +} +.uk-icon-question-circle-o:before { + content: "\f29c"; +} +.uk-icon-sign-language:before, +.uk-icon-signing:before { + content: "\f2a7"; +} +.uk-icon-snapchat:before { + content: "\f2ab"; +} +.uk-icon-snapchat-ghost:before { + content: "\f2ac"; +} +.uk-icon-snapchat-square:before { + content: "\f2ad"; +} +.uk-icon-themeisle:before { + content: "\f2b2"; +} +.uk-icon-universal-access:before { + content: "\f29a"; +} +.uk-icon-viadeo:before { + content: "\f2a9"; +} +.uk-icon-viadeo-square:before { + content: "\f2aa"; +} +.uk-icon-volume-control-phone:before { + content: "\f2a0"; +} +.uk-icon-wheelchair-alt:before { + content: "\f29b"; +} +.uk-icon-wpbeginner:before { + content: "\f297"; +} +.uk-icon-wpforms:before { + content: "\f298"; +} +.uk-icon-yoast:before { + content: "\f2b1"; +} +.uk-icon-adress-book:before { + content: "\f2b9"; +} +.uk-icon-adress-book-o:before { + content: "\f2ba"; +} +.uk-icon-adress-card:before { + content: "\f2bb"; +} +.uk-icon-adress-card-o:before { + content: "\f2bc"; +} +.uk-icon-bandcamp:before { + content: "\f2d5"; +} +.uk-icon-bath:before { + content: "\f2cd"; +} +.uk-icon-bathub:before { + content: "\f2cd"; +} +.uk-icon-drivers-license:before { + content: "\f2c2"; +} +.uk-icon-drivers-license-o:before { + content: "\f2c3"; +} +.uk-icon-eercast:before { + content: "\f2da"; +} +.uk-icon-envelope-open:before { + content: "\f2b6"; +} +.uk-icon-envelope-open-o:before { + content: "\f2b7"; +} +.uk-icon-etsy:before { + content: "\f2d7"; +} +.uk-icon-free-code-camp:before { + content: "\f2c5"; +} +.uk-icon-grav:before { + content: "\f2d6"; +} +.uk-icon-handshake-o:before { + content: "\f2b5"; +} +.uk-icon-id-badge:before { + content: "\f2c1"; +} +.uk-icon-id-card:before { + content: "\f2c2"; +} +.uk-icon-id-card-o:before { + content: "\f2c3"; +} +.uk-icon-imdb:before { + content: "\f2d8"; +} +.uk-icon-linode:before { + content: "\f2b8"; +} +.uk-icon-meetup:before { + content: "\f2e0"; +} +.uk-icon-microchip:before { + content: "\f2db"; +} +.uk-icon-podcast:before { + content: "\f2ce"; +} +.uk-icon-quora:before { + content: "\f2c4"; +} +.uk-icon-ravelry:before { + content: "\f2d9"; +} +.uk-icon-s15:before { + content: "\f2cd"; +} +.uk-icon-shower:before { + content: "\f2cc"; +} +.uk-icon-snowflake-o:before { + content: "\f2dc"; +} +.uk-icon-superpowers:before { + content: "\f2dd"; +} +.uk-icon-telegram:before { + content: "\f2c6"; +} +.uk-icon-thermometer:before { + content: "\f2c7"; +} +.uk-icon-thermometer-0:before { + content: "\f2cb"; +} +.uk-icon-thermometer-1:before { + content: "\f2ca"; +} +.uk-icon-thermometer-2:before { + content: "\f2c9"; +} +.uk-icon-thermometer-3:before { + content: "\f2c8"; +} +.uk-icon-thermometer-4:before { + content: "\f2c7"; +} +.uk-icon-thermometer-empty:before { + content: "\f2cb"; +} +.uk-icon-thermometer-full:before { + content: "\f2c7"; +} +.uk-icon-thermometer-half:before { + content: "\f2c9"; +} +.uk-icon-thermometer-quarter:before { + content: "\f2ca"; +} +.uk-icon-thermometer-three-quarters:before { + content: "\f2c8"; +} +.uk-icon-times-rectangle:before { + content: "\f2d3"; +} +.uk-icon-times-rectangle-o:before { + content: "\f2d4"; +} +.uk-icon-user-circle:before { + content: "\f2bd"; +} +.uk-icon-user-circle-o:before { + content: "\f2be"; +} +.uk-icon-user-o:before { + content: "\f2c0"; +} +.uk-icon-vcard:before { + content: "\f2bb"; +} +.uk-icon-vcard-o:before { + content: "\f2bc"; +} +.uk-icon-widow-close:before { + content: "\f2d3"; +} +.uk-icon-widow-close-o:before { + content: "\f2d4"; +} +.uk-icon-window-maximize:before { + content: "\f2d0"; +} +.uk-icon-window-minimize:before { + content: "\f2d1"; +} +.uk-icon-window-restore:before { + content: "\f2d2"; +} +.uk-icon-wpexplorer:before { + content: "\f2de"; +} /* ======================================================================== Component: Close ========================================================================== */ @@ -5551,7 +6210,6 @@ select.uk-form-width-mini { background: transparent; /* 8 */ display: inline-block; - -moz-box-sizing: content-box; box-sizing: content-box; width: 20px; line-height: 20px; @@ -5586,7 +6244,7 @@ select.uk-form-width-mini { .uk-close-alt { padding: 2px; border-radius: 50%; - background: #ffffff; + background: #fff; opacity: 1; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 6px rgba(0, 0, 0, 0.3); } @@ -5613,7 +6271,7 @@ select.uk-form-width-mini { font-size: 10px; font-weight: bold; line-height: 14px; - color: #ffffff; + color: #fff; text-align: center; vertical-align: middle; text-transform: none; @@ -5625,12 +6283,11 @@ select.uk-form-width-mini { * Keep color when badge is a link */ a.uk-badge:hover { - color: #ffffff; + color: #fff; } /* Modifier: `uk-badge-notification`; ========================================================================== */ .uk-badge-notification { - -moz-box-sizing: border-box; box-sizing: border-box; min-width: 18px; border-radius: 500px; @@ -5667,7 +6324,7 @@ a.uk-badge:hover { color: #2d7091; border: 1px solid rgba(45, 112, 145, 0.3); border-radius: 4px; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* * Add margin if adjacent element @@ -5748,14 +6405,13 @@ a.uk-badge:hover { /* 2 */ max-width: 100%; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 3 */ margin: 0; /* 4 */ padding: 4px; - border: 1px solid #dddddd; - background: #ffffff; + border: 1px solid #ddd; + background: #fff; border-radius: 4px; } /* @@ -5767,7 +6423,7 @@ a.uk-badge:hover { a.uk-thumbnail:hover, a.uk-thumbnail:focus { border-color: #aaaaaa; - background-color: #ffffff; + background-color: #fff; /* 2 */ text-decoration: none; /* 3 */ @@ -5778,7 +6434,7 @@ a.uk-thumbnail:focus { .uk-thumbnail-caption { padding-top: 4px; text-align: center; - color: #444444; + color: #444; } /* Sizes ========================================================================== */ @@ -5851,7 +6507,7 @@ a.uk-thumbnail:focus { right: 0; /* 2 */ padding: 20px; - color: #ffffff; + color: #fff; } /* * Remove margin from the last-child @@ -5928,7 +6584,7 @@ a.uk-thumbnail:focus { line-height: 1; font-family: FontAwesome; text-align: center; - color: #ffffff; + color: #fff; } /* Transitions ========================================================================== */ @@ -5940,7 +6596,7 @@ a.uk-thumbnail:focus { [class*='uk-overlay-slide'] { transition-duration: 0.3s; transition-timing-function: ease-out; - transition-property: opacity transform filter; + transition-property: opacity, transform, filter; } .uk-overlay-active .uk-overlay-fade, .uk-overlay-active .uk-overlay-scale, @@ -5955,6 +6611,7 @@ a.uk-thumbnail:focus { opacity: 0.7; } .uk-overlay-hover:hover .uk-overlay-fade, +.uk-overlay-hover.uk-hover .uk-overlay-fade, .uk-overlay-active .uk-active > .uk-overlay-fade { opacity: 1; } @@ -5966,6 +6623,7 @@ a.uk-thumbnail:focus { transform: scale(1); } .uk-overlay-hover:hover .uk-overlay-scale, +.uk-overlay-hover.uk-hover .uk-overlay-scale, .uk-overlay-active .uk-active > .uk-overlay-scale { -webkit-transform: scale(1.1); transform: scale(1.1); @@ -5978,6 +6636,7 @@ a.uk-thumbnail:focus { transform: scale(1) rotate(0deg); } .uk-overlay-hover:hover .uk-overlay-spin, +.uk-overlay-hover.uk-hover .uk-overlay-spin, .uk-overlay-active .uk-active > .uk-overlay-spin { -webkit-transform: scale(1.1) rotate(3deg); transform: scale(1.1) rotate(3deg); @@ -5990,6 +6649,7 @@ a.uk-thumbnail:focus { filter: grayscale(100%); } .uk-overlay-hover:hover .uk-overlay-grayscale, +.uk-overlay-hover.uk-hover .uk-overlay-grayscale, .uk-overlay-active .uk-active > .uk-overlay-grayscale { -webkit-filter: grayscale(0%); filter: grayscale(0%); @@ -6022,6 +6682,7 @@ a.uk-thumbnail:focus { } /* Hover */ .uk-overlay-hover:hover [class*='uk-overlay-slide'], +.uk-overlay-hover.uk-hover [class*='uk-overlay-slide'], .uk-overlay-active .uk-active > [class*='uk-overlay-slide'] { opacity: 1; -webkit-transform: translateX(0) translateY(0); @@ -6077,7 +6738,7 @@ a.uk-thumbnail:focus { line-height: 1; font-family: FontAwesome; text-align: center; - color: #ffffff; + color: #fff; } /* DEPRECATED * Sub-object `uk-overlay-area-content` @@ -6107,7 +6768,6 @@ a.uk-thumbnail:focus { .uk-overlay-area-content { /* 1 */ display: inline-block; - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; vertical-align: middle; @@ -6117,7 +6777,7 @@ a.uk-thumbnail:focus { text-align: center; /* 4 */ padding: 0 15px; - color: #ffffff; + color: #fff; } /* * Remove margin from the last-child @@ -6149,7 +6809,7 @@ a.uk-thumbnail:focus { /* 2 */ padding: 15px; background: rgba(0, 0, 0, 0.5); - color: #ffffff; + color: #fff; /* 3 */ opacity: 0; -webkit-transition: opacity 0.15s linear; @@ -6167,6 +6827,153 @@ a.uk-thumbnail:focus { .uk-overlay-toggle.uk-hover .uk-overlay-caption { opacity: 1; } +/* ======================================================================== + Component: Column + ========================================================================== */ +[class*='uk-column-'] { + -webkit-column-gap: 25px; + -moz-column-gap: 25px; + column-gap: 25px; +} +/* Width modifiers + ========================================================================== */ +.uk-column-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; +} +.uk-column-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; +} +.uk-column-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; +} +.uk-column-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; +} +.uk-column-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; +} +/* Phone landscape and bigger */ +@media (min-width: 480px) { + .uk-column-small-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-small-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-small-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-small-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-small-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Tablet and bigger */ +@media (min-width: 768px) { + .uk-column-medium-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-medium-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-medium-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-medium-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-medium-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Desktop and bigger */ +@media (min-width: 960px) { + .uk-column-large-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-large-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-large-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-large-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-large-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Large screen and bigger */ +@media (min-width: 1220px) { + .uk-column-xlarge-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-xlarge-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-xlarge-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-xlarge-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-xlarge-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} /* ======================================================================== Component: Animation ========================================================================== */ @@ -6726,38 +7533,45 @@ a.uk-thumbnail:focus { * 1. Hide by default * 2. Set position * 3. Box-sizing is needed for `uk-dropdown-justify` - * 4. Set style - * 5. Reset button group whitespace hack + * 4. Set width */ -.uk-dropdown { +.uk-dropdown, +.uk-dropdown-blank { /* 1 */ display: none; /* 2 */ position: absolute; - top: 100%; - left: 0; z-index: 1020; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 4 */ width: 200px; - margin-top: 5px; +} +/* + * Dropdown style + * 1. Reset button group whitespace hack + */ +.uk-dropdown { padding: 15px; - background: #ffffff; - color: #444444; - /* 5 */ + background: #fff; + color: #444; + /* 1 */ font-size: 1rem; vertical-align: top; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 4px; } +/* Focus */ +.uk-dropdown:focus { + outline: none; +} /* * 1. Show dropdown * 2. Set animation * 3. Needed for scale animation */ -.uk-open > .uk-dropdown { +.uk-open > .uk-dropdown, +.uk-open > .uk-dropdown-blank { /* 1 */ display: block; /* 2 */ @@ -6770,20 +7584,19 @@ a.uk-thumbnail:focus { /* Alignment modifiers ========================================================================== */ /* - * Modifier `uk-dropdown-flip` + * Modifier */ -.uk-dropdown-flip { - left: auto; - right: 0; +.uk-dropdown-top { + margin-top: -5px; } -/* - * Modifier `uk-dropdown-up` - */ -.uk-dropdown-up { - top: auto; - bottom: 100%; - margin-top: auto; - margin-bottom: 5px; +.uk-dropdown-bottom { + margin-top: 5px; +} +.uk-dropdown-left { + margin-left: -5px; +} +.uk-dropdown-right { + margin-left: 5px; } /* Nav in dropdown ========================================================================== */ @@ -6823,7 +7636,7 @@ a.uk-thumbnail:focus { * Column divider */ .uk-dropdown:not(.uk-dropdown-stack) > .uk-dropdown-grid > [class*='uk-width-']:nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* * Width multiplier for dropdown columns @@ -6886,8 +7699,8 @@ a.uk-thumbnail:focus { ========================================================================== */ .uk-dropdown-navbar { margin-top: 6px; - background: #ffffff; - color: #444444; + background: #fff; + color: #444; left: -1px; } .uk-open > .uk-dropdown-navbar { @@ -6903,6 +7716,8 @@ a.uk-thumbnail:focus { overflow-y: auto; max-height: 200px; } +/* Sub-object: `uk-dropdown-overlay` + ========================================================================== */ .uk-dropdown-navbar.uk-dropdown-flip { left: auto; } @@ -6969,7 +7784,6 @@ a.uk-thumbnail:focus { /* 1 */ position: relative; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; margin: 50px auto; padding: 20px; @@ -6977,7 +7791,7 @@ a.uk-thumbnail:focus { max-width: 100%; max-width: calc(100% - 20px); /* 3 */ - background: #ffffff; + background: #fff; /* 4 */ opacity: 0; -webkit-transform: translateY(-100px); @@ -7031,6 +7845,7 @@ a.uk-thumbnail:focus { padding: 0; max-width: 95%; max-width: calc(100% - 30px); + min-height: 50px; border-radius: 0; } /* @@ -7050,6 +7865,27 @@ a.uk-thumbnail:focus { right: -7px; } } +/* Modifier: `uk-modal-dialog-blank` + ========================================================================== */ +.uk-modal-dialog-blank { + margin: 0; + padding: 0; + width: 100%; + max-width: 100%; + -webkit-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} +/* +* Close button +*/ +.uk-modal-dialog-blank > .uk-close:first-child { + position: absolute; + top: 20px; + right: 20px; + z-index: 1; + margin: 0; + float: none; +} /* Modifier: `uk-modal-dialog-large` ========================================================================== */ /* Tablet and bigger */ @@ -7070,7 +7906,7 @@ a.uk-thumbnail:focus { margin-bottom: 15px; margin: -20px -20px 15px -20px; padding: 20px; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0; background: #fafafa; } @@ -7078,7 +7914,7 @@ a.uk-thumbnail:focus { margin-top: 15px; margin: 15px -20px -20px -20px; padding: 20px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; border-radius: 0 0 4px 4px; background: #fafafa; } @@ -7097,7 +7933,7 @@ a.uk-thumbnail:focus { right: 0; bottom: -20px; margin-bottom: -10px; - color: #ffffff; + color: #fff; text-align: center; overflow: hidden; text-overflow: ellipsis; @@ -7116,6 +7952,7 @@ a.uk-thumbnail:focus { } .uk-modal-spinner:after { content: "\f110"; + display: block; font-family: FontAwesome; -webkit-animation: uk-rotate 2s infinite linear; animation: uk-rotate 2s infinite linear; @@ -7154,6 +7991,7 @@ a.uk-thumbnail:focus { * Prepares the whole HTML page to slide-out * 1. Fix the main page and disallow scrolling * 2. Side-out transition + * 3. Needed for the transition to work instead of just letting it pop to the side */ .uk-offcanvas-page { /* 1 */ @@ -7161,6 +7999,8 @@ a.uk-thumbnail:focus { /* 2 */ -webkit-transition: margin-left 0.3s ease-in-out; transition: margin-left 0.3s ease-in-out; + /* 3 */ + margin-left: 0; } /* Sub-object `uk-offcanvas-bar` ========================================================================== */ @@ -7170,7 +8010,7 @@ a.uk-thumbnail:focus { * 2. Size and style * 3. Allow scrolling * 4. Side-out transition - * 5. Deavtivate scroll chaining in IE11 + * 5. Deactivate scroll chaining in IE11 */ .uk-offcanvas-bar { /* 1 */ @@ -7184,7 +8024,7 @@ a.uk-thumbnail:focus { /* 2 */ width: 270px; max-width: 100%; - background: #333333; + background: #333; /* 3 */ overflow-y: auto; -webkit-overflow-scrolling: touch; @@ -7206,21 +8046,49 @@ a.uk-thumbnail:focus { -webkit-transform: translateX(100%); transform: translateX(100%); } +/* Offcanvase modes + ========================================================================== */ +.uk-offcanvas-bar[mode='none'] { + -webkit-transition: none; + transition: none; +} +.uk-offcanvas-bar[mode='reveal'] { + -webkit-transform: translateX(0%); + transform: translateX(0%); + clip: rect(0, 0, 100vh, 0); + -webkit-transition: -webkit-transform 0.3s ease-in-out, clip 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, clip 0.3s ease-in-out; +} +.uk-offcanvas-bar-flip[mode='reveal'] { + clip: none; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} +.uk-offcanvas-bar-flip[mode='reveal'] > * { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + -webkit-transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; +} +.uk-offcanvas.uk-active .uk-offcanvas-bar-flip[mode='reveal'].uk-offcanvas-bar-show > * { + -webkit-transform: translateX(0%); + transform: translateX(0%); +} /* Panel in offcanvas ========================================================================== */ .uk-offcanvas .uk-panel { margin: 20px 15px; - color: #777777; + color: #777; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .uk-offcanvas .uk-panel-title { - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-panel a:not([class]) { - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-panel a:not([class]):hover { - color: #ffffff; + color: #fff; } .uk-offcanvas-bar:after { content: ""; @@ -7281,7 +8149,7 @@ a.uk-thumbnail:focus { /* Color modifiers ========================================================================== */ .uk-text-muted { - color: #999999 !important; + color: #999 !important; } .uk-text-primary { color: #2d7091 !important; @@ -7296,7 +8164,7 @@ a.uk-thumbnail:focus { color: #d85030 !important; } .uk-text-contrast { - color: #ffffff !important; + color: #fff !important; } /* Alignment modifiers ========================================================================== */ @@ -7365,13 +8233,23 @@ a.uk-thumbnail:focus { -moz-hyphens: auto; hyphens: auto; } +/* Transform modifiers + ========================================================================== */ +.uk-text-capitalize { + text-transform: capitalize !important; +} +.uk-text-lowercase { + text-transform: lowercase !important; +} +.uk-text-uppercase { + text-transform: uppercase !important; +} /* ======================================================================== Component: Utility ========================================================================== */ /* Container ========================================================================== */ .uk-container { - -moz-box-sizing: border-box; box-sizing: border-box; max-width: 980px; padding: 0 25px; @@ -7465,12 +8343,10 @@ a.uk-thumbnail:focus { @media (min-width: 768px) { .uk-align-medium-left { margin-right: 15px; - margin-bottom: 15px; float: left; } .uk-align-medium-right { margin-left: 15px; - margin-bottom: 15px; float: right; } } @@ -7518,7 +8394,6 @@ a.uk-thumbnail:focus { * More robust if padding and border are used */ [class*='uk-height'] { - -moz-box-sizing: border-box; box-sizing: border-box; } /* @@ -7542,7 +8417,6 @@ a.uk-thumbnail:focus { */ .uk-responsive-width, .uk-responsive-height { - -moz-box-sizing: border-box; box-sizing: border-box; } /* @@ -7682,11 +8556,11 @@ a.uk-thumbnail:focus { */ .uk-link-muted, .uk-link-muted a { - color: #444444; + color: #444; } .uk-link-muted:hover, .uk-link-muted a:hover { - color: #444444; + color: #444; } /* * Reset link style @@ -7715,11 +8589,10 @@ a.uk-thumbnail:focus { * Box with scrolling enabled */ .uk-scrollable-box { - -moz-box-sizing: border-box; box-sizing: border-box; height: 170px; padding: 10px; - border: 1px solid #dddddd; + border: 1px solid #ddd; overflow: auto; -webkit-overflow-scrolling: touch; resize: both; @@ -7750,13 +8623,16 @@ a.uk-thumbnail:focus { [class*='uk-position-bottom'] { position: absolute !important; } +/* Don't use `width: 100%` because it is wrong if the parent has padding. */ .uk-position-top { top: 0; - width: 100%; + left: 0; + right: 0; } .uk-position-bottom { bottom: 0; - width: 100%; + left: 0; + right: 0; } .uk-position-top-left { top: 0; @@ -7800,6 +8676,7 @@ a.uk-thumbnail:focus { ========================================================================== */ /* * Display + * 1. Required if child is a responsive image */ .uk-display-block { display: block !important; @@ -7809,6 +8686,8 @@ a.uk-thumbnail:focus { } .uk-display-inline-block { display: inline-block !important; + /* 1 */ + max-width: 100%; } /* * Visibility @@ -8110,7 +8989,8 @@ a.uk-thumbnail:focus { Component: Contrast ========================================================================== */ .uk-contrast { - color: #ffffff; + color: #fff; + /* Active */ } .uk-contrast a:not([class]), .uk-contrast .uk-link { @@ -8119,18 +8999,18 @@ a.uk-thumbnail:focus { } .uk-contrast a:not([class]):hover, .uk-contrast .uk-link:hover { - color: #ffffff; + color: #fff; text-decoration: underline; } .uk-contrast :not(pre) > code, .uk-contrast :not(pre) > kbd, .uk-contrast :not(pre) > samp { - color: #ffffff; + color: #fff; border-color: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.1); } .uk-contrast em { - color: #ffffff; + color: #fff; } .uk-contrast h1, .uk-contrast h2, @@ -8138,7 +9018,7 @@ a.uk-thumbnail:focus { .uk-contrast h4, .uk-contrast h5, .uk-contrast h6 { - color: #ffffff; + color: #fff; } .uk-contrast hr { border-top-color: rgba(255, 255, 255, 0.2); @@ -8148,21 +9028,21 @@ a.uk-thumbnail:focus { text-decoration: none; } .uk-contrast .uk-nav-side > li > a { - color: #ffffff; + color: #fff; } .uk-contrast .uk-nav-side > li > a:hover, .uk-contrast .uk-nav-side > li > a:focus { background: rgba(255, 255, 255, 0.1); - color: #ffffff; + color: #fff; text-shadow: none; } .uk-contrast .uk-nav-side > li.uk-active > a { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; text-shadow: none; } .uk-contrast .uk-nav-side .uk-nav-header { - color: #ffffff; + color: #fff; } .uk-contrast .uk-nav-side .uk-nav-divider { border-top-color: rgba(255, 255, 255, 0.2); @@ -8171,7 +9051,7 @@ a.uk-thumbnail:focus { color: rgba(255, 255, 255, 0.7); } .uk-contrast .uk-nav-side ul a:hover { - color: #ffffff; + color: #fff; } .uk-contrast .uk-subnav > * > a { color: rgba(255, 255, 255, 0.7); @@ -8179,11 +9059,11 @@ a.uk-thumbnail:focus { } .uk-contrast .uk-subnav > * > a:hover, .uk-contrast .uk-subnav > * > a:focus { - color: #ffffff; + color: #fff; text-decoration: none; } .uk-contrast .uk-subnav > .uk-active > a { - color: #ffffff; + color: #fff; } .uk-contrast .uk-subnav-line > :nth-child(n+2):before { border-left-color: rgba(255, 255, 255, 0.2); @@ -8191,12 +9071,40 @@ a.uk-thumbnail:focus { .uk-contrast .uk-subnav-pill > * > a:hover, .uk-contrast .uk-subnav-pill > * > a:focus { background: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; text-decoration: none; } .uk-contrast .uk-subnav-pill > .uk-active > a { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; +} +.uk-contrast .uk-tab { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-contrast .uk-tab > li > a { + border-color: transparent; + color: rgba(255, 255, 255, 0.7); + text-shadow: none; +} +.uk-contrast .uk-tab > li > a:hover, +.uk-contrast .uk-tab > li > a:focus, +.uk-contrast .uk-tab > li.uk-open > a { + border-color: rgba(255, 255, 255, 0.7); + background: rgba(255, 255, 255, 0.7); + color: #444; + text-decoration: none; +} +.uk-contrast .uk-tab > li.uk-active > a { + border-color: rgba(255, 255, 255, 0.2); + border-bottom-color: transparent; + background: #fff; + color: #444; +} +.uk-contrast .uk-tab-center { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-contrast .uk-tab-grid:before { + border-top-color: rgba(255, 255, 255, 0.2); } .uk-contrast .uk-list-line > li:nth-child(n+2) { border-top-color: rgba(255, 255, 255, 0.2); @@ -8220,7 +9128,7 @@ a.uk-thumbnail:focus { .uk-contrast .uk-form input[type="color"] { border-color: rgba(255, 255, 255, 0.8); background: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; background-clip: padding-box; } .uk-contrast .uk-form select:focus, @@ -8240,9 +9148,9 @@ a.uk-thumbnail:focus { .uk-contrast .uk-form input[type="search"]:focus, .uk-contrast .uk-form input[type="tel"]:focus, .uk-contrast .uk-form input[type="color"]:focus { - border-color: #ffffff; - background: #ffffff; - color: #444444; + border-color: #fff; + background: #fff; + color: #444; } .uk-contrast .uk-form :-ms-input-placeholder { color: rgba(68, 68, 68, 0.7) !important; @@ -8254,55 +9162,55 @@ a.uk-thumbnail:focus { color: rgba(68, 68, 68, 0.7); } .uk-contrast .uk-button { - color: #444444; - background: #ffffff; + color: #444; + background: #fff; border-color: transparent; } .uk-contrast .uk-button:hover, .uk-contrast .uk-button:focus { background-color: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; border-color: transparent; } .uk-contrast .uk-button:active, .uk-contrast .uk-button.uk-active { background-color: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; } .uk-contrast .uk-button-primary { background-color: #00a8e6; - color: #ffffff; + color: #fff; } .uk-contrast .uk-button-primary:hover, .uk-contrast .uk-button-primary:focus { background-color: #35b3ee; - color: #ffffff; + color: #fff; } .uk-contrast .uk-button-primary:active, .uk-contrast .uk-button-primary.uk-active { background-color: #0091ca; - color: #ffffff; + color: #fff; } .uk-contrast .uk-icon-hover { color: rgba(255, 255, 255, 0.7); } .uk-contrast .uk-icon-hover:hover { - color: #ffffff; + color: #fff; } .uk-contrast .uk-icon-button { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; border-color: transparent; } .uk-contrast .uk-icon-button:hover, .uk-contrast .uk-icon-button:focus { background-color: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; border-color: transparent; } .uk-contrast .uk-icon-button:active { background-color: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; } .uk-contrast .uk-text-muted { color: rgba(255, 255, 255, 0.6) !important; @@ -8314,7 +9222,9 @@ a.uk-thumbnail:focus { Component: Print ========================================================================== */ @media print { - * { + *, + *:before, + *:after { background: transparent !important; color: black !important; box-shadow: none !important; diff --git a/media/uikit-v2/css/uikit.almost-flat.min.css b/media/uikit-v2/css/uikit.almost-flat.min.css new file mode 100644 index 0000000..5760023 --- /dev/null +++ b/media/uikit-v2/css/uikit.almost-flat.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +html{font:400 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;background:#fff;color:#444}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}.uk-link,a{color:#07D;text-decoration:none;cursor:pointer}.uk-link:hover,a:hover{color:#059;text-decoration:underline}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-size:12px;font-family:Consolas,monospace,serif;color:#D05;white-space:nowrap;padding:0 4px;border:1px solid #ddd;border-radius:3px;background:#fafafa}em{color:#D05}ins{background:#ffa;color:#444;text-decoration:none}mark{background:#ffa;color:#444}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}.uk-img-preserve,.uk-img-preserve audio,.uk-img-preserve canvas,.uk-img-preserve img,.uk-img-preserve svg,.uk-img-preserve video{max-width:none}img{border:0}svg:not(:root){overflow:hidden}blockquote,figure{margin:0}address,blockquote,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 15px 0}*+address,*+blockquote,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:15px}h1,h2,h3,h4,h5,h6{margin:0 0 15px 0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;color:#444;text-transform:none}*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:25px}.uk-h1,h1{font-size:36px;line-height:42px}.uk-h2,h2{font-size:24px;line-height:30px}.uk-h3,h3{font-size:18px;line-height:24px}.uk-h4,h4{font-size:16px;line-height:22px}.uk-h5,h5{font-size:14px;line-height:20px}.uk-h6,h6{font-size:12px;line-height:18px}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}hr{box-sizing:content-box;height:0;margin:15px 0;border:0;border-top:1px solid #ddd}address{font-style:normal}blockquote{padding-left:15px;border-left:5px solid #ddd;font-size:16px;line-height:22px;font-style:italic}pre{padding:10px;background:#fafafa;font:12px/18px Consolas,monospace,serif;color:#444;-moz-tab-size:4;tab-size:4;overflow:auto;border:1px solid #ddd;border-radius:3px}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}article,aside,details,figcaption,figure,footer,header,main,nav,section,summary{display:block}progress{vertical-align:baseline}audio:not([controls]){display:none}[hidden],template{display:none}iframe{border:0}@media screen and (max-width:400px){@-ms-viewport{width:device-width}}.uk-grid{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid:after,.uk-grid:before{content:"";display:block;overflow:hidden}.uk-grid:after{clear:both}.uk-grid>*{-ms-flex:none;-webkit-flex:none;flex:none;margin:0;float:left}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-25px}.uk-grid>*{padding-left:25px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:25px}@media (min-width:1220px){.uk-grid{margin-left:-35px}.uk-grid>*{padding-left:35px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:35px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid-collapse+.uk-grid-collapse,.uk-grid-collapse>*>.uk-panel+.uk-panel,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-small{margin-left:-10px}.uk-grid-small>*{padding-left:10px}.uk-grid-small+.uk-grid-small,.uk-grid-small>*>.uk-panel+.uk-panel,.uk-grid-small>.uk-grid-margin{margin-top:10px}.uk-grid-medium{margin-left:-25px}.uk-grid-medium>*{padding-left:25px}.uk-grid-medium+.uk-grid-medium,.uk-grid-medium>*>.uk-panel+.uk-panel,.uk-grid-medium>.uk-grid-margin{margin-top:25px}@media (min-width:960px){.uk-grid-large{margin-left:-35px}.uk-grid-large>*{padding-left:35px}.uk-grid-large+.uk-grid-large,.uk-grid-large-margin,.uk-grid-large>*>.uk-panel+.uk-panel{margin-top:35px}}@media (min-width:1220px){.uk-grid-large{margin-left:-50px}.uk-grid-large>*{padding-left:50px}.uk-grid-large+.uk-grid-large,.uk-grid-large-margin,.uk-grid-large>*>.uk-panel+.uk-panel{margin-top:50px}}.uk-grid-divider:not(:empty){margin-left:-25px;margin-right:-25px}.uk-grid-divider>*{padding-left:25px;padding-right:25px}.uk-grid-divider>[class*=uk-width-9-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-1-]:not(.uk-width-1-1):nth-child(n+2),.uk-grid-divider>[class*=uk-width-2-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-3-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-4-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-5-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-6-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-7-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-8-]:nth-child(n+2){border-left:1px solid #ddd}@media (min-width:768px){.uk-grid-divider>[class*=uk-width-medium-]:not(.uk-width-medium-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:960px){.uk-grid-divider>[class*=uk-width-large-]:not(.uk-width-large-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:1220px){.uk-grid-divider:not(:empty){margin-left:-35px;margin-right:-35px}.uk-grid-divider>*{padding-left:35px;padding-right:35px}.uk-grid-divider:empty{margin-top:35px;margin-bottom:35px}}.uk-grid-divider:empty{margin-top:25px;margin-bottom:25px;border-top:1px solid #ddd}.uk-grid-match>*{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-grid-match>*>*{-ms-flex:none;-webkit-flex:none;flex:none;box-sizing:border-box;width:100%}[class*=uk-grid-width]>*{box-sizing:border-box;width:100%}.uk-grid-width-1-2>*{width:50%}.uk-grid-width-1-3>*{width:33.333%}.uk-grid-width-1-4>*{width:25%}.uk-grid-width-1-5>*{width:20%}.uk-grid-width-1-6>*{width:16.666%}.uk-grid-width-1-10>*{width:10%}.uk-grid-width-auto>*{width:auto}@media (min-width:480px){.uk-grid-width-small-1-1>*{width:100%}.uk-grid-width-small-1-2>*{width:50%}.uk-grid-width-small-1-3>*{width:33.333%}.uk-grid-width-small-1-4>*{width:25%}.uk-grid-width-small-1-5>*{width:20%}.uk-grid-width-small-1-6>*{width:16.666%}.uk-grid-width-small-1-10>*{width:10%}}@media (min-width:768px){.uk-grid-width-medium-1-1>*{width:100%}.uk-grid-width-medium-1-2>*{width:50%}.uk-grid-width-medium-1-3>*{width:33.333%}.uk-grid-width-medium-1-4>*{width:25%}.uk-grid-width-medium-1-5>*{width:20%}.uk-grid-width-medium-1-6>*{width:16.666%}.uk-grid-width-medium-1-10>*{width:10%}}@media (min-width:960px){.uk-grid-width-large-1-1>*{width:100%}.uk-grid-width-large-1-2>*{width:50%}.uk-grid-width-large-1-3>*{width:33.333%}.uk-grid-width-large-1-4>*{width:25%}.uk-grid-width-large-1-5>*{width:20%}.uk-grid-width-large-1-6>*{width:16.666%}.uk-grid-width-large-1-10>*{width:10%}}@media (min-width:1220px){.uk-grid-width-xlarge-1-1>*{width:100%}.uk-grid-width-xlarge-1-2>*{width:50%}.uk-grid-width-xlarge-1-3>*{width:33.333%}.uk-grid-width-xlarge-1-4>*{width:25%}.uk-grid-width-xlarge-1-5>*{width:20%}.uk-grid-width-xlarge-1-6>*{width:16.666%}.uk-grid-width-xlarge-1-10>*{width:10%}}[class*=uk-width]{box-sizing:border-box;width:100%}.uk-width-1-1{width:100%}.uk-width-1-2,.uk-width-2-4,.uk-width-3-6,.uk-width-5-10{width:50%}.uk-width-1-3,.uk-width-2-6{width:33.333%}.uk-width-2-3,.uk-width-4-6{width:66.666%}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5,.uk-width-2-10{width:20%}.uk-width-2-5,.uk-width-4-10{width:40%}.uk-width-3-5,.uk-width-6-10{width:60%}.uk-width-4-5,.uk-width-8-10{width:80%}.uk-width-1-6{width:16.666%}.uk-width-5-6{width:83.333%}.uk-width-1-10{width:10%}.uk-width-3-10{width:30%}.uk-width-7-10{width:70%}.uk-width-9-10{width:90%}@media (min-width:480px){.uk-width-small-1-1{width:100%}.uk-width-small-1-2,.uk-width-small-2-4,.uk-width-small-3-6,.uk-width-small-5-10{width:50%}.uk-width-small-1-3,.uk-width-small-2-6{width:33.333%}.uk-width-small-2-3,.uk-width-small-4-6{width:66.666%}.uk-width-small-1-4{width:25%}.uk-width-small-3-4{width:75%}.uk-width-small-1-5,.uk-width-small-2-10{width:20%}.uk-width-small-2-5,.uk-width-small-4-10{width:40%}.uk-width-small-3-5,.uk-width-small-6-10{width:60%}.uk-width-small-4-5,.uk-width-small-8-10{width:80%}.uk-width-small-1-6{width:16.666%}.uk-width-small-5-6{width:83.333%}.uk-width-small-1-10{width:10%}.uk-width-small-3-10{width:30%}.uk-width-small-7-10{width:70%}.uk-width-small-9-10{width:90%}}@media (min-width:768px){.uk-width-medium-1-1{width:100%}.uk-width-medium-1-2,.uk-width-medium-2-4,.uk-width-medium-3-6,.uk-width-medium-5-10{width:50%}.uk-width-medium-1-3,.uk-width-medium-2-6{width:33.333%}.uk-width-medium-2-3,.uk-width-medium-4-6{width:66.666%}.uk-width-medium-1-4{width:25%}.uk-width-medium-3-4{width:75%}.uk-width-medium-1-5,.uk-width-medium-2-10{width:20%}.uk-width-medium-2-5,.uk-width-medium-4-10{width:40%}.uk-width-medium-3-5,.uk-width-medium-6-10{width:60%}.uk-width-medium-4-5,.uk-width-medium-8-10{width:80%}.uk-width-medium-1-6{width:16.666%}.uk-width-medium-5-6{width:83.333%}.uk-width-medium-1-10{width:10%}.uk-width-medium-3-10{width:30%}.uk-width-medium-7-10{width:70%}.uk-width-medium-9-10{width:90%}}@media (min-width:960px){.uk-width-large-1-1{width:100%}.uk-width-large-1-2,.uk-width-large-2-4,.uk-width-large-3-6,.uk-width-large-5-10{width:50%}.uk-width-large-1-3,.uk-width-large-2-6{width:33.333%}.uk-width-large-2-3,.uk-width-large-4-6{width:66.666%}.uk-width-large-1-4{width:25%}.uk-width-large-3-4{width:75%}.uk-width-large-1-5,.uk-width-large-2-10{width:20%}.uk-width-large-2-5,.uk-width-large-4-10{width:40%}.uk-width-large-3-5,.uk-width-large-6-10{width:60%}.uk-width-large-4-5,.uk-width-large-8-10{width:80%}.uk-width-large-1-6{width:16.666%}.uk-width-large-5-6{width:83.333%}.uk-width-large-1-10{width:10%}.uk-width-large-3-10{width:30%}.uk-width-large-7-10{width:70%}.uk-width-large-9-10{width:90%}}@media (min-width:1220px){.uk-width-xlarge-1-1{width:100%}.uk-width-xlarge-1-2,.uk-width-xlarge-2-4,.uk-width-xlarge-3-6,.uk-width-xlarge-5-10{width:50%}.uk-width-xlarge-1-3,.uk-width-xlarge-2-6{width:33.333%}.uk-width-xlarge-2-3,.uk-width-xlarge-4-6{width:66.666%}.uk-width-xlarge-1-4{width:25%}.uk-width-xlarge-3-4{width:75%}.uk-width-xlarge-1-5,.uk-width-xlarge-2-10{width:20%}.uk-width-xlarge-2-5,.uk-width-xlarge-4-10{width:40%}.uk-width-xlarge-3-5,.uk-width-xlarge-6-10{width:60%}.uk-width-xlarge-4-5,.uk-width-xlarge-8-10{width:80%}.uk-width-xlarge-1-6{width:16.666%}.uk-width-xlarge-5-6{width:83.333%}.uk-width-xlarge-1-10{width:10%}.uk-width-xlarge-3-10{width:30%}.uk-width-xlarge-7-10{width:70%}.uk-width-xlarge-9-10{width:90%}}@media (min-width:768px){[class*=uk-push-],[class*=uk-pull-]{position:relative}.uk-push-1-2,.uk-push-2-4,.uk-push-3-6,.uk-push-5-10{left:50%}.uk-push-1-3,.uk-push-2-6{left:33.333%}.uk-push-2-3,.uk-push-4-6{left:66.666%}.uk-push-1-4{left:25%}.uk-push-3-4{left:75%}.uk-push-1-5,.uk-push-2-10{left:20%}.uk-push-2-5,.uk-push-4-10{left:40%}.uk-push-3-5,.uk-push-6-10{left:60%}.uk-push-4-5,.uk-push-8-10{left:80%}.uk-push-1-6{left:16.666%}.uk-push-5-6{left:83.333%}.uk-push-1-10{left:10%}.uk-push-3-10{left:30%}.uk-push-7-10{left:70%}.uk-push-9-10{left:90%}.uk-pull-1-2,.uk-pull-2-4,.uk-pull-3-6,.uk-pull-5-10{left:-50%}.uk-pull-1-3,.uk-pull-2-6{left:-33.333%}.uk-pull-2-3,.uk-pull-4-6{left:-66.666%}.uk-pull-1-4{left:-25%}.uk-pull-3-4{left:-75%}.uk-pull-1-5,.uk-pull-2-10{left:-20%}.uk-pull-2-5,.uk-pull-4-10{left:-40%}.uk-pull-3-5,.uk-pull-6-10{left:-60%}.uk-pull-4-5,.uk-pull-8-10{left:-80%}.uk-pull-1-6{left:-16.666%}.uk-pull-5-6{left:-83.333%}.uk-pull-1-10{left:-10%}.uk-pull-3-10{left:-30%}.uk-pull-7-10{left:-70%}.uk-pull-9-10{left:-90%}}.uk-panel{display:block;position:relative}.uk-panel,.uk-panel:hover{text-decoration:none}.uk-panel:after,.uk-panel:before{content:"";display:table}.uk-panel:after{clear:both}.uk-panel>:not(.uk-panel-title):last-child{margin-bottom:0}.uk-panel-title{margin-top:0;margin-bottom:15px;font-size:18px;line-height:24px;font-weight:400;text-transform:none;color:#444}.uk-panel-badge{position:absolute;top:0;right:0;z-index:1}.uk-panel-teaser{margin-bottom:15px}.uk-panel-body{padding:15px}.uk-panel-box{padding:15px;background:#fafafa;color:#444;border:1px solid #ddd;border-radius:4px}.uk-panel-box-hover:hover{color:#444}.uk-panel-box .uk-panel-title{color:#444}.uk-panel-box .uk-panel-badge{top:10px;right:10px}.uk-panel-box>.uk-panel-teaser{margin-top:-16px;margin-left:-16px;margin-right:-16px}.uk-panel-box>.uk-nav-side{margin:0 -15px}.uk-panel-box-primary{background-color:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-panel-box-primary-hover:hover{color:#2d7091}.uk-panel-box-primary .uk-panel-title{color:#2d7091}.uk-panel-box-secondary{background-color:#fff;color:#444}.uk-panel-box-secondary-hover:hover{color:#444}.uk-panel-box-secondary .uk-panel-title{color:#444}.uk-panel-hover{padding:15px;color:#444;border:1px solid transparent;border-radius:4px}.uk-panel-hover:hover{background:#fafafa;color:#444;border-color:#ddd}.uk-panel-hover .uk-panel-badge{top:10px;right:10px}.uk-panel-hover>.uk-panel-teaser{margin-top:-16px;margin-left:-16px;margin-right:-16px}.uk-panel-header .uk-panel-title{padding-bottom:10px;border-bottom:1px solid #ddd;color:#444}.uk-panel-space{padding:30px}.uk-panel-space .uk-panel-badge{top:30px;right:30px}.uk-panel+.uk-panel-divider{margin-top:50px!important}.uk-panel+.uk-panel-divider:before{content:"";display:block;position:absolute;top:-25px;left:0;right:0;border-top:1px solid #ddd}@media (min-width:1220px){.uk-panel+.uk-panel-divider{margin-top:70px!important}.uk-panel+.uk-panel-divider:before{top:-35px}}.uk-panel-box .uk-panel-teaser{border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden;-webkit-transform:translateZ(0)}.uk-block{position:relative;box-sizing:border-box;padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block{padding-top:50px;padding-bottom:50px}}.uk-block:after,.uk-block:before{content:"";display:table}.uk-block:after{clear:both}.uk-block>:last-child{margin-bottom:0}.uk-block-large{padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block-large{padding-top:50px;padding-bottom:50px}}@media (min-width:960px){.uk-block-large{padding-top:100px;padding-bottom:100px}}.uk-block-default{background:#fff}.uk-block-muted{background:#f9f9f9}.uk-block-primary{background:#00a8e6}.uk-block-secondary{background:#222}.uk-block-default+.uk-block-default,.uk-block-muted+.uk-block-muted,.uk-block-primary+.uk-block-primary,.uk-block-secondary+.uk-block-secondary{padding-top:0}.uk-article:after,.uk-article:before{content:"";display:table}.uk-article:after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:25px}.uk-article-title{font-size:36px;line-height:42px;font-weight:400;text-transform:none}.uk-article-title a{color:inherit;text-decoration:none}.uk-article-meta{font-size:12px;line-height:18px;color:#999}.uk-article-lead{color:#444;font-size:18px;line-height:24px;font-weight:400}.uk-article-divider{margin-bottom:25px;border-color:#ddd}*+.uk-article-divider{margin-top:25px}.uk-article+.uk-article{padding-top:25px;border-top:1px solid #ddd}.uk-comment-header{margin-bottom:15px;padding:10px;border:1px solid #ddd;border-radius:4px;background:#fafafa}.uk-comment-header:after,.uk-comment-header:before{content:"";display:table}.uk-comment-header:after{clear:both}.uk-comment-avatar{margin-right:15px;float:left}.uk-comment-title{margin:5px 0 0 0;font-size:16px;line-height:22px}.uk-comment-meta{margin:2px 0 0 0;font-size:11px;line-height:16px;color:#999}.uk-comment-body{padding-left:10px;padding-right:10px}.uk-comment-body>:last-child{margin-bottom:0}.uk-comment-list{padding:0;list-style:none}.uk-comment-list .uk-comment+ul{margin:25px 0 0 0;list-style:none}.uk-comment-list .uk-comment+ul>li:nth-child(n+2),.uk-comment-list>li:nth-child(n+2){margin-top:25px}@media (min-width:768px){.uk-comment-list .uk-comment+ul{padding-left:100px}}.uk-comment-primary .uk-comment-header{border-color:rgba(45,112,145,.3);background-color:#ebf7fd;color:#2d7091;text-shadow:0 1px 0 #fff}.uk-cover-background{background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.uk-cover{overflow:hidden}.uk-cover-object{width:auto;height:auto;min-width:100%;min-height:100%;max-width:none;position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}[data-uk-cover]{position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav>li>a{padding:5px 15px}.uk-nav ul{padding-left:15px}.uk-nav ul a{padding:2px 0}.uk-nav li>a>div{font-size:12px;line-height:18px}.uk-nav-header{padding:5px 15px;text-transform:uppercase;font-weight:700;font-size:12px}.uk-nav-header:not(:first-child){margin-top:15px}.uk-nav-divider{margin:9px 15px}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-parent-icon>.uk-parent>a:after{content:"\f104";width:20px;margin-right:-10px;float:right;font-family:FontAwesome;text-align:center}.uk-nav-parent-icon>.uk-parent.uk-open>a:after{content:"\f107"}.uk-nav-side>li>a{color:#444}.uk-nav-side>li>a:focus,.uk-nav-side>li>a:hover{background:rgba(0,0,0,.03);color:#444;outline:0;box-shadow:inset 0 0 1px rgba(0,0,0,.06);text-shadow:0 -1px 0 #fff}.uk-nav-side>li.uk-active>a{background:#00a8e6;color:#fff;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-side .uk-nav-header{color:#444}.uk-nav-side .uk-nav-divider{border-top:1px solid #ddd;box-shadow:0 1px 0 #fff}.uk-nav-side ul a{color:#07D}.uk-nav-side ul a:hover{color:#059}.uk-nav-dropdown>li>a{color:#444}.uk-nav-dropdown>li>a:focus,.uk-nav-dropdown>li>a:hover{background:#00a8e6;color:#fff;outline:0;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-dropdown .uk-nav-header{color:#999}.uk-nav-dropdown .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-dropdown ul a{color:#07D}.uk-nav-dropdown ul a:hover{color:#059}.uk-nav-navbar>li>a{color:#444}.uk-nav-navbar>li>a:focus,.uk-nav-navbar>li>a:hover{background:#00a8e6;color:#fff;outline:0;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-navbar .uk-nav-header{color:#999}.uk-nav-navbar .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-navbar ul a{color:#07D}.uk-nav-navbar ul a:hover{color:#059}.uk-nav-offcanvas>li>a{color:#ccc;padding:10px 15px;border-top:1px solid rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05);text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-nav-offcanvas>.uk-open>a,html:not(.uk-touch) .uk-nav-offcanvas>li>a:focus,html:not(.uk-touch) .uk-nav-offcanvas>li>a:hover{background:#404040;color:#fff;outline:0}html .uk-nav.uk-nav-offcanvas>li.uk-active>a{background:#1a1a1a;color:#fff;box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.uk-nav-offcanvas .uk-nav-header{color:#777;margin-top:0;border-top:1px solid rgba(0,0,0,.3);background:#404040;box-shadow:inset 0 1px 0 rgba(255,255,255,.05);text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-nav-offcanvas .uk-nav-divider{border-top:1px solid rgba(255,255,255,.01);margin:0;height:4px;background:rgba(0,0,0,.2);box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.uk-nav-offcanvas ul a{color:#ccc}html:not(.uk-touch) .uk-nav-offcanvas ul a:hover{color:#fff}.uk-nav-offcanvas{border-bottom:1px solid rgba(0,0,0,.3);box-shadow:0 1px 0 rgba(255,255,255,.05)}.uk-nav-offcanvas .uk-nav-sub{border-top:1px solid rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}.uk-navbar{background:#f5f5f5;color:#444;border:1px solid rgba(0,0,0,.06);border-radius:4px}.uk-navbar:after,.uk-navbar:before{content:"";display:table}.uk-navbar:after{clear:both}.uk-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-navbar-nav>li{float:left;position:relative}.uk-navbar-nav>li>a{display:block;box-sizing:border-box;text-decoration:none;height:41px;padding:0 15px;line-height:40px;color:#444;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;margin-top:-1px;margin-left:-1px;border:1px solid transparent;border-bottom-width:0;text-shadow:0 1px 0 #fff}.uk-navbar-nav>li>a[href='#']{cursor:text}.uk-navbar-nav>li.uk-open>a,.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus{background-color:#fafafa;color:#444;outline:0;position:relative;z-index:1;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1)}.uk-navbar-nav>li>a:active{background-color:#eee;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2)}.uk-navbar-nav>li.uk-active>a{background-color:#fafafa;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1)}.uk-navbar-nav .uk-navbar-nav-subtitle{line-height:28px}.uk-navbar-nav-subtitle>div{margin-top:-6px;font-size:10px;line-height:12px}.uk-navbar-brand,.uk-navbar-content,.uk-navbar-toggle{box-sizing:border-box;display:block;height:41px;padding:0 15px;float:left;margin-top:-1px;text-shadow:0 1px 0 #fff}.uk-navbar-brand:before,.uk-navbar-content:before,.uk-navbar-toggle:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-navbar-content+.uk-navbar-content:not(.uk-navbar-center){padding-left:0}.uk-navbar-content>a:not([class]){color:#07D}.uk-navbar-content>a:not([class]):hover{color:#059}.uk-navbar-brand{font-size:18px;color:#444;text-decoration:none}.uk-navbar-brand:focus,.uk-navbar-brand:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle{font-size:18px;color:#444;text-decoration:none}.uk-navbar-toggle:focus,.uk-navbar-toggle:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle:after{content:"\f0c9";font-family:FontAwesome;vertical-align:middle}.uk-navbar-toggle-alt:after{content:"\f002"}.uk-navbar-center{float:none;text-align:center;max-width:50%;margin-left:auto;margin-right:auto}.uk-navbar-flip{float:right}.uk-navbar-nav:first-child>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.uk-navbar-flip .uk-navbar-nav>li>a{margin-left:0;margin-right:-1px}.uk-navbar-flip .uk-navbar-nav:first-child>li:first-child>a{border-top-left-radius:0;border-bottom-left-radius:0}.uk-navbar-flip .uk-navbar-nav:last-child>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.uk-navbar-attached{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;border-radius:0}.uk-navbar-attached .uk-navbar-nav>li>a{border-radius:0!important}.uk-subnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-subnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px;position:relative}.uk-subnav:after,.uk-subnav:before{content:"";display:block;overflow:hidden}.uk-subnav:after{clear:both}.uk-subnav>*{float:left}.uk-subnav>*>*{display:inline-block;color:#444}.uk-subnav>*>:focus,.uk-subnav>*>:hover{color:#07D;text-decoration:none}.uk-subnav>.uk-active>*{color:#07D}.uk-subnav-line>:before{content:"";display:inline-block;height:10px;vertical-align:middle}.uk-subnav-line>:nth-child(n+2):before{margin-right:10px;border-left:1px solid #ddd}.uk-subnav-pill>*>*{padding:3px 9px;border-radius:4px}.uk-subnav-pill>*>:focus,.uk-subnav-pill>*>:hover{background:#fafafa;color:#444;text-decoration:none;outline:0;box-shadow:0 0 0 1px rgba(0,0,0,.15)}.uk-subnav-pill>.uk-active>*{background:#00a8e6;color:#fff;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.uk-subnav>.uk-disabled>*{background:0 0;color:#999;text-decoration:none;cursor:text;box-shadow:none}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>li{font-size:1rem;vertical-align:top}.uk-breadcrumb>li,.uk-breadcrumb>li>a,.uk-breadcrumb>li>span{display:inline-block}.uk-breadcrumb>li:nth-child(n+2):before{content:"/";display:inline-block;margin:0 8px}.uk-breadcrumb>li:not(.uk-active)>span{color:#999}.uk-pagination{padding:0;list-style:none;text-align:center;font-size:0}.uk-pagination:after,.uk-pagination:before{content:"";display:table}.uk-pagination:after{clear:both}.uk-pagination>li{display:inline-block;font-size:1rem;vertical-align:top}.uk-pagination>li:nth-child(n+2){margin-left:5px}.uk-pagination>li>a,.uk-pagination>li>span{display:inline-block;min-width:16px;padding:3px 5px;line-height:20px;text-decoration:none;box-sizing:content-box;text-align:center;border:1px solid rgba(0,0,0,.06);border-radius:4px}.uk-pagination>li>a{background:#f5f5f5;color:#444;text-shadow:0 1px 0 #fff}.uk-pagination>li>a:focus,.uk-pagination>li>a:hover{background-color:#fafafa;color:#444;outline:0;border-color:rgba(0,0,0,.16)}.uk-pagination>li>a:active{background-color:#eee;color:#444}.uk-pagination>.uk-active>span{background:#00a8e6;color:#fff;border-color:transparent;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-pagination>.uk-disabled>span{background-color:#fafafa;color:#999;border:1px solid rgba(0,0,0,.06);text-shadow:0 1px 0 #fff}.uk-pagination-previous{float:left}.uk-pagination-next{float:right}.uk-pagination-left{text-align:left}.uk-pagination-right{text-align:right}.uk-tab{margin:0;padding:0;list-style:none;border-bottom:1px solid #ddd}.uk-tab:after,.uk-tab:before{content:"";display:table}.uk-tab:after{clear:both}.uk-tab>li{margin-bottom:-1px;float:left;position:relative}.uk-tab>li>a{display:block;padding:8px 12px 8px 12px;border:1px solid transparent;border-bottom-width:0;color:#07D;text-decoration:none;border-radius:4px 4px 0 0;text-shadow:0 1px 0 #fff}.uk-tab>li:nth-child(n+2)>a{margin-left:5px}.uk-tab>li.uk-open>a,.uk-tab>li>a:focus,.uk-tab>li>a:hover{border-color:rgba(0,0,0,.06);background:#f5f5f5;color:#059;outline:0}.uk-tab>li.uk-open:not(.uk-active)>a,.uk-tab>li:not(.uk-active)>a:focus,.uk-tab>li:not(.uk-active)>a:hover{margin-bottom:1px;padding-bottom:7px}.uk-tab>li.uk-active>a{border-color:#ddd;border-bottom-color:transparent;background:#fff;color:#444}.uk-tab>li.uk-disabled>a{color:#999;cursor:text}.uk-tab>li.uk-disabled.uk-active>a,.uk-tab>li.uk-disabled>a:focus,.uk-tab>li.uk-disabled>a:hover{background:0 0;border-color:transparent}.uk-tab-flip>li{float:right}.uk-tab-flip>li:nth-child(n+2)>a{margin-left:0;margin-right:5px}.uk-tab>li.uk-tab-responsive>a{margin-left:0;margin-right:0}.uk-tab-responsive>a:before{content:"\f0c9\00a0";font-family:FontAwesome}.uk-tab-center{border-bottom:1px solid #ddd}.uk-tab-center-bottom{border-bottom:none;border-top:1px solid #ddd}.uk-tab-center:after,.uk-tab-center:before{content:"";display:table}.uk-tab-center:after{clear:both}.uk-tab-center .uk-tab{position:relative;right:50%;border:none;float:right}.uk-tab-center .uk-tab>li{position:relative;right:-50%}.uk-tab-center .uk-tab>li>a{text-align:center}.uk-tab-bottom{border-top:1px solid #ddd;border-bottom:none}.uk-tab-bottom>li{margin-top:-1px;margin-bottom:0}.uk-tab-bottom>li>a{padding-top:8px;padding-bottom:8px;border-bottom-width:1px;border-top-width:0}.uk-tab-bottom>li.uk-open:not(.uk-active)>a,.uk-tab-bottom>li:not(.uk-active)>a:focus,.uk-tab-bottom>li:not(.uk-active)>a:hover{margin-bottom:0;margin-top:1px;padding-bottom:8px;padding-top:7px}.uk-tab-bottom>li.uk-active>a{border-top-color:transparent;border-bottom-color:#ddd}.uk-tab-grid{margin-left:-5px;border-bottom:none;position:relative;z-index:0}.uk-tab-grid:before{display:block;position:absolute;left:5px;right:0;bottom:-1px;border-top:1px solid #ddd;z-index:-1}.uk-tab-grid>li:first-child>a{margin-left:5px}.uk-tab-grid>li>a{text-align:center}.uk-tab-grid.uk-tab-bottom{border-top:none}.uk-tab-grid.uk-tab-bottom:before{top:-1px;bottom:auto}@media (min-width:768px){.uk-tab-left,.uk-tab-right{border-bottom:none}.uk-tab-left>li,.uk-tab-right>li{margin-bottom:0;float:none}.uk-tab-left>li>a,.uk-tab-right>li>a{padding-top:8px;padding-bottom:8px}.uk-tab-left>li:nth-child(n+2)>a,.uk-tab-right>li:nth-child(n+2)>a{margin-left:0;margin-top:5px}.uk-tab-left>li.uk-active>a,.uk-tab-right>li.uk-active>a{border-color:#ddd}.uk-tab-left{border-right:1px solid #ddd}.uk-tab-left>li{margin-right:-1px}.uk-tab-left>li>a{border-bottom-width:1px;border-right-width:0}.uk-tab-left>li:not(.uk-active)>a:focus,.uk-tab-left>li:not(.uk-active)>a:hover{margin-bottom:0;margin-right:1px;padding-bottom:8px;padding-right:11px}.uk-tab-left>li.uk-active>a{border-right-color:transparent}.uk-tab-right{border-left:1px solid #ddd}.uk-tab-right>li{margin-left:-1px}.uk-tab-right>li>a{border-bottom-width:1px;border-left-width:0}.uk-tab-right>li:not(.uk-active)>a:focus,.uk-tab-right>li:not(.uk-active)>a:hover{margin-bottom:0;margin-left:1px;padding-bottom:8px;padding-left:11px}.uk-tab-right>li.uk-active>a{border-left-color:transparent}}.uk-tab-bottom>li>a{border-radius:0 0 4px 4px}@media (min-width:768px){.uk-tab-left>li>a{border-radius:4px 0 0 4px}.uk-tab-right>li>a{border-radius:0 4px 4px 0}}.uk-thumbnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-thumbnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px}.uk-thumbnav:after,.uk-thumbnav:before{content:"";display:block;overflow:hidden}.uk-thumbnav:after{clear:both}.uk-thumbnav>*{float:left}.uk-thumbnav>*>*{display:block;background:#fff}.uk-thumbnav>*>*>img{opacity:.7;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.uk-thumbnav>*>:focus>img,.uk-thumbnav>*>:hover>img{opacity:1}.uk-thumbnav>.uk-active>*>img{opacity:1}.uk-list{padding:0;list-style:none}.uk-list>li:after,.uk-list>li:before{content:"";display:table}.uk-list>li:after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:20px;list-style:none}.uk-list-line>li:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-list-striped>li{padding:5px 5px;border-bottom:1px solid #ddd}.uk-list-striped>li:nth-of-type(odd){background:#fafafa}.uk-list-space>li:nth-child(n+2){margin-top:10px}.uk-list-striped>li:first-child{border-top:1px solid #ddd}@media (min-width:768px){.uk-description-list-horizontal{overflow:hidden}.uk-description-list-horizontal>dt{width:160px;float:left;clear:both;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-description-list-horizontal>dd{margin-left:180px}}.uk-description-list-line>dt{font-weight:400}.uk-description-list-line>dt:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-description-list-line>dd{color:#999}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:15px}*+.uk-table{margin-top:15px}.uk-table td,.uk-table th{padding:8px 8px;border-bottom:1px solid #ddd}.uk-table th{text-align:left}.uk-table td{vertical-align:top}.uk-table thead th{vertical-align:bottom}.uk-table caption,.uk-table tfoot{font-size:12px;font-style:italic}.uk-table caption{text-align:left;color:#999}.uk-table tbody tr.uk-active{background:#f0f0f0}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-striped tbody tr:nth-of-type(odd){background:#fafafa}.uk-table-condensed td{padding:4px 8px}.uk-table-hover tbody tr:hover{background:#f0f0f0}.uk-form input,.uk-form select,.uk-form textarea{box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:inherit}.uk-form select{text-transform:none}.uk-form optgroup{font:inherit;font-weight:700}.uk-form input::-moz-focus-inner{border:0;padding:0}.uk-form input[type=checkbox],.uk-form input[type=radio]{padding:0}.uk-form input[type=checkbox]:not(:disabled),.uk-form input[type=radio]:not(:disabled){cursor:pointer}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form textarea{-webkit-appearance:none}.uk-form input[type=search]::-webkit-search-cancel-button,.uk-form input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-form input[type=number]::-webkit-inner-spin-button,.uk-form input[type=number]::-webkit-outer-spin-button{height:auto}.uk-form fieldset{border:none;margin:0;padding:0}.uk-form textarea{overflow:auto;vertical-align:top}.uk-form ::-moz-placeholder{opacity:1}.uk-form :invalid{box-shadow:none}.uk-form input:not([type=radio]):not([type=checkbox]),.uk-form select{vertical-align:middle}.uk-form>:last-child{margin-bottom:0}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form input[type=datetime-local],.uk-form input[type=date],.uk-form input[type=month],.uk-form input[type=time],.uk-form input[type=week],.uk-form input[type=color],.uk-form select,.uk-form textarea{height:30px;max-width:100%;padding:4px 6px;border:1px solid #ddd;background:#fff;color:#444;-webkit-transition:all .2s linear;-webkit-transition-property:border,background,color,box-shadow,padding;transition:all .2s linear;transition-property:border,background,color,box-shadow,padding;border-radius:4px}.uk-form input:not([type]):focus,.uk-form input[type=text]:focus,.uk-form input[type=password]:focus,.uk-form input[type=email]:focus,.uk-form input[type=url]:focus,.uk-form input[type=search]:focus,.uk-form input[type=tel]:focus,.uk-form input[type=number]:focus,.uk-form input[type=datetime]:focus,.uk-form input[type=datetime-local]:focus,.uk-form input[type=date]:focus,.uk-form input[type=month]:focus,.uk-form input[type=time]:focus,.uk-form input[type=week]:focus,.uk-form input[type=color]:focus,.uk-form select:focus,.uk-form textarea:focus{border-color:#99baca;outline:0;background:#f5fbfe;color:#444}.uk-form input:not([type]):disabled,.uk-form input[type=text]:disabled,.uk-form input[type=password]:disabled,.uk-form input[type=email]:disabled,.uk-form input[type=url]:disabled,.uk-form input[type=search]:disabled,.uk-form input[type=tel]:disabled,.uk-form input[type=number]:disabled,.uk-form input[type=datetime]:disabled,.uk-form input[type=datetime-local]:disabled,.uk-form input[type=date]:disabled,.uk-form input[type=month]:disabled,.uk-form input[type=time]:disabled,.uk-form input[type=week]:disabled,.uk-form input[type=color]:disabled,.uk-form select:disabled,.uk-form textarea:disabled{border-color:#ddd;background-color:#fafafa;color:#999}.uk-form :-ms-input-placeholder{color:#999!important}.uk-form ::-moz-placeholder{color:#999}.uk-form ::-webkit-input-placeholder{color:#999}.uk-form :disabled:-ms-input-placeholder{color:#999!important}.uk-form :disabled::-moz-placeholder{color:#999}.uk-form :disabled::-webkit-input-placeholder{color:#999}.uk-form legend{width:100%;border:0;padding:0;padding-bottom:15px;font-size:18px;line-height:30px}.uk-form legend:after{content:"";display:block;border-bottom:1px solid #ddd;width:100%}input:not([type]).uk-form-small,input[type].uk-form-small,select.uk-form-small,textarea.uk-form-small{height:25px;padding:3px 3px;font-size:12px}input:not([type]).uk-form-large,input[type].uk-form-large,select.uk-form-large,textarea.uk-form-large{height:40px;padding:8px 6px;font-size:16px}.uk-form select[multiple],.uk-form select[size],.uk-form textarea{height:auto}.uk-form-danger{border-color:#dc8d99!important;background:#fff7f8!important;color:#d85030!important}.uk-form-success{border-color:#8ec73b!important;background:#fafff2!important;color:#659f13!important}.uk-form-blank{border-color:transparent!important;border-style:dashed!important;background:0 0!important}.uk-form-blank:focus{border-color:#ddd!important}input.uk-form-width-mini{width:40px}select.uk-form-width-mini{width:65px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-form-row:after,.uk-form-row:before{content:"";display:table}.uk-form-row:after{clear:both}.uk-form-row+.uk-form-row{margin-top:15px}.uk-form-help-inline{display:inline-block;margin:0 0 0 10px}.uk-form-help-block{margin:5px 0 0 0}.uk-form-controls>:first-child{margin-top:0}.uk-form-controls>:last-child{margin-bottom:0}.uk-form-controls-condensed{margin:5px 0}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px;font-weight:700}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px;font-weight:700}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:5px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:5px}}.uk-form-icon{display:inline-block;position:relative;max-width:100%}.uk-form-icon>[class*=uk-icon-]{position:absolute;top:50%;width:30px;margin-top:-7px;font-size:14px;color:#999;text-align:center;pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)>input{padding-left:30px!important}.uk-form-icon-flip>[class*=uk-icon-]{right:0}.uk-form-icon-flip>input{padding-right:30px!important}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:#444;text-transform:none;display:inline-block;box-sizing:border-box;padding:0 12px;background:#f5f5f5;vertical-align:middle;line-height:28px;min-height:30px;font-size:1rem;text-decoration:none;text-align:center;border:1px solid rgba(0,0,0,.06);border-radius:4px;text-shadow:0 1px 0 #fff}.uk-button:not(:disabled){cursor:pointer}.uk-button:focus,.uk-button:hover{background-color:#fafafa;color:#444;outline:0;text-decoration:none;border-color:rgba(0,0,0,.16)}.uk-button.uk-active,.uk-button:active{background-color:#eee;color:#444}.uk-button-primary{background-color:#00a8e6;color:#fff}.uk-button-primary:focus,.uk-button-primary:hover{background-color:#35b3ee;color:#fff}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#0091ca;color:#fff}.uk-button-success{background-color:#8cc14c;color:#fff}.uk-button-success:focus,.uk-button-success:hover{background-color:#8ec73b;color:#fff}.uk-button-success.uk-active,.uk-button-success:active{background-color:#72ae41;color:#fff}.uk-button-danger{background-color:#da314b;color:#fff}.uk-button-danger:focus,.uk-button-danger:hover{background-color:#e4354f;color:#fff}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#c91032;color:#fff}.uk-button:disabled{background-color:#fafafa;color:#999;border-color:rgba(0,0,0,.06);box-shadow:none;text-shadow:0 1px 0 #fff}.uk-button-link,.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:disabled,.uk-button-link:focus,.uk-button-link:hover{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none}.uk-button-link{color:#07D}.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:focus,.uk-button-link:hover{color:#059;text-decoration:underline}.uk-button-link:disabled{color:#999}.uk-button-link:focus{outline:1px dotted}.uk-button-mini{min-height:20px;padding:0 6px;line-height:18px;font-size:11px}.uk-button-small{min-height:25px;padding:0 10px;line-height:23px;font-size:12px}.uk-button-large{min-height:40px;padding:0 15px;line-height:38px;font-size:16px;border-radius:5px}.uk-button-group{display:inline-block;vertical-align:middle;position:relative;font-size:0;white-space:nowrap}.uk-button-group>*{display:inline-block}.uk-button-group .uk-button{vertical-align:top}.uk-button-dropdown{display:inline-block;vertical-align:middle;position:relative}.uk-button-danger,.uk-button-primary,.uk-button-success{box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-button-danger:focus,.uk-button-danger:hover,.uk-button-primary:focus,.uk-button-primary:hover,.uk-button-success:focus,.uk-button-success:hover{border-color:rgba(0,0,0,.21)}.uk-button-group>.uk-button:not(:first-child):not(:last-child),.uk-button-group>div:not(:first-child):not(:last-child) .uk-button{border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-radius:0}.uk-button-group>.uk-button:first-child,.uk-button-group>div:first-child .uk-button{border-right-color:rgba(0,0,0,.1);border-top-right-radius:0;border-bottom-right-radius:0}.uk-button-group>.uk-button:last-child,.uk-button-group>div:last-child .uk-button{border-left-color:rgba(0,0,0,.1);border-top-left-radius:0;border-bottom-left-radius:0}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button.uk-active,.uk-button-group .uk-button:active,.uk-button-group .uk-button:hover{position:relative}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.woff2) format('woff2'),url(../fonts/fontawesome-webfont.woff) format("woff"),url(../fonts/fontawesome-webfont.ttf) format("truetype");font-weight:400;font-style:normal}[class*=uk-icon-]{font-family:FontAwesome;display:inline-block;font-weight:400;font-style:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=uk-icon-],[class*=uk-icon-]:focus,[class*=uk-icon-]:hover{text-decoration:none}.uk-icon-small{font-size:150%;vertical-align:-10%}.uk-icon-medium{font-size:200%;vertical-align:-16%}.uk-icon-large{font-size:250%;vertical-align:-22%}.uk-icon-justify{width:1em;text-align:center}.uk-icon-spin{display:inline-block;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-icon-hover{color:#999}.uk-icon-hover:hover{color:#444}.uk-icon-button{box-sizing:border-box;display:inline-block;width:35px;height:35px;border-radius:100%;background:#f5f5f5;line-height:35px;color:#444;font-size:18px;text-align:center;border:1px solid #e7e7e7;text-shadow:0 1px 0 #fff}.uk-icon-button:focus,.uk-icon-button:hover{background-color:#fafafa;color:#444;outline:0;border-color:#d3d3d3}.uk-icon-button:active{background-color:#eee;color:#444}.uk-icon-glass:before{content:"\f000"}.uk-icon-music:before{content:"\f001"}.uk-icon-search:before{content:"\f002"}.uk-icon-envelope-o:before{content:"\f003"}.uk-icon-heart:before{content:"\f004"}.uk-icon-star:before{content:"\f005"}.uk-icon-star-o:before{content:"\f006"}.uk-icon-user:before{content:"\f007"}.uk-icon-film:before{content:"\f008"}.uk-icon-th-large:before{content:"\f009"}.uk-icon-th:before{content:"\f00a"}.uk-icon-th-list:before{content:"\f00b"}.uk-icon-check:before{content:"\f00c"}.uk-icon-close:before,.uk-icon-remove:before,.uk-icon-times:before{content:"\f00d"}.uk-icon-search-plus:before{content:"\f00e"}.uk-icon-search-minus:before{content:"\f010"}.uk-icon-power-off:before{content:"\f011"}.uk-icon-signal:before{content:"\f012"}.uk-icon-cog:before,.uk-icon-gear:before{content:"\f013"}.uk-icon-trash-o:before{content:"\f014"}.uk-icon-home:before{content:"\f015"}.uk-icon-file-o:before{content:"\f016"}.uk-icon-clock-o:before{content:"\f017"}.uk-icon-road:before{content:"\f018"}.uk-icon-download:before{content:"\f019"}.uk-icon-arrow-circle-o-down:before{content:"\f01a"}.uk-icon-arrow-circle-o-up:before{content:"\f01b"}.uk-icon-inbox:before{content:"\f01c"}.uk-icon-play-circle-o:before{content:"\f01d"}.uk-icon-repeat:before,.uk-icon-rotate-right:before{content:"\f01e"}.uk-icon-refresh:before{content:"\f021"}.uk-icon-list-alt:before{content:"\f022"}.uk-icon-lock:before{content:"\f023"}.uk-icon-flag:before{content:"\f024"}.uk-icon-headphones:before{content:"\f025"}.uk-icon-volume-off:before{content:"\f026"}.uk-icon-volume-down:before{content:"\f027"}.uk-icon-volume-up:before{content:"\f028"}.uk-icon-qrcode:before{content:"\f029"}.uk-icon-barcode:before{content:"\f02a"}.uk-icon-tag:before{content:"\f02b"}.uk-icon-tags:before{content:"\f02c"}.uk-icon-book:before{content:"\f02d"}.uk-icon-bookmark:before{content:"\f02e"}.uk-icon-print:before{content:"\f02f"}.uk-icon-camera:before{content:"\f030"}.uk-icon-font:before{content:"\f031"}.uk-icon-bold:before{content:"\f032"}.uk-icon-italic:before{content:"\f033"}.uk-icon-text-height:before{content:"\f034"}.uk-icon-text-width:before{content:"\f035"}.uk-icon-align-left:before{content:"\f036"}.uk-icon-align-center:before{content:"\f037"}.uk-icon-align-right:before{content:"\f038"}.uk-icon-align-justify:before{content:"\f039"}.uk-icon-list:before{content:"\f03a"}.uk-icon-dedent:before,.uk-icon-outdent:before{content:"\f03b"}.uk-icon-indent:before{content:"\f03c"}.uk-icon-video-camera:before{content:"\f03d"}.uk-icon-image:before,.uk-icon-photo:before,.uk-icon-picture-o:before{content:"\f03e"}.uk-icon-pencil:before{content:"\f040"}.uk-icon-map-marker:before{content:"\f041"}.uk-icon-adjust:before{content:"\f042"}.uk-icon-tint:before{content:"\f043"}.uk-icon-edit:before,.uk-icon-pencil-square-o:before{content:"\f044"}.uk-icon-share-square-o:before{content:"\f045"}.uk-icon-check-square-o:before{content:"\f046"}.uk-icon-arrows:before{content:"\f047"}.uk-icon-step-backward:before{content:"\f048"}.uk-icon-fast-backward:before{content:"\f049"}.uk-icon-backward:before{content:"\f04a"}.uk-icon-play:before{content:"\f04b"}.uk-icon-pause:before{content:"\f04c"}.uk-icon-stop:before{content:"\f04d"}.uk-icon-forward:before{content:"\f04e"}.uk-icon-fast-forward:before{content:"\f050"}.uk-icon-step-forward:before{content:"\f051"}.uk-icon-eject:before{content:"\f052"}.uk-icon-chevron-left:before{content:"\f053"}.uk-icon-chevron-right:before{content:"\f054"}.uk-icon-plus-circle:before{content:"\f055"}.uk-icon-minus-circle:before{content:"\f056"}.uk-icon-times-circle:before{content:"\f057"}.uk-icon-check-circle:before{content:"\f058"}.uk-icon-question-circle:before{content:"\f059"}.uk-icon-info-circle:before{content:"\f05a"}.uk-icon-crosshairs:before{content:"\f05b"}.uk-icon-times-circle-o:before{content:"\f05c"}.uk-icon-check-circle-o:before{content:"\f05d"}.uk-icon-ban:before{content:"\f05e"}.uk-icon-arrow-left:before{content:"\f060"}.uk-icon-arrow-right:before{content:"\f061"}.uk-icon-arrow-up:before{content:"\f062"}.uk-icon-arrow-down:before{content:"\f063"}.uk-icon-mail-forward:before,.uk-icon-share:before{content:"\f064"}.uk-icon-expand:before{content:"\f065"}.uk-icon-compress:before{content:"\f066"}.uk-icon-plus:before{content:"\f067"}.uk-icon-minus:before{content:"\f068"}.uk-icon-asterisk:before{content:"\f069"}.uk-icon-exclamation-circle:before{content:"\f06a"}.uk-icon-gift:before{content:"\f06b"}.uk-icon-leaf:before{content:"\f06c"}.uk-icon-fire:before{content:"\f06d"}.uk-icon-eye:before{content:"\f06e"}.uk-icon-eye-slash:before{content:"\f070"}.uk-icon-exclamation-triangle:before,.uk-icon-warning:before{content:"\f071"}.uk-icon-plane:before{content:"\f072"}.uk-icon-calendar:before{content:"\f073"}.uk-icon-random:before{content:"\f074"}.uk-icon-comment:before{content:"\f075"}.uk-icon-magnet:before{content:"\f076"}.uk-icon-chevron-up:before{content:"\f077"}.uk-icon-chevron-down:before{content:"\f078"}.uk-icon-retweet:before{content:"\f079"}.uk-icon-shopping-cart:before{content:"\f07a"}.uk-icon-folder:before{content:"\f07b"}.uk-icon-folder-open:before{content:"\f07c"}.uk-icon-arrows-v:before{content:"\f07d"}.uk-icon-arrows-h:before{content:"\f07e"}.uk-icon-bar-chart-o:before,.uk-icon-bar-chart:before{content:"\f080"}.uk-icon-twitter-square:before{content:"\f081"}.uk-icon-facebook-square:before{content:"\f082"}.uk-icon-camera-retro:before{content:"\f083"}.uk-icon-key:before{content:"\f084"}.uk-icon-cogs:before,.uk-icon-gears:before{content:"\f085"}.uk-icon-comments:before{content:"\f086"}.uk-icon-thumbs-o-up:before{content:"\f087"}.uk-icon-thumbs-o-down:before{content:"\f088"}.uk-icon-star-half:before{content:"\f089"}.uk-icon-heart-o:before{content:"\f08a"}.uk-icon-sign-out:before{content:"\f08b"}.uk-icon-linkedin-square:before{content:"\f08c"}.uk-icon-thumb-tack:before{content:"\f08d"}.uk-icon-external-link:before{content:"\f08e"}.uk-icon-sign-in:before{content:"\f090"}.uk-icon-trophy:before{content:"\f091"}.uk-icon-github-square:before{content:"\f092"}.uk-icon-upload:before{content:"\f093"}.uk-icon-lemon-o:before{content:"\f094"}.uk-icon-phone:before{content:"\f095"}.uk-icon-square-o:before{content:"\f096"}.uk-icon-bookmark-o:before{content:"\f097"}.uk-icon-phone-square:before{content:"\f098"}.uk-icon-twitter:before{content:"\f099"}.uk-icon-facebook-f:before,.uk-icon-facebook:before{content:"\f09a"}.uk-icon-github:before{content:"\f09b"}.uk-icon-unlock:before{content:"\f09c"}.uk-icon-credit-card:before{content:"\f09d"}.uk-icon-rss:before{content:"\f09e"}.uk-icon-hdd-o:before{content:"\f0a0"}.uk-icon-bullhorn:before{content:"\f0a1"}.uk-icon-bell:before{content:"\f0f3"}.uk-icon-certificate:before{content:"\f0a3"}.uk-icon-hand-o-right:before{content:"\f0a4"}.uk-icon-hand-o-left:before{content:"\f0a5"}.uk-icon-hand-o-up:before{content:"\f0a6"}.uk-icon-hand-o-down:before{content:"\f0a7"}.uk-icon-arrow-circle-left:before{content:"\f0a8"}.uk-icon-arrow-circle-right:before{content:"\f0a9"}.uk-icon-arrow-circle-up:before{content:"\f0aa"}.uk-icon-arrow-circle-down:before{content:"\f0ab"}.uk-icon-globe:before{content:"\f0ac"}.uk-icon-wrench:before{content:"\f0ad"}.uk-icon-tasks:before{content:"\f0ae"}.uk-icon-filter:before{content:"\f0b0"}.uk-icon-briefcase:before{content:"\f0b1"}.uk-icon-arrows-alt:before{content:"\f0b2"}.uk-icon-group:before,.uk-icon-users:before{content:"\f0c0"}.uk-icon-chain:before,.uk-icon-link:before{content:"\f0c1"}.uk-icon-cloud:before{content:"\f0c2"}.uk-icon-flask:before{content:"\f0c3"}.uk-icon-cut:before,.uk-icon-scissors:before{content:"\f0c4"}.uk-icon-copy:before,.uk-icon-files-o:before{content:"\f0c5"}.uk-icon-paperclip:before{content:"\f0c6"}.uk-icon-floppy-o:before,.uk-icon-save:before{content:"\f0c7"}.uk-icon-square:before{content:"\f0c8"}.uk-icon-bars:before,.uk-icon-navicon:before,.uk-icon-reorder:before{content:"\f0c9"}.uk-icon-list-ul:before{content:"\f0ca"}.uk-icon-list-ol:before{content:"\f0cb"}.uk-icon-strikethrough:before{content:"\f0cc"}.uk-icon-underline:before{content:"\f0cd"}.uk-icon-table:before{content:"\f0ce"}.uk-icon-magic:before{content:"\f0d0"}.uk-icon-truck:before{content:"\f0d1"}.uk-icon-pinterest:before{content:"\f0d2"}.uk-icon-pinterest-square:before{content:"\f0d3"}.uk-icon-google-plus-square:before{content:"\f0d4"}.uk-icon-google-plus:before{content:"\f0d5"}.uk-icon-money:before{content:"\f0d6"}.uk-icon-caret-down:before{content:"\f0d7"}.uk-icon-caret-up:before{content:"\f0d8"}.uk-icon-caret-left:before{content:"\f0d9"}.uk-icon-caret-right:before{content:"\f0da"}.uk-icon-columns:before{content:"\f0db"}.uk-icon-sort:before,.uk-icon-unsorted:before{content:"\f0dc"}.uk-icon-sort-desc:before,.uk-icon-sort-down:before{content:"\f0dd"}.uk-icon-sort-asc:before,.uk-icon-sort-up:before{content:"\f0de"}.uk-icon-envelope:before{content:"\f0e0"}.uk-icon-linkedin:before{content:"\f0e1"}.uk-icon-rotate-left:before,.uk-icon-undo:before{content:"\f0e2"}.uk-icon-gavel:before,.uk-icon-legal:before{content:"\f0e3"}.uk-icon-dashboard:before,.uk-icon-tachometer:before{content:"\f0e4"}.uk-icon-comment-o:before{content:"\f0e5"}.uk-icon-comments-o:before{content:"\f0e6"}.uk-icon-bolt:before,.uk-icon-flash:before{content:"\f0e7"}.uk-icon-sitemap:before{content:"\f0e8"}.uk-icon-umbrella:before{content:"\f0e9"}.uk-icon-clipboard:before,.uk-icon-paste:before{content:"\f0ea"}.uk-icon-lightbulb-o:before{content:"\f0eb"}.uk-icon-exchange:before{content:"\f0ec"}.uk-icon-cloud-download:before{content:"\f0ed"}.uk-icon-cloud-upload:before{content:"\f0ee"}.uk-icon-user-md:before{content:"\f0f0"}.uk-icon-stethoscope:before{content:"\f0f1"}.uk-icon-suitcase:before{content:"\f0f2"}.uk-icon-bell-o:before{content:"\f0a2"}.uk-icon-coffee:before{content:"\f0f4"}.uk-icon-cutlery:before{content:"\f0f5"}.uk-icon-file-text-o:before{content:"\f0f6"}.uk-icon-building-o:before{content:"\f0f7"}.uk-icon-hospital-o:before{content:"\f0f8"}.uk-icon-ambulance:before{content:"\f0f9"}.uk-icon-medkit:before{content:"\f0fa"}.uk-icon-fighter-jet:before{content:"\f0fb"}.uk-icon-beer:before{content:"\f0fc"}.uk-icon-h-square:before{content:"\f0fd"}.uk-icon-plus-square:before{content:"\f0fe"}.uk-icon-angle-double-left:before{content:"\f100"}.uk-icon-angle-double-right:before{content:"\f101"}.uk-icon-angle-double-up:before{content:"\f102"}.uk-icon-angle-double-down:before{content:"\f103"}.uk-icon-angle-left:before{content:"\f104"}.uk-icon-angle-right:before{content:"\f105"}.uk-icon-angle-up:before{content:"\f106"}.uk-icon-angle-down:before{content:"\f107"}.uk-icon-desktop:before{content:"\f108"}.uk-icon-laptop:before{content:"\f109"}.uk-icon-tablet:before{content:"\f10a"}.uk-icon-mobile-phone:before,.uk-icon-mobile:before{content:"\f10b"}.uk-icon-circle-o:before{content:"\f10c"}.uk-icon-quote-left:before{content:"\f10d"}.uk-icon-quote-right:before{content:"\f10e"}.uk-icon-spinner:before{content:"\f110"}.uk-icon-circle:before{content:"\f111"}.uk-icon-mail-reply:before,.uk-icon-reply:before{content:"\f112"}.uk-icon-github-alt:before{content:"\f113"}.uk-icon-folder-o:before{content:"\f114"}.uk-icon-folder-open-o:before{content:"\f115"}.uk-icon-smile-o:before{content:"\f118"}.uk-icon-frown-o:before{content:"\f119"}.uk-icon-meh-o:before{content:"\f11a"}.uk-icon-gamepad:before{content:"\f11b"}.uk-icon-keyboard-o:before{content:"\f11c"}.uk-icon-flag-o:before{content:"\f11d"}.uk-icon-flag-checkered:before{content:"\f11e"}.uk-icon-terminal:before{content:"\f120"}.uk-icon-code:before{content:"\f121"}.uk-icon-mail-reply-all:before,.uk-icon-reply-all:before{content:"\f122"}.uk-icon-star-half-empty:before,.uk-icon-star-half-full:before,.uk-icon-star-half-o:before{content:"\f123"}.uk-icon-location-arrow:before{content:"\f124"}.uk-icon-crop:before{content:"\f125"}.uk-icon-code-fork:before{content:"\f126"}.uk-icon-chain-broken:before,.uk-icon-unlink:before{content:"\f127"}.uk-icon-question:before{content:"\f128"}.uk-icon-info:before{content:"\f129"}.uk-icon-exclamation:before{content:"\f12a"}.uk-icon-superscript:before{content:"\f12b"}.uk-icon-subscript:before{content:"\f12c"}.uk-icon-eraser:before{content:"\f12d"}.uk-icon-puzzle-piece:before{content:"\f12e"}.uk-icon-microphone:before{content:"\f130"}.uk-icon-microphone-slash:before{content:"\f131"}.uk-icon-shield:before{content:"\f132"}.uk-icon-calendar-o:before{content:"\f133"}.uk-icon-fire-extinguisher:before{content:"\f134"}.uk-icon-rocket:before{content:"\f135"}.uk-icon-maxcdn:before{content:"\f136"}.uk-icon-chevron-circle-left:before{content:"\f137"}.uk-icon-chevron-circle-right:before{content:"\f138"}.uk-icon-chevron-circle-up:before{content:"\f139"}.uk-icon-chevron-circle-down:before{content:"\f13a"}.uk-icon-html5:before{content:"\f13b"}.uk-icon-css3:before{content:"\f13c"}.uk-icon-anchor:before{content:"\f13d"}.uk-icon-unlock-alt:before{content:"\f13e"}.uk-icon-bullseye:before{content:"\f140"}.uk-icon-ellipsis-h:before{content:"\f141"}.uk-icon-ellipsis-v:before{content:"\f142"}.uk-icon-rss-square:before{content:"\f143"}.uk-icon-play-circle:before{content:"\f144"}.uk-icon-ticket:before{content:"\f145"}.uk-icon-minus-square:before{content:"\f146"}.uk-icon-minus-square-o:before{content:"\f147"}.uk-icon-level-up:before{content:"\f148"}.uk-icon-level-down:before{content:"\f149"}.uk-icon-check-square:before{content:"\f14a"}.uk-icon-pencil-square:before{content:"\f14b"}.uk-icon-external-link-square:before{content:"\f14c"}.uk-icon-share-square:before{content:"\f14d"}.uk-icon-compass:before{content:"\f14e"}.uk-icon-caret-square-o-down:before,.uk-icon-toggle-down:before{content:"\f150"}.uk-icon-caret-square-o-up:before,.uk-icon-toggle-up:before{content:"\f151"}.uk-icon-caret-square-o-right:before,.uk-icon-toggle-right:before{content:"\f152"}.uk-icon-eur:before,.uk-icon-euro:before{content:"\f153"}.uk-icon-gbp:before{content:"\f154"}.uk-icon-dollar:before,.uk-icon-usd:before{content:"\f155"}.uk-icon-inr:before,.uk-icon-rupee:before{content:"\f156"}.uk-icon-cny:before,.uk-icon-jpy:before,.uk-icon-rmb:before,.uk-icon-yen:before{content:"\f157"}.uk-icon-rouble:before,.uk-icon-rub:before,.uk-icon-ruble:before{content:"\f158"}.uk-icon-krw:before,.uk-icon-won:before{content:"\f159"}.uk-icon-bitcoin:before,.uk-icon-btc:before{content:"\f15a"}.uk-icon-file:before{content:"\f15b"}.uk-icon-file-text:before{content:"\f15c"}.uk-icon-sort-alpha-asc:before{content:"\f15d"}.uk-icon-sort-alpha-desc:before{content:"\f15e"}.uk-icon-sort-amount-asc:before{content:"\f160"}.uk-icon-sort-amount-desc:before{content:"\f161"}.uk-icon-sort-numeric-asc:before{content:"\f162"}.uk-icon-sort-numeric-desc:before{content:"\f163"}.uk-icon-thumbs-up:before{content:"\f164"}.uk-icon-thumbs-down:before{content:"\f165"}.uk-icon-youtube-square:before{content:"\f166"}.uk-icon-youtube:before{content:"\f167"}.uk-icon-xing:before{content:"\f168"}.uk-icon-xing-square:before{content:"\f169"}.uk-icon-youtube-play:before{content:"\f16a"}.uk-icon-dropbox:before{content:"\f16b"}.uk-icon-stack-overflow:before{content:"\f16c"}.uk-icon-instagram:before{content:"\f16d"}.uk-icon-flickr:before{content:"\f16e"}.uk-icon-adn:before{content:"\f170"}.uk-icon-bitbucket:before{content:"\f171"}.uk-icon-bitbucket-square:before{content:"\f172"}.uk-icon-tumblr:before{content:"\f173"}.uk-icon-tumblr-square:before{content:"\f174"}.uk-icon-long-arrow-down:before{content:"\f175"}.uk-icon-long-arrow-up:before{content:"\f176"}.uk-icon-long-arrow-left:before{content:"\f177"}.uk-icon-long-arrow-right:before{content:"\f178"}.uk-icon-apple:before{content:"\f179"}.uk-icon-windows:before{content:"\f17a"}.uk-icon-android:before{content:"\f17b"}.uk-icon-linux:before{content:"\f17c"}.uk-icon-dribbble:before{content:"\f17d"}.uk-icon-skype:before{content:"\f17e"}.uk-icon-foursquare:before{content:"\f180"}.uk-icon-trello:before{content:"\f181"}.uk-icon-female:before{content:"\f182"}.uk-icon-male:before{content:"\f183"}.uk-icon-gittip:before,.uk-icon-gratipay:before{content:"\f184"}.uk-icon-sun-o:before{content:"\f185"}.uk-icon-moon-o:before{content:"\f186"}.uk-icon-archive:before{content:"\f187"}.uk-icon-bug:before{content:"\f188"}.uk-icon-vk:before{content:"\f189"}.uk-icon-weibo:before{content:"\f18a"}.uk-icon-renren:before{content:"\f18b"}.uk-icon-pagelines:before{content:"\f18c"}.uk-icon-stack-exchange:before{content:"\f18d"}.uk-icon-arrow-circle-o-right:before{content:"\f18e"}.uk-icon-arrow-circle-o-left:before{content:"\f190"}.uk-icon-caret-square-o-left:before,.uk-icon-toggle-left:before{content:"\f191"}.uk-icon-dot-circle-o:before{content:"\f192"}.uk-icon-wheelchair:before{content:"\f193"}.uk-icon-vimeo-square:before{content:"\f194"}.uk-icon-try:before,.uk-icon-turkish-lira:before{content:"\f195"}.uk-icon-plus-square-o:before{content:"\f196"}.uk-icon-space-shuttle:before{content:"\f197"}.uk-icon-slack:before{content:"\f198"}.uk-icon-envelope-square:before{content:"\f199"}.uk-icon-wordpress:before{content:"\f19a"}.uk-icon-openid:before{content:"\f19b"}.uk-icon-bank:before,.uk-icon-institution:before,.uk-icon-university:before{content:"\f19c"}.uk-icon-graduation-cap:before,.uk-icon-mortar-board:before{content:"\f19d"}.uk-icon-yahoo:before{content:"\f19e"}.uk-icon-google:before{content:"\f1a0"}.uk-icon-reddit:before{content:"\f1a1"}.uk-icon-reddit-square:before{content:"\f1a2"}.uk-icon-stumbleupon-circle:before{content:"\f1a3"}.uk-icon-stumbleupon:before{content:"\f1a4"}.uk-icon-delicious:before{content:"\f1a5"}.uk-icon-digg:before{content:"\f1a6"}.uk-icon-pied-piper:before{content:"\f1a7"}.uk-icon-pied-piper-alt:before{content:"\f1a8"}.uk-icon-drupal:before{content:"\f1a9"}.uk-icon-joomla:before{content:"\f1aa"}.uk-icon-language:before{content:"\f1ab"}.uk-icon-fax:before{content:"\f1ac"}.uk-icon-building:before{content:"\f1ad"}.uk-icon-child:before{content:"\f1ae"}.uk-icon-paw:before{content:"\f1b0"}.uk-icon-spoon:before{content:"\f1b1"}.uk-icon-cube:before{content:"\f1b2"}.uk-icon-cubes:before{content:"\f1b3"}.uk-icon-behance:before{content:"\f1b4"}.uk-icon-behance-square:before{content:"\f1b5"}.uk-icon-steam:before{content:"\f1b6"}.uk-icon-steam-square:before{content:"\f1b7"}.uk-icon-recycle:before{content:"\f1b8"}.uk-icon-automobile:before,.uk-icon-car:before{content:"\f1b9"}.uk-icon-cab:before,.uk-icon-taxi:before{content:"\f1ba"}.uk-icon-tree:before{content:"\f1bb"}.uk-icon-spotify:before{content:"\f1bc"}.uk-icon-deviantart:before{content:"\f1bd"}.uk-icon-soundcloud:before{content:"\f1be"}.uk-icon-database:before{content:"\f1c0"}.uk-icon-file-pdf-o:before{content:"\f1c1"}.uk-icon-file-word-o:before{content:"\f1c2"}.uk-icon-file-excel-o:before{content:"\f1c3"}.uk-icon-file-powerpoint-o:before{content:"\f1c4"}.uk-icon-file-image-o:before,.uk-icon-file-photo-o:before,.uk-icon-file-picture-o:before{content:"\f1c5"}.uk-icon-file-archive-o:before,.uk-icon-file-zip-o:before{content:"\f1c6"}.uk-icon-file-audio-o:before,.uk-icon-file-sound-o:before{content:"\f1c7"}.uk-icon-file-movie-o:before,.uk-icon-file-video-o:before{content:"\f1c8"}.uk-icon-file-code-o:before{content:"\f1c9"}.uk-icon-vine:before{content:"\f1ca"}.uk-icon-codepen:before{content:"\f1cb"}.uk-icon-jsfiddle:before{content:"\f1cc"}.uk-icon-life-bouy:before,.uk-icon-life-buoy:before,.uk-icon-life-ring:before,.uk-icon-life-saver:before,.uk-icon-support:before{content:"\f1cd"}.uk-icon-circle-o-notch:before{content:"\f1ce"}.uk-icon-ra:before,.uk-icon-rebel:before{content:"\f1d0"}.uk-icon-empire:before,.uk-icon-ge:before{content:"\f1d1"}.uk-icon-git-square:before{content:"\f1d2"}.uk-icon-git:before{content:"\f1d3"}.uk-icon-hacker-news:before{content:"\f1d4"}.uk-icon-tencent-weibo:before{content:"\f1d5"}.uk-icon-qq:before{content:"\f1d6"}.uk-icon-wechat:before,.uk-icon-weixin:before{content:"\f1d7"}.uk-icon-paper-plane:before,.uk-icon-send:before{content:"\f1d8"}.uk-icon-paper-plane-o:before,.uk-icon-send-o:before{content:"\f1d9"}.uk-icon-history:before{content:"\f1da"}.uk-icon-circle-thin:before,.uk-icon-genderless:before{content:"\f1db"}.uk-icon-header:before{content:"\f1dc"}.uk-icon-paragraph:before{content:"\f1dd"}.uk-icon-sliders:before{content:"\f1de"}.uk-icon-share-alt:before{content:"\f1e0"}.uk-icon-share-alt-square:before{content:"\f1e1"}.uk-icon-bomb:before{content:"\f1e2"}.uk-icon-futbol-o:before,.uk-icon-soccer-ball-o:before{content:"\f1e3"}.uk-icon-tty:before{content:"\f1e4"}.uk-icon-binoculars:before{content:"\f1e5"}.uk-icon-plug:before{content:"\f1e6"}.uk-icon-slideshare:before{content:"\f1e7"}.uk-icon-twitch:before{content:"\f1e8"}.uk-icon-yelp:before{content:"\f1e9"}.uk-icon-newspaper-o:before{content:"\f1ea"}.uk-icon-wifi:before{content:"\f1eb"}.uk-icon-calculator:before{content:"\f1ec"}.uk-icon-paypal:before{content:"\f1ed"}.uk-icon-google-wallet:before{content:"\f1ee"}.uk-icon-cc-visa:before{content:"\f1f0"}.uk-icon-cc-mastercard:before{content:"\f1f1"}.uk-icon-cc-discover:before{content:"\f1f2"}.uk-icon-cc-amex:before{content:"\f1f3"}.uk-icon-cc-paypal:before{content:"\f1f4"}.uk-icon-cc-stripe:before{content:"\f1f5"}.uk-icon-bell-slash:before{content:"\f1f6"}.uk-icon-bell-slash-o:before{content:"\f1f7"}.uk-icon-trash:before{content:"\f1f8"}.uk-icon-copyright:before{content:"\f1f9"}.uk-icon-at:before{content:"\f1fa"}.uk-icon-eyedropper:before{content:"\f1fb"}.uk-icon-paint-brush:before{content:"\f1fc"}.uk-icon-birthday-cake:before{content:"\f1fd"}.uk-icon-area-chart:before{content:"\f1fe"}.uk-icon-pie-chart:before{content:"\f200"}.uk-icon-line-chart:before{content:"\f201"}.uk-icon-lastfm:before{content:"\f202"}.uk-icon-lastfm-square:before{content:"\f203"}.uk-icon-toggle-off:before{content:"\f204"}.uk-icon-toggle-on:before{content:"\f205"}.uk-icon-bicycle:before{content:"\f206"}.uk-icon-bus:before{content:"\f207"}.uk-icon-ioxhost:before{content:"\f208"}.uk-icon-angellist:before{content:"\f209"}.uk-icon-cc:before{content:"\f20a"}.uk-icon-ils:before,.uk-icon-shekel:before,.uk-icon-sheqel:before{content:"\f20b"}.uk-icon-meanpath:before{content:"\f20c"}.uk-icon-buysellads:before{content:"\f20d"}.uk-icon-connectdevelop:before{content:"\f20e"}.uk-icon-dashcube:before{content:"\f210"}.uk-icon-forumbee:before{content:"\f211"}.uk-icon-leanpub:before{content:"\f212"}.uk-icon-sellsy:before{content:"\f213"}.uk-icon-shirtsinbulk:before{content:"\f214"}.uk-icon-simplybuilt:before{content:"\f215"}.uk-icon-skyatlas:before{content:"\f216"}.uk-icon-cart-plus:before{content:"\f217"}.uk-icon-cart-arrow-down:before{content:"\f218"}.uk-icon-diamond:before{content:"\f219"}.uk-icon-ship:before{content:"\f21a"}.uk-icon-user-secret:before{content:"\f21b"}.uk-icon-motorcycle:before{content:"\f21c"}.uk-icon-street-view:before{content:"\f21d"}.uk-icon-heartbeat:before{content:"\f21e"}.uk-icon-venus:before{content:"\f221"}.uk-icon-mars:before{content:"\f222"}.uk-icon-mercury:before{content:"\f223"}.uk-icon-transgender:before{content:"\f224"}.uk-icon-transgender-alt:before{content:"\f225"}.uk-icon-venus-double:before{content:"\f226"}.uk-icon-mars-double:before{content:"\f227"}.uk-icon-venus-mars:before{content:"\f228"}.uk-icon-mars-stroke:before{content:"\f229"}.uk-icon-mars-stroke-v:before{content:"\f22a"}.uk-icon-mars-stroke-h:before{content:"\f22b"}.uk-icon-neuter:before{content:"\f22c"}.uk-icon-facebook-official:before{content:"\f230"}.uk-icon-pinterest-p:before{content:"\f231"}.uk-icon-whatsapp:before{content:"\f232"}.uk-icon-server:before{content:"\f233"}.uk-icon-user-plus:before{content:"\f234"}.uk-icon-user-times:before{content:"\f235"}.uk-icon-bed:before,.uk-icon-hotel:before{content:"\f236"}.uk-icon-viacoin:before{content:"\f237"}.uk-icon-train:before{content:"\f238"}.uk-icon-subway:before{content:"\f239"}.uk-icon-medium-logo:before{content:"\f23a"}.uk-icon-500px:before{content:"\f26e"}.uk-icon-amazon:before{content:"\f270"}.uk-icon-balance-scale:before{content:"\f24e"}.uk-icon-battery-0:before,.uk-icon-battery-empty:before{content:"\f244"}.uk-icon-battery-1:before,.uk-icon-battery-quarter:before{content:"\f243"}.uk-icon-battery-2:before,.uk-icon-battery-half:before{content:"\f242"}.uk-icon-battery-3:before,.uk-icon-battery-three-quarters:before{content:"\f241"}.uk-icon-battery-4:before,.uk-icon-battery-full:before{content:"\f240"}.uk-icon-black-tie:before{content:"\f27e"}.uk-icon-calendar-check-o:before{content:"\f274"}.uk-icon-calendar-minus-o:before{content:"\f272"}.uk-icon-calendar-plus-o:before{content:"\f271"}.uk-icon-calendar-times-o:before{content:"\f273"}.uk-icon-cc-diners-club:before{content:"\f24c"}.uk-icon-cc-jcb:before{content:"\f24b"}.uk-icon-chrome:before{content:"\f268"}.uk-icon-clone:before{content:"\f24d"}.uk-icon-commenting:before{content:"\f27a"}.uk-icon-commenting-o:before{content:"\f27b"}.uk-icon-contao:before{content:"\f26d"}.uk-icon-creative-commons:before{content:"\f25e"}.uk-icon-expeditedssl:before{content:"\f23e"}.uk-icon-firefox:before{content:"\f269"}.uk-icon-fonticons:before{content:"\f280"}.uk-icon-get-pocket:before{content:"\f265"}.uk-icon-gg:before{content:"\f260"}.uk-icon-gg-circle:before{content:"\f261"}.uk-icon-hand-lizard-o:before{content:"\f258"}.uk-icon-hand-paper-o:before,.uk-icon-hand-stop-o:before{content:"\f256"}.uk-icon-hand-peace-o:before{content:"\f25b"}.uk-icon-hand-pointer-o:before{content:"\f25a"}.uk-icon-hand-grab-o:before,.uk-icon-hand-rock-o:before{content:"\f255"}.uk-icon-hand-scissors-o:before{content:"\f257"}.uk-icon-hand-spock-o:before{content:"\f259"}.uk-icon-hourglass:before{content:"\f254"}.uk-icon-hourglass-o:before{content:"\f250"}.uk-icon-hourglass-1:before,.uk-icon-hourglass-start:before{content:"\f251"}.uk-icon-hourglass-2:before,.uk-icon-hourglass-half:before{content:"\f252"}.uk-icon-hourglass-3:before,.uk-icon-hourglass-end:before{content:"\f253"}.uk-icon-houzz:before{content:"\f27c"}.uk-icon-i-cursor:before{content:"\f246"}.uk-icon-industry:before{content:"\f275"}.uk-icon-internet-explorer:before{content:"\f26b"}.uk-icon-map:before{content:"\f279"}.uk-icon-map-o:before{content:"\f278"}.uk-icon-map-pin:before{content:"\f276"}.uk-icon-map-signs:before{content:"\f277"}.uk-icon-mouse-pointer:before{content:"\f245"}.uk-icon-object-group:before{content:"\f247"}.uk-icon-object-ungroup:before{content:"\f248"}.uk-icon-odnoklassniki:before{content:"\f263"}.uk-icon-odnoklassniki-square:before{content:"\f264"}.uk-icon-opencart:before{content:"\f23d"}.uk-icon-opera:before{content:"\f26a"}.uk-icon-optin-monster:before{content:"\f23c"}.uk-icon-registered:before{content:"\f25d"}.uk-icon-safari:before{content:"\f267"}.uk-icon-sticky-note:before{content:"\f249"}.uk-icon-sticky-note-o:before{content:"\f24a"}.uk-icon-television:before,.uk-icon-tv:before{content:"\f26c"}.uk-icon-trademark:before{content:"\f25c"}.uk-icon-tripadvisor:before{content:"\f262"}.uk-icon-vimeo:before{content:"\f27d"}.uk-icon-wikipedia-w:before{content:"\f266"}.uk-icon-y-combinator:before,.uk-icon-yc:before{content:"\f23b"}.uk-icon-y-combinator-square:before,.uk-icon-yc-square:before{content:"\f1d4"}.uk-icon-bluetooth:before{content:"\f293"}.uk-icon-bluetooth-b:before{content:"\f294"}.uk-icon-codiepie:before{content:"\f284"}.uk-icon-credit-card-alt:before{content:"\f283"}.uk-icon-edge:before{content:"\f282"}.uk-icon-fort-awesome:before{content:"\f286"}.uk-icon-hashtag:before{content:"\f292"}.uk-icon-mixcloud:before{content:"\f289"}.uk-icon-modx:before{content:"\f285"}.uk-icon-pause-circle:before{content:"\f28b"}.uk-icon-pause-circle-o:before{content:"\f28c"}.uk-icon-percent:before{content:"\f295"}.uk-icon-product-hunt:before{content:"\f288"}.uk-icon-reddit-alien:before{content:"\f281"}.uk-icon-scribd:before{content:"\f28a"}.uk-icon-shopping-bag:before{content:"\f290"}.uk-icon-shopping-basket:before{content:"\f291"}.uk-icon-stop-circle:before{content:"\f28d"}.uk-icon-stop-circle-o:before{content:"\f28e"}.uk-icon-usb:before{content:"\f287"}.uk-icon-american-sign-language-interpreting:before,.uk-icon-asl-interpreting:before{content:"\f2a3"}.uk-icon-assistive-listening-systems:before{content:"\f2a2"}.uk-icon-audio-description:before{content:"\f29e"}.uk-icon-blind:before{content:"\f29d"}.uk-icon-braille:before{content:"\f2a1"}.uk-icon-deaf:before,.uk-icon-deafness:before{content:"\f2a4"}.uk-icon-envira:before{content:"\f299"}.uk-icon-fa:before,.uk-icon-font-awesome:before{content:"\f2b4"}.uk-icon-first-order:before{content:"\f2b0"}.uk-icon-gitlab:before{content:"\f296"}.uk-icon-glide:before{content:"\f2a5"}.uk-icon-glide-g:before{content:"\f2a6"}.uk-icon-hard-of-hearing:before{content:"\f2a4"}.uk-icon-low-vision:before{content:"\f2a8"}.uk-icon-question-circle-o:before{content:"\f29c"}.uk-icon-sign-language:before,.uk-icon-signing:before{content:"\f2a7"}.uk-icon-snapchat:before{content:"\f2ab"}.uk-icon-snapchat-ghost:before{content:"\f2ac"}.uk-icon-snapchat-square:before{content:"\f2ad"}.uk-icon-themeisle:before{content:"\f2b2"}.uk-icon-universal-access:before{content:"\f29a"}.uk-icon-viadeo:before{content:"\f2a9"}.uk-icon-viadeo-square:before{content:"\f2aa"}.uk-icon-volume-control-phone:before{content:"\f2a0"}.uk-icon-wheelchair-alt:before{content:"\f29b"}.uk-icon-wpbeginner:before{content:"\f297"}.uk-icon-wpforms:before{content:"\f298"}.uk-icon-yoast:before{content:"\f2b1"}.uk-icon-adress-book:before{content:"\f2b9"}.uk-icon-adress-book-o:before{content:"\f2ba"}.uk-icon-adress-card:before{content:"\f2bb"}.uk-icon-adress-card-o:before{content:"\f2bc"}.uk-icon-bandcamp:before{content:"\f2d5"}.uk-icon-bath:before{content:"\f2cd"}.uk-icon-bathub:before{content:"\f2cd"}.uk-icon-drivers-license:before{content:"\f2c2"}.uk-icon-drivers-license-o:before{content:"\f2c3"}.uk-icon-eercast:before{content:"\f2da"}.uk-icon-envelope-open:before{content:"\f2b6"}.uk-icon-envelope-open-o:before{content:"\f2b7"}.uk-icon-etsy:before{content:"\f2d7"}.uk-icon-free-code-camp:before{content:"\f2c5"}.uk-icon-grav:before{content:"\f2d6"}.uk-icon-handshake-o:before{content:"\f2b5"}.uk-icon-id-badge:before{content:"\f2c1"}.uk-icon-id-card:before{content:"\f2c2"}.uk-icon-id-card-o:before{content:"\f2c3"}.uk-icon-imdb:before{content:"\f2d8"}.uk-icon-linode:before{content:"\f2b8"}.uk-icon-meetup:before{content:"\f2e0"}.uk-icon-microchip:before{content:"\f2db"}.uk-icon-podcast:before{content:"\f2ce"}.uk-icon-quora:before{content:"\f2c4"}.uk-icon-ravelry:before{content:"\f2d9"}.uk-icon-s15:before{content:"\f2cd"}.uk-icon-shower:before{content:"\f2cc"}.uk-icon-snowflake-o:before{content:"\f2dc"}.uk-icon-superpowers:before{content:"\f2dd"}.uk-icon-telegram:before{content:"\f2c6"}.uk-icon-thermometer:before{content:"\f2c7"}.uk-icon-thermometer-0:before{content:"\f2cb"}.uk-icon-thermometer-1:before{content:"\f2ca"}.uk-icon-thermometer-2:before{content:"\f2c9"}.uk-icon-thermometer-3:before{content:"\f2c8"}.uk-icon-thermometer-4:before{content:"\f2c7"}.uk-icon-thermometer-empty:before{content:"\f2cb"}.uk-icon-thermometer-full:before{content:"\f2c7"}.uk-icon-thermometer-half:before{content:"\f2c9"}.uk-icon-thermometer-quarter:before{content:"\f2ca"}.uk-icon-thermometer-three-quarters:before{content:"\f2c8"}.uk-icon-times-rectangle:before{content:"\f2d3"}.uk-icon-times-rectangle-o:before{content:"\f2d4"}.uk-icon-user-circle:before{content:"\f2bd"}.uk-icon-user-circle-o:before{content:"\f2be"}.uk-icon-user-o:before{content:"\f2c0"}.uk-icon-vcard:before{content:"\f2bb"}.uk-icon-vcard-o:before{content:"\f2bc"}.uk-icon-widow-close:before{content:"\f2d3"}.uk-icon-widow-close-o:before{content:"\f2d4"}.uk-icon-window-maximize:before{content:"\f2d0"}.uk-icon-window-minimize:before{content:"\f2d1"}.uk-icon-window-restore:before{content:"\f2d2"}.uk-icon-wpexplorer:before{content:"\f2de"}.uk-close::-moz-focus-inner{border:0;padding:0}.uk-close{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background:0 0;display:inline-block;box-sizing:content-box;width:20px;line-height:20px;text-align:center;vertical-align:middle;opacity:.3}.uk-close:after{display:block;content:"\f00d";font-family:FontAwesome}.uk-close:focus,.uk-close:hover{opacity:.5;outline:0;color:inherit;text-decoration:none;cursor:pointer}.uk-close-alt{padding:2px;border-radius:50%;background:#fff;opacity:1;box-shadow:0 0 0 1px rgba(0,0,0,.1),0 0 6px rgba(0,0,0,.3)}.uk-close-alt:focus,.uk-close-alt:hover{opacity:1}.uk-close-alt:after{opacity:.5}.uk-close-alt:focus:after,.uk-close-alt:hover:after{opacity:.8}.uk-badge{display:inline-block;padding:0 5px;background:#00a8e6;font-size:10px;font-weight:700;line-height:14px;color:#fff;text-align:center;vertical-align:middle;text-transform:none;border:1px solid rgba(0,0,0,.06);border-radius:2px;text-shadow:0 1px 0 rgba(0,0,0,.1)}a.uk-badge:hover{color:#fff}.uk-badge-notification{box-sizing:border-box;min-width:18px;border-radius:500px;font-size:12px;line-height:18px}.uk-badge-success{background-color:#8cc14c}.uk-badge-warning{background-color:#faa732}.uk-badge-danger{background-color:#da314b}.uk-alert{margin-bottom:15px;padding:10px;background:#ebf7fd;color:#2d7091;border:1px solid rgba(45,112,145,.3);border-radius:4px;text-shadow:0 1px 0 #fff}*+.uk-alert{margin-top:15px}.uk-alert>:last-child{margin-bottom:0}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert>.uk-close:first-child{float:right}.uk-alert>.uk-close:first-child+*{margin-top:0}.uk-alert-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-alert-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-alert-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)}.uk-alert-large{padding:20px}.uk-alert-large>.uk-close:first-child{margin:-10px -10px 0 0}.uk-thumbnail{display:inline-block;max-width:100%;box-sizing:border-box;margin:0;padding:4px;border:1px solid #ddd;background:#fff;border-radius:4px}a.uk-thumbnail:focus,a.uk-thumbnail:hover{border-color:#aaa;background-color:#fff;text-decoration:none;outline:0}.uk-thumbnail-caption{padding-top:4px;text-align:center;color:#444}.uk-thumbnail-mini{width:150px}.uk-thumbnail-small{width:200px}.uk-thumbnail-medium{width:300px}.uk-thumbnail-large{width:400px}.uk-thumbnail-expand,.uk-thumbnail-expand>img{width:100%}.uk-overlay{display:inline-block;position:relative;max-width:100%;vertical-align:middle;overflow:hidden;-webkit-transform:translateZ(0);margin:0}.uk-overlay.uk-border-circle{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.uk-overlay>:first-child{margin-bottom:0}.uk-overlay-panel{position:absolute;top:0;bottom:0;left:0;right:0;padding:20px;color:#fff}.uk-overlay-panel.uk-flex>*>:last-child,.uk-overlay-panel>:last-child{margin-bottom:0}.uk-overlay-panel h1,.uk-overlay-panel h2,.uk-overlay-panel h3,.uk-overlay-panel h4,.uk-overlay-panel h5,.uk-overlay-panel h6{color:inherit}.uk-overlay-panel a:not([class]){color:inherit;text-decoration:underline}.uk-overlay-panel a[class*=uk-icon-]:not(.uk-icon-button){color:inherit}.uk-overlay-hover:not(:hover):not(.uk-hover) .uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-active :not(.uk-active)>.uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-background{background:rgba(0,0,0,.5)}.uk-overlay-image{padding:0}.uk-overlay-top{bottom:auto}.uk-overlay-bottom{top:auto}.uk-overlay-left{right:auto}.uk-overlay-right{left:auto}.uk-overlay-icon:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-blur,.uk-overlay-fade,.uk-overlay-grayscale,.uk-overlay-scale,.uk-overlay-spin,[class*=uk-overlay-slide]{transition-duration:.3s;transition-timing-function:ease-out;transition-property:opacity,transform,filter}.uk-overlay-active .uk-overlay-fade,.uk-overlay-active .uk-overlay-scale,.uk-overlay-active .uk-overlay-spin,.uk-overlay-active [class*=uk-overlay-slide]{transition-duration:.8s}.uk-overlay-fade{opacity:.7}.uk-overlay-active .uk-active>.uk-overlay-fade,.uk-overlay-hover.uk-hover .uk-overlay-fade,.uk-overlay-hover:hover .uk-overlay-fade{opacity:1}.uk-overlay-scale{-webkit-transform:scale(1);transform:scale(1)}.uk-overlay-active .uk-active>.uk-overlay-scale,.uk-overlay-hover.uk-hover .uk-overlay-scale,.uk-overlay-hover:hover .uk-overlay-scale{-webkit-transform:scale(1.1);transform:scale(1.1)}.uk-overlay-spin{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}.uk-overlay-active .uk-active>.uk-overlay-spin,.uk-overlay-hover.uk-hover .uk-overlay-spin,.uk-overlay-hover:hover .uk-overlay-spin{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}.uk-overlay-grayscale{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.uk-overlay-active .uk-active>.uk-overlay-grayscale,.uk-overlay-hover.uk-hover .uk-overlay-grayscale,.uk-overlay-hover:hover .uk-overlay-grayscale{-webkit-filter:grayscale(0);filter:grayscale(0)}[class*=uk-overlay-slide]{opacity:0}.uk-overlay-slide-top{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.uk-overlay-slide-bottom{-webkit-transform:translateY(100%);transform:translateY(100%)}.uk-overlay-slide-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.uk-overlay-slide-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-overlay-active .uk-active>[class*=uk-overlay-slide],.uk-overlay-hover.uk-hover [class*=uk-overlay-slide],.uk-overlay-hover:hover [class*=uk-overlay-slide]{opacity:1;-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.uk-overlay-area{position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.3);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-area,.uk-overlay-toggle:hover .uk-overlay-area,.uk-overlay.uk-hover .uk-overlay-area,.uk-overlay:hover .uk-overlay-area{opacity:1}.uk-overlay-area:empty:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-area:not(:empty){font-size:0}.uk-overlay-area:not(:empty):before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-overlay-area-content{display:inline-block;box-sizing:border-box;width:100%;vertical-align:middle;font-size:1rem;text-align:center;padding:0 15px;color:#fff}.uk-overlay-area-content>:last-child{margin-bottom:0}.uk-overlay-area-content a:not([class]),.uk-overlay-area-content a:not([class]):hover{color:inherit}.uk-overlay-caption{position:absolute;bottom:0;left:0;right:0;padding:15px;background:rgba(0,0,0,.5);color:#fff;opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-caption,.uk-overlay-toggle:hover .uk-overlay-caption,.uk-overlay.uk-hover .uk-overlay-caption,.uk-overlay:hover .uk-overlay-caption{opacity:1}[class*=uk-column-]{-webkit-column-gap:25px;-moz-column-gap:25px;column-gap:25px}.uk-column-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}@media (min-width:480px){.uk-column-small-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-small-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-small-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-small-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-small-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:768px){.uk-column-medium-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-medium-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-medium-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-medium-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-medium-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:960px){.uk-column-large-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-large-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-large-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-large-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-large-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:1220px){.uk-column-xlarge-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-xlarge-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-xlarge-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-xlarge-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-xlarge-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}[class*=uk-animation-]{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media screen{[data-uk-scrollspy*=uk-animation-]:not([data-uk-scrollspy*=target]){opacity:0}}.uk-animation-fade{-webkit-animation-name:uk-fade;animation-name:uk-fade;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-timing-function:linear!important;animation-timing-function:linear!important}.uk-animation-scale-up{-webkit-animation-name:uk-fade-scale-02;animation-name:uk-fade-scale-02}.uk-animation-scale-down{-webkit-animation-name:uk-fade-scale-18;animation-name:uk-fade-scale-18}.uk-animation-slide-top{-webkit-animation-name:uk-fade-top;animation-name:uk-fade-top}.uk-animation-slide-bottom{-webkit-animation-name:uk-fade-bottom;animation-name:uk-fade-bottom}.uk-animation-slide-left{-webkit-animation-name:uk-fade-left;animation-name:uk-fade-left}.uk-animation-slide-right{-webkit-animation-name:uk-fade-right;animation-name:uk-fade-right}.uk-animation-scale{-webkit-animation-name:uk-scale-12;animation-name:uk-scale-12}.uk-animation-shake{-webkit-animation-name:uk-shake;animation-name:uk-shake}.uk-animation-reverse{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}.uk-animation-15{-webkit-animation-duration:15s;animation-duration:15s}.uk-animation-top-left{-webkit-transform-origin:0 0;transform-origin:0 0}.uk-animation-top-center{-webkit-transform-origin:50% 0;transform-origin:50% 0}.uk-animation-top-right{-webkit-transform-origin:100% 0;transform-origin:100% 0}.uk-animation-middle-left{-webkit-transform-origin:0 50%;transform-origin:0 50%}.uk-animation-middle-right{-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.uk-animation-bottom-left{-webkit-transform-origin:0 100%;transform-origin:0 100%}.uk-animation-bottom-center{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.uk-animation-bottom-right{-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.uk-animation-hover:not(:hover),.uk-animation-hover:not(:hover) [class*=uk-animation-],.uk-touch .uk-animation-hover:not(.uk-hover),.uk-touch .uk-animation-hover:not(.uk-hover) [class*=uk-animation-]{-webkit-animation-name:none;animation-name:none}@-webkit-keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes uk-fade-top{0%{opacity:0;-webkit-transform:translateY(-100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom{0%{opacity:0;-webkit-transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left{0%{opacity:0;-webkit-transform:translateX(-100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right{0%{opacity:0;-webkit-transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-scale-02{0%{opacity:0;-webkit-transform:scale(.2)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-15{0%{opacity:0;-webkit-transform:scale(1.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-15{0%{opacity:0;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-18{0%{opacity:0;-webkit-transform:scale(1.8)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-slide-left{0%{-webkit-transform:translateX(-100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right{0%{-webkit-transform:translateX(100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-left-33{0%{-webkit-transform:translateX(33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left-33{0%{transform:translateX(33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right-33{0%{-webkit-transform:translateX(-33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right-33{0%{transform:translateX(-33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-scale-12{0%{-webkit-transform:scale(1.2)}100%{-webkit-transform:scale(1)}}@keyframes uk-scale-12{0%{transform:scale(1.2)}100%{transform:scale(1)}}@-webkit-keyframes uk-rotate{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes uk-rotate{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}@-webkit-keyframes uk-shake{0%,100%{-webkit-transform:translateX(0)}10%{-webkit-transform:translateX(-9px)}20%{-webkit-transform:translateX(8px)}30%{-webkit-transform:translateX(-7px)}40%{-webkit-transform:translateX(6px)}50%{-webkit-transform:translateX(-5px)}60%{-webkit-transform:translateX(4px)}70%{-webkit-transform:translateX(-3px)}80%{-webkit-transform:translateX(2px)}90%{-webkit-transform:translateX(-1px)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@-webkit-keyframes uk-slide-top-fixed{0%{opacity:0;-webkit-transform:translateY(-10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-top-fixed{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-slide-bottom-fixed{0%{opacity:0;-webkit-transform:translateY(10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-bottom-fixed{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}.uk-dropdown,.uk-dropdown-blank{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:200px}.uk-dropdown{padding:15px;background:#fff;color:#444;font-size:1rem;vertical-align:top;border:1px solid #ddd;border-radius:4px}.uk-dropdown:focus{outline:0}.uk-open>.uk-dropdown,.uk-open>.uk-dropdown-blank{display:block;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-dropdown-top{margin-top:-5px}.uk-dropdown-bottom{margin-top:5px}.uk-dropdown-left{margin-left:-5px}.uk-dropdown-right{margin-left:5px}.uk-dropdown .uk-nav{margin:0 -15px}.uk-grid .uk-dropdown-grid+.uk-dropdown-grid{margin-top:15px}.uk-dropdown-grid>[class*=uk-width-]>.uk-panel+.uk-panel{margin-top:15px}@media (min-width:768px){.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid{margin-left:-15px;margin-right:-15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]{padding-left:15px;padding-right:15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){border-left:1px solid #ddd}.uk-dropdown-width-2:not(.uk-dropdown-stack){width:400px}.uk-dropdown-width-3:not(.uk-dropdown-stack){width:600px}.uk-dropdown-width-4:not(.uk-dropdown-stack){width:800px}.uk-dropdown-width-5:not(.uk-dropdown-stack){width:1000px}}@media (max-width:767px){.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}.uk-dropdown-small{min-width:150px;width:auto;padding:5px;white-space:nowrap}.uk-dropdown-small .uk-nav{margin:0 -5px}.uk-dropdown-navbar{margin-top:6px;background:#fff;color:#444;left:-1px}.uk-open>.uk-dropdown-navbar{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-dropdown-scrollable{overflow-y:auto;max-height:200px}.uk-dropdown-navbar.uk-dropdown-flip{left:auto}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;background:rgba(0,0,0,.6);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;touch-action:cross-slide-y pinch-zoom double-tap-zoom;-webkit-transform:translateZ(0);transform:translateZ(0)}.uk-modal.uk-open{opacity:1}.uk-modal-page,.uk-modal-page body{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:50px auto;padding:20px;width:600px;max-width:100%;max-width:calc(100% - 20px);background:#fff;opacity:0;-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-transition:opacity .3s linear,-webkit-transform .3s ease-out;transition:opacity .3s linear,transform .3s ease-out;border-radius:4px;box-shadow:0 0 10px rgba(0,0,0,.3)}@media (max-width:767px){.uk-modal-dialog{width:auto;margin:10px auto}}.uk-open .uk-modal-dialog{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.uk-modal-dialog>:not([class*=uk-modal-]):last-child{margin-bottom:0}.uk-modal-dialog>.uk-close:first-child{margin:-10px -10px 0 0;float:right}.uk-modal-dialog>.uk-close:first-child+:not([class*=uk-modal-]){margin-top:0}.uk-modal-dialog-lightbox{margin:15px auto;padding:0;max-width:95%;max-width:calc(100% - 30px);min-height:50px;border-radius:0}.uk-modal-dialog-lightbox>.uk-close:first-child{position:absolute;top:-12px;right:-12px;margin:0;float:none}@media (max-width:767px){.uk-modal-dialog-lightbox>.uk-close:first-child{top:-7px;right:-7px}}.uk-modal-dialog-blank{margin:0;padding:0;width:100%;max-width:100%;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.uk-modal-dialog-blank>.uk-close:first-child{position:absolute;top:20px;right:20px;z-index:1;margin:0;float:none}@media (min-width:768px){.uk-modal-dialog-large{width:930px}}@media (min-width:1220px){.uk-modal-dialog-large{width:1130px}}.uk-modal-header{margin-bottom:15px;margin:-20px -20px 15px -20px;padding:20px;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0;background:#fafafa}.uk-modal-footer{margin-top:15px;margin:15px -20px -20px -20px;padding:20px;border-top:1px solid #ddd;border-radius:0 0 4px 4px;background:#fafafa}.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-caption{position:absolute;left:0;right:0;bottom:-20px;margin-bottom:-10px;color:#fff;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-modal-spinner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:25px;color:#ddd}.uk-modal-spinner:after{content:"\f110";display:block;font-family:FontAwesome;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-offcanvas{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;touch-action:none;background:rgba(0,0,0,.1)}.uk-offcanvas.uk-active{display:block}.uk-offcanvas-page{position:fixed;-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-left:0}.uk-offcanvas-bar{position:fixed;top:0;bottom:0;left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:1001;width:270px;max-width:100%;background:#333;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;-ms-scroll-chaining:none}.uk-offcanvas.uk-active .uk-offcanvas-bar.uk-offcanvas-bar-show{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas-bar-flip{left:auto;right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas-bar[mode=none]{-webkit-transition:none;transition:none}.uk-offcanvas-bar[mode=reveal]{-webkit-transform:translateX(0);transform:translateX(0);clip:rect(0,0,100vh,0);-webkit-transition:-webkit-transform .3s ease-in-out,clip .3s ease-in-out;transition:transform .3s ease-in-out,clip .3s ease-in-out}.uk-offcanvas-bar-flip[mode=reveal]{clip:none;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas-bar-flip[mode=reveal]>*{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out}.uk-offcanvas.uk-active .uk-offcanvas-bar-flip[mode=reveal].uk-offcanvas-bar-show>*{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas .uk-panel{margin:20px 15px;color:#777;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-offcanvas .uk-panel-title{color:#ccc}.uk-offcanvas .uk-panel a:not([class]){color:#ccc}.uk-offcanvas .uk-panel a:not([class]):hover{color:#fff}.uk-offcanvas-bar:after{content:"";display:block;position:absolute;top:0;bottom:0;right:0;width:1px;background:rgba(0,0,0,.6);box-shadow:0 0 5px 2px rgba(0,0,0,.6)}.uk-offcanvas-bar-flip:after{right:auto;left:0;width:1px;background:rgba(0,0,0,.6);box-shadow:0 0 5px 2px rgba(0,0,0,.6)}.uk-switcher{margin:0;padding:0;list-style:none;touch-action:cross-slide-y pinch-zoom double-tap-zoom}.uk-switcher>:not(.uk-active){display:none}.uk-text-small{font-size:11px;line-height:16px}.uk-text-large{font-size:18px;line-height:24px;font-weight:400}.uk-text-bold{font-weight:700}.uk-text-muted{color:#999!important}.uk-text-primary{color:#2d7091!important}.uk-text-success{color:#659f13!important}.uk-text-warning{color:#e28327!important}.uk-text-danger{color:#d85030!important}.uk-text-contrast{color:#fff!important}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}@media (max-width:959px){.uk-text-center-medium{text-align:center!important}.uk-text-left-medium{text-align:left!important}}@media (max-width:767px){.uk-text-center-small{text-align:center!important}.uk-text-left-small{text-align:left!important}}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-text-break{word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;-moz-hyphens:auto;hyphens:auto}.uk-text-capitalize{text-transform:capitalize!important}.uk-text-lowercase{text-transform:lowercase!important}.uk-text-uppercase{text-transform:uppercase!important}.uk-container{box-sizing:border-box;max-width:980px;padding:0 25px}@media (min-width:1220px){.uk-container{max-width:1200px;padding:0 35px}}.uk-container:after,.uk-container:before{content:"";display:table}.uk-container:after{clear:both}.uk-container-center{margin-left:auto;margin-right:auto}.uk-clearfix:before{content:"";display:table-cell}.uk-clearfix:after{content:"";display:table;clear:both}.uk-nbfc{overflow:hidden}.uk-nbfc-alt{display:table-cell;width:10000px}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}[class*=uk-align-]{display:block;margin-bottom:15px}.uk-align-left{margin-right:15px;float:left}.uk-align-right{margin-left:15px;float:right}@media (min-width:768px){.uk-align-medium-left{margin-right:15px;float:left}.uk-align-medium-right{margin-left:15px;float:right}}.uk-align-center{margin-left:auto;margin-right:auto}.uk-vertical-align{font-size:0}.uk-vertical-align:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-vertical-align-bottom,.uk-vertical-align-middle{display:inline-block;max-width:100%;font-size:1rem}.uk-vertical-align-middle{vertical-align:middle}.uk-vertical-align-bottom{vertical-align:bottom}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{height:100vh;min-height:600px}.uk-responsive-height,.uk-responsive-width{box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto}.uk-margin{margin-bottom:15px}*+.uk-margin{margin-top:15px}.uk-margin-top{margin-top:15px!important}.uk-margin-bottom{margin-bottom:15px!important}.uk-margin-left{margin-left:15px!important}.uk-margin-right{margin-right:15px!important}.uk-margin-large{margin-bottom:50px}*+.uk-margin-large{margin-top:50px}.uk-margin-large-top{margin-top:50px!important}.uk-margin-large-bottom{margin-bottom:50px!important}.uk-margin-large-left{margin-left:50px!important}.uk-margin-large-right{margin-right:50px!important}.uk-margin-small{margin-bottom:5px}*+.uk-margin-small{margin-top:5px}.uk-margin-small-top{margin-top:5px!important}.uk-margin-small-bottom{margin-bottom:5px!important}.uk-margin-small-left{margin-left:5px!important}.uk-margin-small-right{margin-right:5px!important}.uk-margin-remove{margin:0!important}.uk-margin-top-remove{margin-top:0!important}.uk-margin-bottom-remove{margin-bottom:0!important}.uk-padding-remove{padding:0!important}.uk-padding-top-remove{padding-top:0!important}.uk-padding-bottom-remove{padding-bottom:0!important}.uk-padding-vertical-remove{padding-top:0!important;padding-bottom:0!important}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-heading-large{font-size:36px;line-height:42px}@media (min-width:768px){.uk-heading-large{font-size:52px;line-height:64px}}.uk-link-muted,.uk-link-muted a{color:#444}.uk-link-muted a:hover,.uk-link-muted:hover{color:#444}.uk-link-reset,.uk-link-reset a,.uk-link-reset a:focus,.uk-link-reset a:hover,.uk-link-reset:focus,.uk-link-reset:hover{color:inherit;text-decoration:none}.uk-scrollable-text{height:300px;overflow-y:scroll;-webkit-overflow-scrolling:touch;resize:both}.uk-scrollable-box{box-sizing:border-box;height:170px;padding:10px;border:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch;resize:both;border-radius:3px}.uk-scrollable-box>:last-child{margin-bottom:0}.uk-overflow-hidden{overflow:hidden}.uk-overflow-container{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-container>:last-child{margin-bottom:0}.uk-position-absolute,[class*=uk-position-top],[class*=uk-position-bottom]{position:absolute!important}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative!important}.uk-position-z-index{z-index:1}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important;max-width:100%}@media (min-width:960px){.uk-visible-small{display:none!important}.uk-visible-medium{display:none!important}.uk-hidden-large{display:none!important}}@media (min-width:768px) and (max-width:959px){.uk-visible-small{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-medium{display:none!important}}@media (max-width:767px){.uk-visible-medium{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-small{display:none!important}}.uk-hidden{display:none!important;visibility:hidden!important}.uk-invisible{visibility:hidden!important}.uk-visible-hover:hover .uk-hidden,.uk-visible-hover:hover .uk-invisible{display:block!important;visibility:visible!important}.uk-visible-hover-inline:hover .uk-hidden,.uk-visible-hover-inline:hover .uk-invisible{display:inline-block!important;visibility:visible!important}.uk-notouch .uk-hidden-notouch,.uk-touch .uk-hidden-touch{display:none!important}.uk-flex{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-flex-inline{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex}.uk-flex-inline>*,.uk-flex>*{-ms-flex-negative:1}.uk-flex-top{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start}.uk-flex-middle{-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-flex-bottom{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end}.uk-flex-center{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-space-between{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-space-around{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}.uk-flex-row-reverse{-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.uk-flex-column{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-flex-column-reverse{-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.uk-flex-nowrap{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.uk-flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.uk-flex-wrap-top{-ms-flex-line-pack:start;-webkit-align-content:flex-start;align-content:flex-start}.uk-flex-wrap-middle{-ms-flex-line-pack:center;-webkit-align-content:center;align-content:center}.uk-flex-wrap-bottom{-ms-flex-line-pack:end;-webkit-align-content:flex-end;align-content:flex-end}.uk-flex-wrap-space-between{-ms-flex-line-pack:justify;-webkit-align-content:space-between;align-content:space-between}.uk-flex-wrap-space-around{-ms-flex-line-pack:distribute;-webkit-align-content:space-around;align-content:space-around}.uk-flex-order-first{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last{-ms-flex-order:99;-webkit-order:99;order:99}@media (min-width:480px){.uk-flex-order-first-small{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-small{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:768px){.uk-flex-order-first-medium{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-medium{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:960px){.uk-flex-order-first-large{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-large{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:1220px){.uk-flex-order-first-xlarge{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-xlarge{-ms-flex-order:99;-webkit-order:99;order:99}}.uk-flex-item-none{-ms-flex:none;-webkit-flex:none;flex:none}.uk-flex-item-auto{-ms-flex:auto;-webkit-flex:auto;flex:auto;-ms-flex-negative:1}.uk-flex-item-1{-ms-flex:1;-webkit-flex:1;flex:1}.uk-contrast{color:#fff}.uk-contrast .uk-link,.uk-contrast a:not([class]){color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-link:hover,.uk-contrast a:not([class]):hover{color:#fff;text-decoration:underline}.uk-contrast :not(pre)>code,.uk-contrast :not(pre)>kbd,.uk-contrast :not(pre)>samp{color:#fff;border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.1)}.uk-contrast em{color:#fff}.uk-contrast h1,.uk-contrast h2,.uk-contrast h3,.uk-contrast h4,.uk-contrast h5,.uk-contrast h6{color:#fff}.uk-contrast hr{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav li>a,.uk-contrast .uk-nav li>a:hover{text-decoration:none}.uk-contrast .uk-nav-side>li>a{color:#fff}.uk-contrast .uk-nav-side>li>a:focus,.uk-contrast .uk-nav-side>li>a:hover{background:rgba(255,255,255,.1);color:#fff;text-shadow:none}.uk-contrast .uk-nav-side>li.uk-active>a{background:#fff;color:#444;text-shadow:none}.uk-contrast .uk-nav-side .uk-nav-header{color:#fff}.uk-contrast .uk-nav-side .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav-side ul a{color:rgba(255,255,255,.7)}.uk-contrast .uk-nav-side ul a:hover{color:#fff}.uk-contrast .uk-subnav>*>a{color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-subnav>*>a:focus,.uk-contrast .uk-subnav>*>a:hover{color:#fff;text-decoration:none}.uk-contrast .uk-subnav>.uk-active>a{color:#fff}.uk-contrast .uk-subnav-line>:nth-child(n+2):before{border-left-color:rgba(255,255,255,.2)}.uk-contrast .uk-subnav-pill>*>a:focus,.uk-contrast .uk-subnav-pill>*>a:hover{background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-subnav-pill>.uk-active>a{background:#fff;color:#444}.uk-contrast .uk-tab{border-bottom-color:rgba(255,255,255,.2)}.uk-contrast .uk-tab>li>a{border-color:transparent;color:rgba(255,255,255,.7);text-shadow:none}.uk-contrast .uk-tab>li.uk-open>a,.uk-contrast .uk-tab>li>a:focus,.uk-contrast .uk-tab>li>a:hover{border-color:rgba(255,255,255,.7);background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-tab>li.uk-active>a{border-color:rgba(255,255,255,.2);border-bottom-color:transparent;background:#fff;color:#444}.uk-contrast .uk-tab-center{border-bottom-color:rgba(255,255,255,.2)}.uk-contrast .uk-tab-grid:before{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-list-line>li:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-form input:not([type]),.uk-contrast .uk-form input[type=text],.uk-contrast .uk-form input[type=password],.uk-contrast .uk-form input[type=email],.uk-contrast .uk-form input[type=url],.uk-contrast .uk-form input[type=search],.uk-contrast .uk-form input[type=tel],.uk-contrast .uk-form input[type=number],.uk-contrast .uk-form input[type=datetime],.uk-contrast .uk-form input[type=datetime-local],.uk-contrast .uk-form input[type=date],.uk-contrast .uk-form input[type=month],.uk-contrast .uk-form input[type=time],.uk-contrast .uk-form input[type=week],.uk-contrast .uk-form input[type=color],.uk-contrast .uk-form select,.uk-contrast .uk-form textarea{border-color:rgba(255,255,255,.8);background:rgba(255,255,255,.8);color:#444;background-clip:padding-box}.uk-contrast .uk-form input:not([type]):focus,.uk-contrast .uk-form input[type=text]:focus,.uk-contrast .uk-form input[type=password]:focus,.uk-contrast .uk-form input[type=email]:focus,.uk-contrast .uk-form input[type=url]:focus,.uk-contrast .uk-form input[type=search]:focus,.uk-contrast .uk-form input[type=tel]:focus,.uk-contrast .uk-form input[type=number]:focus,.uk-contrast .uk-form input[type=datetime]:focus,.uk-contrast .uk-form input[type=datetime-local]:focus,.uk-contrast .uk-form input[type=date]:focus,.uk-contrast .uk-form input[type=month]:focus,.uk-contrast .uk-form input[type=time]:focus,.uk-contrast .uk-form input[type=week]:focus,.uk-contrast .uk-form input[type=color]:focus,.uk-contrast .uk-form select:focus,.uk-contrast .uk-form textarea:focus{border-color:#fff;background:#fff;color:#444}.uk-contrast .uk-form :-ms-input-placeholder{color:rgba(68,68,68,.7)!important}.uk-contrast .uk-form ::-moz-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-form ::-webkit-input-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-button{color:#444;background:#fff;border-color:transparent}.uk-contrast .uk-button:focus,.uk-contrast .uk-button:hover{background-color:rgba(255,255,255,.8);color:#444;border-color:transparent}.uk-contrast .uk-button.uk-active,.uk-contrast .uk-button:active{background-color:rgba(255,255,255,.7);color:#444}.uk-contrast .uk-button-primary{background-color:#00a8e6;color:#fff}.uk-contrast .uk-button-primary:focus,.uk-contrast .uk-button-primary:hover{background-color:#35b3ee;color:#fff}.uk-contrast .uk-button-primary.uk-active,.uk-contrast .uk-button-primary:active{background-color:#0091ca;color:#fff}.uk-contrast .uk-icon-hover{color:rgba(255,255,255,.7)}.uk-contrast .uk-icon-hover:hover{color:#fff}.uk-contrast .uk-icon-button{background:#fff;color:#444;border-color:transparent}.uk-contrast .uk-icon-button:focus,.uk-contrast .uk-icon-button:hover{background-color:rgba(255,255,255,.8);color:#444;border-color:transparent}.uk-contrast .uk-icon-button:active{background-color:rgba(255,255,255,.7);color:#444}.uk-contrast .uk-text-muted{color:rgba(255,255,255,.6)!important}.uk-contrast .uk-text-primary{color:#2d7091!important}@media print{*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/media/uikit/css/uikit.css b/media/uikit-v2/css/uikit.css similarity index 86% rename from media/uikit/css/uikit.css rename to media/uikit-v2/css/uikit.css index a9637ce..17aadb9 100644 --- a/media/uikit/css/uikit.css +++ b/media/uikit-v2/css/uikit.css @@ -1,9 +1,9 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Base ========================================================================== */ /* - * 1. Normalizes default `font-family` and sets `font-size` here to support `rem` units + * 1. Normalize default `font-family` and set `font-size` to support `rem` units * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom * 3. Style */ @@ -14,8 +14,8 @@ html { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; /* 3 */ - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } /* * Removes default margin. @@ -32,7 +32,7 @@ a { background: transparent; } /* - * Improves readability when focused and also mouse hovered in all browsers. + * Improve readability of focused elements when they are also in an active/hover state. */ a:active, a:hover { @@ -43,25 +43,25 @@ a:hover { */ a, .uk-link { - color: #0077dd; + color: #07D; text-decoration: none; cursor: pointer; } a:hover, .uk-link:hover { - color: #005599; + color: #059; text-decoration: underline; } /* Text-level semantics ========================================================================== */ /* - * Addresses styling not present in Chrome, Safari, Opera and IE 8/9/10. + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ abbr[title] { border-bottom: 1px dotted; } /* - * Addresses style set to `bolder` in Firefox + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ b, strong { @@ -79,21 +79,21 @@ strong { /* 2 */ font-family: Consolas, monospace, serif; /* 3 */ - color: #dd0055; + color: #D05; white-space: nowrap; } /* * Emphasize */ em { - color: #dd0055; + color: #D05; } /* * Insert */ ins { - background: #ffffaa; - color: #444444; + background: #ffa; + color: #444; text-decoration: none; } /* @@ -101,8 +101,8 @@ ins { * Note: Addresses styling not present in IE 8/9. */ mark { - background: #ffffaa; - color: #444444; + background: #ffa; + color: #444; } /* * Quote @@ -132,33 +132,52 @@ sup { sub { bottom: -0.25em; } -/* Images +/* Embedded content ========================================================================== */ /* - * 1. Responsiveness: Sets a maximum width relative to the parent and auto scales the height - * 2. Corrects `max-width` behavior if padding and border are used - * 3. Remove border when inside `a` element in IE 8/9/10. - * 4. Remove the gap between images and the bottom of their containers + * Remove the gap between embedded content and the bottom of their containers. */ -img { +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} +/* + * Responsiveness + * 1. Sets a maximum width relative to the parent and auto scales the height + * 2. Corrects `max-width` behavior if padding and border are used + */ +audio, +canvas, +img, +svg, +video { /* 1 */ max-width: 100%; height: auto; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; - /* 3 */ - border: 0; - /* 4 */ - vertical-align: middle; } /* - * Preserve original image dimensions + * Preserve original dimensions */ .uk-img-preserve, -.uk-img-preserve img { +.uk-img-preserve audio, +.uk-img-preserve canvas, +.uk-img-preserve img, +.uk-img-preserve svg, +.uk-img-preserve video { max-width: none; } +/* + * Remove border when inside `a` element in IE 8/9/10. + */ +img { + border: 0; +} /* * Correct overflow not hidden in IE 9/10/11. */ @@ -210,7 +229,7 @@ h6 { margin: 0 0 15px 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; - color: #444444; + color: #444; text-transform: none; } /* @@ -288,13 +307,12 @@ dd { */ hr { /* 1 */ - -moz-box-sizing: content-box; box-sizing: content-box; height: 0; /* 2 */ margin: 15px 0; border: 0; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Address ========================================================================== */ @@ -305,7 +323,7 @@ address { ========================================================================== */ blockquote { padding-left: 15px; - border-left: 5px solid #dddddd; + border-left: 5px solid #ddd; font-size: 16px; line-height: 22px; font-style: italic; @@ -319,28 +337,30 @@ pre { padding: 10px; background: #f5f5f5; font: 12px / 18px Consolas, monospace, serif; - color: #444444; + color: #444; -moz-tab-size: 4; tab-size: 4; /* 1 */ overflow: auto; } -/* Selection pseudo-element +/* Selection pseudo-element ========================================================================== */ ::-moz-selection { - background: #3399ff; - color: #ffffff; + background: #39f; + color: #fff; text-shadow: none; } ::selection { - background: #3399ff; - color: #ffffff; + background: #39f; + color: #fff; text-shadow: none; } /* HTML5 elements ========================================================================== */ /* - * Corrects `block` display not defined in IE 8/9. + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. + * Correct `block` display not defined for `main` in IE 11. */ article, aside, @@ -356,7 +376,7 @@ summary { display: block; } /* - * Addresses inconsistent vertical alignment of `progress` in Chrome, Firefox and Opera. + * Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ progress { vertical-align: baseline; @@ -368,8 +388,8 @@ audio:not([controls]) { display: none; } /* - * Address `[hidden]` styling not present in IE 8/9. - * Hide the `template` element in IE and Safari + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. */ [hidden], template { @@ -523,6 +543,41 @@ iframe { .uk-grid-medium > * > .uk-panel + .uk-panel { margin-top: 25px; } +/* + * Large gutter + */ +/* Large screen and bigger */ +@media (min-width: 960px) { + /* Horizontal */ + .uk-grid-large { + margin-left: -35px; + } + .uk-grid-large > * { + padding-left: 35px; + } + /* Vertical */ + .uk-grid-large + .uk-grid-large, + .uk-grid-large-margin, + .uk-grid-large > * > .uk-panel + .uk-panel { + margin-top: 35px; + } +} +/* Extra Large screens */ +@media (min-width: 1220px) { + /* Horizontal */ + .uk-grid-large { + margin-left: -50px; + } + .uk-grid-large > * { + padding-left: 50px; + } + /* Vertical */ + .uk-grid-large + .uk-grid-large, + .uk-grid-large-margin, + .uk-grid-large > * > .uk-panel + .uk-panel { + margin-top: 50px; + } +} /* Modifier: `uk-grid-divider` ========================================================================== */ /* @@ -547,18 +602,18 @@ iframe { .uk-grid-divider > [class*='uk-width-7-']:nth-child(n+2), .uk-grid-divider > [class*='uk-width-8-']:nth-child(n+2), .uk-grid-divider > [class*='uk-width-9-']:nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* Tablet and bigger */ @media (min-width: 768px) { .uk-grid-divider > [class*='uk-width-medium-']:not(.uk-width-medium-1-1):nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } } /* Desktop and bigger */ @media (min-width: 960px) { .uk-grid-divider > [class*='uk-width-large-']:not(.uk-width-large-1-1):nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } } /* Large screen and bigger */ @@ -585,34 +640,33 @@ iframe { .uk-grid-divider:empty { margin-top: 25px; margin-bottom: 25px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Match panels in grids ========================================================================== */ +/* + * 1. Behave like a block element + */ .uk-grid-match > * { display: -ms-flexbox; display: -webkit-flex; display: flex; + /* 1 */ + -ms-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; } -/* - * 1. Behave like a block element - */ .uk-grid-match > * > * { /* 1 */ -ms-flex: none; -webkit-flex: none; flex: none; - -ms-flex-wrap: wrap; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } /* Even grid cell widths ========================================================================== */ [class*='uk-grid-width'] > * { - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } @@ -634,8 +688,14 @@ iframe { .uk-grid-width-1-10 > * { width: 10%; } +.uk-grid-width-auto > * { + width: auto; +} /* Phone landscape and bigger */ @media (min-width: 480px) { + .uk-grid-width-small-1-1 > * { + width: 100%; + } .uk-grid-width-small-1-2 > * { width: 50%; } @@ -657,6 +717,9 @@ iframe { } /* Tablet and bigger */ @media (min-width: 768px) { + .uk-grid-width-medium-1-1 > * { + width: 100%; + } .uk-grid-width-medium-1-2 > * { width: 50%; } @@ -678,6 +741,9 @@ iframe { } /* Desktop and bigger */ @media (min-width: 960px) { + .uk-grid-width-large-1-1 > * { + width: 100%; + } .uk-grid-width-large-1-2 > * { width: 50%; } @@ -699,6 +765,9 @@ iframe { } /* Large screen and bigger */ @media (min-width: 1220px) { + .uk-grid-width-xlarge-1-1 > * { + width: 100%; + } .uk-grid-width-xlarge-1-2 > * { width: 50%; } @@ -721,7 +790,6 @@ iframe { /* Sub-objects: `uk-width-*` ========================================================================== */ [class*='uk-width'] { - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } @@ -993,6 +1061,73 @@ iframe { width: 90%; } } +/* Large screen and bigger */ +@media (min-width: 1220px) { + /* Whole */ + .uk-width-xlarge-1-1 { + width: 100%; + } + /* Halves */ + .uk-width-xlarge-1-2, + .uk-width-xlarge-2-4, + .uk-width-xlarge-3-6, + .uk-width-xlarge-5-10 { + width: 50%; + } + /* Thirds */ + .uk-width-xlarge-1-3, + .uk-width-xlarge-2-6 { + width: 33.333%; + } + .uk-width-xlarge-2-3, + .uk-width-xlarge-4-6 { + width: 66.666%; + } + /* Quarters */ + .uk-width-xlarge-1-4 { + width: 25%; + } + .uk-width-xlarge-3-4 { + width: 75%; + } + /* Fifths */ + .uk-width-xlarge-1-5, + .uk-width-xlarge-2-10 { + width: 20%; + } + .uk-width-xlarge-2-5, + .uk-width-xlarge-4-10 { + width: 40%; + } + .uk-width-xlarge-3-5, + .uk-width-xlarge-6-10 { + width: 60%; + } + .uk-width-xlarge-4-5, + .uk-width-xlarge-8-10 { + width: 80%; + } + /* Sixths */ + .uk-width-xlarge-1-6 { + width: 16.666%; + } + .uk-width-xlarge-5-6 { + width: 83.333%; + } + /* Tenths */ + .uk-width-xlarge-1-10 { + width: 10%; + } + .uk-width-xlarge-3-10 { + width: 30%; + } + .uk-width-xlarge-7-10 { + width: 70%; + } + .uk-width-xlarge-9-10 { + width: 90%; + } +} /* Sub-object: `uk-push-*` and `uk-pull-*` ========================================================================== */ /* @@ -1178,7 +1313,7 @@ iframe { line-height: 24px; font-weight: normal; text-transform: none; - color: #444444; + color: #444; } /* Sub-object: `uk-panel-badge` ========================================================================== */ @@ -1193,24 +1328,29 @@ iframe { .uk-panel-teaser { margin-bottom: 15px; } +/* Sub-object: `uk-panel-body` + ========================================================================== */ +.uk-panel-body { + padding: 15px; +} /* Modifier: `uk-panel-box` ========================================================================== */ .uk-panel-box { padding: 15px; background: #f5f5f5; - color: #444444; + color: #444; } .uk-panel-box-hover:hover { - color: #444444; + color: #444; } .uk-panel-box .uk-panel-title { - color: #444444; + color: #444; } .uk-panel-box .uk-panel-badge { top: 10px; right: 10px; } -.uk-panel-box .uk-panel-teaser { +.uk-panel-box > .uk-panel-teaser { margin-top: -15px; margin-left: -15px; margin-right: -15px; @@ -1238,30 +1378,30 @@ iframe { * Sub-modifier: `uk-panel-box-secondary` */ .uk-panel-box-secondary { - background-color: #eeeeee; - color: #444444; + background-color: #eee; + color: #444; } .uk-panel-box-secondary-hover:hover { - color: #444444; + color: #444; } .uk-panel-box-secondary .uk-panel-title { - color: #444444; + color: #444; } /* Modifier: `uk-panel-hover` ========================================================================== */ .uk-panel-hover { padding: 15px; - color: #444444; + color: #444; } .uk-panel-hover:hover { background: #f5f5f5; - color: #444444; + color: #444; } .uk-panel-hover .uk-panel-badge { top: 10px; right: 10px; } -.uk-panel-hover .uk-panel-teaser { +.uk-panel-hover > .uk-panel-teaser { margin-top: -15px; margin-left: -15px; margin-right: -15px; @@ -1270,8 +1410,8 @@ iframe { ========================================================================== */ .uk-panel-header .uk-panel-title { padding-bottom: 10px; - border-bottom: 1px solid #dddddd; - color: #444444; + border-bottom: 1px solid #ddd; + color: #444; } /* Modifier: `uk-panel-space` ========================================================================== */ @@ -1294,7 +1434,7 @@ iframe { top: -25px; left: 0; right: 0; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Large screen and bigger */ @media (min-width: 1220px) { @@ -1310,7 +1450,6 @@ iframe { ========================================================================== */ .uk-block { position: relative; - -moz-box-sizing: border-box; box-sizing: border-box; padding-top: 20px; padding-bottom: 20px; @@ -1368,7 +1507,7 @@ iframe { * Default */ .uk-block-default { - background: #ffffff; + background: #fff; } /* * Muted @@ -1386,11 +1525,11 @@ iframe { * Secondary */ .uk-block-secondary { - background: #222222; + background: #222; } /* - * Adjust padding between equal colored blocks - */ + * Adjust padding between equal colored blocks + */ .uk-block-default + .uk-block-default, .uk-block-muted + .uk-block-muted, .uk-block-primary + .uk-block-primary, @@ -1440,12 +1579,12 @@ iframe { .uk-article-meta { font-size: 12px; line-height: 18px; - color: #999999; + color: #999; } /* Sub-object `uk-article-lead` ========================================================================== */ .uk-article-lead { - color: #444444; + color: #444; font-size: 18px; line-height: 24px; font-weight: normal; @@ -1454,7 +1593,7 @@ iframe { ========================================================================== */ .uk-article-divider { margin-bottom: 25px; - border-color: #dddddd; + border-color: #ddd; } * + .uk-article-divider { margin-top: 25px; @@ -1497,7 +1636,7 @@ iframe { margin: 2px 0 0 0; font-size: 11px; line-height: 16px; - color: #999999; + color: #999; } /* Sub-object `uk-comment-body` ========================================================================== */ @@ -1654,7 +1793,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-side > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1664,35 +1803,35 @@ ul.uk-nav-sub { .uk-nav-side > li > a:hover, .uk-nav-side > li > a:focus { background: rgba(0, 0, 0, 0.05); - color: #444444; + color: #444; /* 2 */ outline: none; } /* Active */ .uk-nav-side > li.uk-active > a { background: #00a8e6; - color: #ffffff; + color: #fff; } /* * Sub-object: `uk-nav-header` */ .uk-nav-side .uk-nav-header { - color: #444444; + color: #444; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-side .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-side ul a { - color: #0077dd; + color: #07D; } .uk-nav-side ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-dropdown` ========================================================================== */ @@ -1700,7 +1839,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-dropdown > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1710,7 +1849,7 @@ ul.uk-nav-sub { .uk-nav-dropdown > li > a:hover, .uk-nav-dropdown > li > a:focus { background: #00a8e6; - color: #ffffff; + color: #fff; /* 2 */ outline: none; } @@ -1718,22 +1857,22 @@ ul.uk-nav-sub { * Sub-object: `uk-nav-header` */ .uk-nav-dropdown .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-dropdown .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-dropdown ul a { - color: #0077dd; + color: #07D; } .uk-nav-dropdown ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-navbar` ========================================================================== */ @@ -1741,7 +1880,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-navbar > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1751,7 +1890,7 @@ ul.uk-nav-sub { .uk-nav-navbar > li > a:hover, .uk-nav-navbar > li > a:focus { background: #00a8e6; - color: #ffffff; + color: #fff; /* 2 */ outline: none; } @@ -1759,22 +1898,22 @@ ul.uk-nav-sub { * Sub-object: `uk-nav-header` */ .uk-nav-navbar .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-navbar .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-navbar ul a { - color: #0077dd; + color: #07D; } .uk-nav-navbar ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-offcanvas` ========================================================================== */ @@ -1782,7 +1921,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-offcanvas > li > a { - color: #cccccc; + color: #ccc; padding: 10px 15px; } /* @@ -1795,7 +1934,7 @@ ul.uk-nav-sub { html:not(.uk-touch) .uk-nav-offcanvas > li > a:hover, html:not(.uk-touch) .uk-nav-offcanvas > li > a:focus { background: #404040; - color: #ffffff; + color: #fff; /* 2 */ outline: none; } @@ -1805,13 +1944,13 @@ html:not(.uk-touch) .uk-nav-offcanvas > li > a:focus { */ html .uk-nav.uk-nav-offcanvas > li.uk-active > a { background: #1a1a1a; - color: #ffffff; + color: #fff; } /* * Sub-object: `uk-nav-header` */ .uk-nav-offcanvas .uk-nav-header { - color: #777777; + color: #777; } /* * Sub-object: `uk-nav-divider` @@ -1824,17 +1963,17 @@ html .uk-nav.uk-nav-offcanvas > li.uk-active > a { * No hover on touch devices because it behaves buggy in fixed offcanvas */ .uk-nav-offcanvas ul a { - color: #cccccc; + color: #ccc; } html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { - color: #ffffff; + color: #fff; } /* ======================================================================== Component: Navbar ========================================================================== */ .uk-navbar { - background: #eeeeee; - color: #444444; + background: #eee; + color: #444; } /* * Micro clearfix @@ -1869,7 +2008,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-nav > li > a { display: block; - -moz-box-sizing: border-box; box-sizing: border-box; text-decoration: none; /* 1 */ @@ -1877,7 +2015,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { padding: 0 15px; line-height: 40px; /* 2 */ - color: #444444; + color: #444; font-size: 14px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; @@ -1896,19 +2034,19 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-navbar-nav > li > a:focus, .uk-navbar-nav > li.uk-open > a { background-color: #f5f5f5; - color: #444444; + color: #444; /* 3 */ outline: none; } /* OnClick */ .uk-navbar-nav > li > a:active { - background-color: #dddddd; - color: #444444; + background-color: #ddd; + color: #444; } /* Active */ .uk-navbar-nav > li.uk-active > a { background-color: #f5f5f5; - color: #444444; + color: #444; } /* Sub-objects: `uk-navbar-nav-subtitle` ========================================================================== */ @@ -1928,7 +2066,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-navbar-content, .uk-navbar-brand, .uk-navbar-toggle { - -moz-box-sizing: border-box; box-sizing: border-box; display: block; height: 40px; @@ -1958,16 +2095,16 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Link colors */ .uk-navbar-content > a:not([class]) { - color: #0077dd; + color: #07D; } .uk-navbar-content > a:not([class]):hover { - color: #005599; + color: #059; } /* Sub-objects: `uk-navbar-brand` ========================================================================== */ .uk-navbar-brand { font-size: 18px; - color: #444444; + color: #444; text-decoration: none; } /* @@ -1976,7 +2113,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-brand:hover, .uk-navbar-brand:focus { - color: #444444; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -1985,7 +2122,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-navbar-toggle { font-size: 18px; - color: #444444; + color: #444; text-decoration: none; } /* @@ -1994,7 +2131,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-toggle:hover, .uk-navbar-toggle:focus { - color: #444444; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -2086,7 +2223,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-subnav > * > * { display: inline-block; - color: #444444; + color: #444; } /* * Hover @@ -2094,14 +2231,14 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-subnav > * > :hover, .uk-subnav > * > :focus { - color: #0077dd; + color: #07D; text-decoration: none; } /* * Active */ .uk-subnav > .uk-active > * { - color: #0077dd; + color: #07D; } /* Modifier: 'subnav-line' ========================================================================== */ @@ -2113,7 +2250,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-subnav-line > :nth-child(n+2):before { margin-right: 10px; - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* Modifier: 'subnav-pill' ========================================================================== */ @@ -2127,8 +2264,8 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-subnav-pill > * > :hover, .uk-subnav-pill > * > :focus { - background: #eeeeee; - color: #444444; + background: #eee; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -2139,13 +2276,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-subnav-pill > .uk-active > * { background: #00a8e6; - color: #ffffff; + color: #fff; } /* Disabled state ========================================================================== */ .uk-subnav > .uk-disabled > * { background: none; - color: #999999; + color: #999; text-decoration: none; cursor: text; } @@ -2186,7 +2323,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Disabled */ .uk-breadcrumb > li:not(.uk-active) > span { - color: #999999; + color: #999; } /* ======================================================================== Component: Pagination @@ -2245,7 +2382,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { line-height: 20px; text-decoration: none; /* 1 */ - -moz-box-sizing: content-box; box-sizing: content-box; /* 2 */ text-align: center; @@ -2254,8 +2390,8 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Links */ .uk-pagination > li > a { - background: #eeeeee; - color: #444444; + background: #eee; + color: #444; } /* * Hover @@ -2265,28 +2401,28 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-pagination > li > a:hover, .uk-pagination > li > a:focus { background-color: #f5f5f5; - color: #444444; + color: #444; /* 2 */ outline: none; } /* OnClick */ .uk-pagination > li > a:active { - background-color: #dddddd; - color: #444444; + background-color: #ddd; + color: #444; } /* * Active */ .uk-pagination > .uk-active > span { background: #00a8e6; - color: #ffffff; + color: #fff; } /* * Disabled */ .uk-pagination > .uk-disabled > span { background-color: #f5f5f5; - color: #999999; + color: #999; } /* Previous and next navigation ========================================================================== */ @@ -2311,7 +2447,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { margin: 0; padding: 0; list-style: none; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } /* * Micro clearfix on the deepest container @@ -2339,7 +2475,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { padding: 8px 12px 8px 12px; border: 1px solid transparent; border-bottom-width: 0; - color: #0077dd; + color: #07D; text-decoration: none; } .uk-tab > li:nth-child(n+2) > a { @@ -2356,7 +2492,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-tab > li.uk-open > a { border-color: #f5f5f5; background: #f5f5f5; - color: #005599; + color: #059; /* 2 */ outline: none; } @@ -2368,14 +2504,14 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } /* Active */ .uk-tab > li.uk-active > a { - border-color: #dddddd; + border-color: #ddd; border-bottom-color: transparent; - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } /* Disabled */ .uk-tab > li.uk-disabled > a { - color: #999999; + color: #999; cursor: text; } .uk-tab > li.uk-disabled > a:hover, @@ -2409,11 +2545,11 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Modifier: 'tab-center' ========================================================================== */ .uk-tab-center { - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } .uk-tab-center-bottom { border-bottom: none; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .uk-tab-center:before, .uk-tab-center:after { @@ -2442,7 +2578,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Modifier: 'tab-bottom' ========================================================================== */ .uk-tab-bottom { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; border-bottom: none; } .uk-tab-bottom > li { @@ -2465,7 +2601,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-tab-bottom > li.uk-active > a { border-top-color: transparent; - border-bottom-color: #dddddd; + border-bottom-color: #ddd; } /* Modifier: 'tab-grid' ========================================================================== */ @@ -2485,7 +2621,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { left: 5px; right: 0; bottom: -1px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; /* 1 */ z-index: -1; } @@ -2530,13 +2666,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-tab-left > li.uk-active > a, .uk-tab-right > li.uk-active > a { - border-color: #dddddd; + border-color: #ddd; } /* * Modifier: 'tab-left' */ .uk-tab-left { - border-right: 1px solid #dddddd; + border-right: 1px solid #ddd; } .uk-tab-left > li { margin-right: -1px; @@ -2559,7 +2695,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Modifier: 'tab-right' */ .uk-tab-right { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } .uk-tab-right > li { margin-left: -1px; @@ -2632,7 +2768,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-thumbnav > * > * { display: block; - background: #ffffff; + background: #fff; } .uk-thumbnav > * > * > img { opacity: 0.7; @@ -2689,7 +2825,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-list-line > li:nth-child(n+2) { margin-top: 5px; padding-top: 5px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Modifier: `uk-list-striped` ========================================================================== */ @@ -2734,10 +2870,10 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-description-list-line > dt:nth-child(n+2) { margin-top: 5px; padding-top: 5px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .uk-description-list-line > dd { - color: #999999; + color: #999; } /* ======================================================================== Component: Table @@ -2788,13 +2924,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-table caption { text-align: left; - color: #999999; + color: #999; } /* * Active State */ .uk-table tbody tr.uk-active { - background: #eeeeee; + background: #EEE; } /* Sub-modifier: `uk-table-middle` ========================================================================== */ @@ -2815,7 +2951,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Modifier: `uk-table-hover` ========================================================================== */ .uk-table-hover tbody tr:hover { - background: #eeeeee; + background: #EEE; } /* ======================================================================== Component: Form @@ -2834,7 +2970,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form select, .uk-form textarea { /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 2 */ margin: 0; @@ -2990,11 +3125,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* 3 */ padding: 4px 6px; /* 4 */ - border: 1px solid #dddddd; - background: #ffffff; - color: #444444; - -webkit-transition: all linear 0.2s; - transition: all linear 0.2s; + border: 1px solid #ddd; + background: #fff; + color: #444; + -webkit-transition: all 0.2s linear; + -webkit-transition-property: border, background, color, box-shadow, padding; + transition: all 0.2s linear; + transition-property: border, background, color, box-shadow, padding; } .uk-form select:focus, .uk-form textarea:focus, @@ -3016,7 +3153,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { border-color: #99baca; outline: 0; background: #f5fbfe; - color: #444444; + color: #444; } .uk-form select:disabled, .uk-form textarea:disabled, @@ -3035,30 +3172,30 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form input[type="search"]:disabled, .uk-form input[type="tel"]:disabled, .uk-form input[type="color"]:disabled { - border-color: #dddddd; + border-color: #ddd; background-color: #f5f5f5; - color: #999999; + color: #999; } /* * Placeholder */ .uk-form :-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-form ::-moz-placeholder { - color: #999999; + color: #999; } .uk-form ::-webkit-input-placeholder { - color: #999999; + color: #999; } .uk-form :disabled:-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-form :disabled::-moz-placeholder { - color: #999999; + color: #999; } .uk-form :disabled::-webkit-input-placeholder { - color: #999999; + color: #999; } /* * Legend @@ -3088,7 +3225,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form legend:after { content: ""; display: block; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; /* 1 */ width: 100%; } @@ -3150,7 +3287,7 @@ input:not([type]).uk-form-large { background: none !important; } .uk-form-blank:focus { - border-color: #dddddd !important; + border-color: #ddd !important; } /* Size sub-modifiers ========================================================================== */ @@ -3281,7 +3418,7 @@ select.uk-form-width-mini { width: 30px; margin-top: -7px; font-size: 14px; - color: #999999; + color: #999; text-align: center; /* 1 */ pointer-events: none; @@ -3332,15 +3469,14 @@ select.uk-form-width-mini { overflow: visible; /* 5 */ font: inherit; - color: #444444; + color: #444; /* 6 */ text-transform: none; /* 7 */ display: inline-block; - -moz-box-sizing: border-box; box-sizing: border-box; padding: 0 12px; - background: #eeeeee; + background: #eee; vertical-align: middle; /* 8 */ line-height: 30px; @@ -3364,7 +3500,7 @@ select.uk-form-width-mini { .uk-button:hover, .uk-button:focus { background-color: #f5f5f5; - color: #444444; + color: #444; /* 2 */ outline: none; /* 3 */ @@ -3373,8 +3509,8 @@ select.uk-form-width-mini { /* Active */ .uk-button:active, .uk-button.uk-active { - background-color: #dddddd; - color: #444444; + background-color: #ddd; + color: #444; } /* Color modifiers ========================================================================== */ @@ -3383,57 +3519,57 @@ select.uk-form-width-mini { */ .uk-button-primary { background-color: #00a8e6; - color: #ffffff; + color: #fff; } /* Hover */ .uk-button-primary:hover, .uk-button-primary:focus { background-color: #35b3ee; - color: #ffffff; + color: #fff; } /* Active */ .uk-button-primary:active, .uk-button-primary.uk-active { background-color: #0091ca; - color: #ffffff; + color: #fff; } /* * Modifier: `uk-button-success` */ .uk-button-success { background-color: #8cc14c; - color: #ffffff; + color: #fff; } /* Hover */ .uk-button-success:hover, .uk-button-success:focus { background-color: #8ec73b; - color: #ffffff; + color: #fff; } /* Active */ .uk-button-success:active, .uk-button-success.uk-active { background-color: #72ae41; - color: #ffffff; + color: #fff; } /* * Modifier: `uk-button-danger` */ .uk-button-danger { background-color: #da314b; - color: #ffffff; + color: #fff; } /* Hover */ .uk-button-danger:hover, .uk-button-danger:focus { background-color: #e4354f; - color: #ffffff; + color: #fff; } /* Active */ .uk-button-danger:active, .uk-button-danger.uk-active { background-color: #c91032; - color: #ffffff; + color: #fff; } /* Disabled state * Overrides also the color modifiers @@ -3441,7 +3577,7 @@ select.uk-form-width-mini { /* Equal for all button types */ .uk-button:disabled { background-color: #f5f5f5; - color: #999999; + color: #999; } /* Modifier: `uk-button-link` ========================================================================== */ @@ -3457,17 +3593,17 @@ select.uk-form-width-mini { } /* Color */ .uk-button-link { - color: #0077dd; + color: #07D; } .uk-button-link:hover, .uk-button-link:focus, .uk-button-link:active, .uk-button-link.uk-active { - color: #005599; + color: #059; text-decoration: underline; } .uk-button-link:disabled { - color: #999999; + color: #999; } /* Focus */ .uk-button-link:focus { @@ -3538,8 +3674,7 @@ select.uk-form-width-mini { ========================================================================== */ @font-face { font-family: 'FontAwesome'; - src: url("../fonts/fontawesome-webfont.eot"); - src: url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2") format('woff2'), url("../fonts/fontawesome-webfont.woff") format("woff"), url("../fonts/fontawesome-webfont.ttf") format("truetype"); + src: url("../fonts/fontawesome-webfont.woff2") format('woff2'), url("../fonts/fontawesome-webfont.woff") format("woff"), url("../fonts/fontawesome-webfont.ttf") format("truetype"); font-weight: normal; font-style: normal; } @@ -3599,26 +3734,25 @@ select.uk-form-width-mini { /* Modifier: `uk-icon-hover` ========================================================================== */ .uk-icon-hover { - color: #999999; + color: #999; } /* * Hover */ .uk-icon-hover:hover { - color: #444444; + color: #444; } /* Modifier: `uk-icon-button` ========================================================================== */ .uk-icon-button { - -moz-box-sizing: border-box; box-sizing: border-box; display: inline-block; width: 35px; height: 35px; border-radius: 100%; - background: #eeeeee; + background: #eee; line-height: 35px; - color: #444444; + color: #444; font-size: 18px; text-align: center; } @@ -3630,14 +3764,14 @@ select.uk-form-width-mini { .uk-icon-button:hover, .uk-icon-button:focus { background-color: #f5f5f5; - color: #444444; + color: #444; /* 2 */ outline: none; } /* Active */ .uk-icon-button:active { - background-color: #dddddd; - color: #444444; + background-color: #ddd; + color: #444; } /* Icon mapping ========================================================================== */ @@ -5272,6 +5406,530 @@ select.uk-form-width-mini { .uk-icon-medium-logo:before { content: "\f23a"; } +.uk-icon-500px:before { + content: "\f26e"; +} +.uk-icon-amazon:before { + content: "\f270"; +} +.uk-icon-balance-scale:before { + content: "\f24e"; +} +.uk-icon-battery-empty:before, +.uk-icon-battery-0:before { + content: "\f244"; +} +.uk-icon-battery-quarter:before, +.uk-icon-battery-1:before { + content: "\f243"; +} +.uk-icon-battery-half:before, +.uk-icon-battery-2:before { + content: "\f242"; +} +.uk-icon-battery-three-quarters:before, +.uk-icon-battery-3:before { + content: "\f241"; +} +.uk-icon-battery-full:before, +.uk-icon-battery-4:before { + content: "\f240"; +} +.uk-icon-black-tie:before { + content: "\f27e"; +} +.uk-icon-calendar-check-o:before { + content: "\f274"; +} +.uk-icon-calendar-minus-o:before { + content: "\f272"; +} +.uk-icon-calendar-plus-o:before { + content: "\f271"; +} +.uk-icon-calendar-times-o:before { + content: "\f273"; +} +.uk-icon-cc-diners-club:before { + content: "\f24c"; +} +.uk-icon-cc-jcb:before { + content: "\f24b"; +} +.uk-icon-chrome:before { + content: "\f268"; +} +.uk-icon-clone:before { + content: "\f24d"; +} +.uk-icon-commenting:before { + content: "\f27a"; +} +.uk-icon-commenting-o:before { + content: "\f27b"; +} +.uk-icon-contao:before { + content: "\f26d"; +} +.uk-icon-creative-commons:before { + content: "\f25e"; +} +.uk-icon-expeditedssl:before { + content: "\f23e"; +} +.uk-icon-firefox:before { + content: "\f269"; +} +.uk-icon-fonticons:before { + content: "\f280"; +} +.uk-icon-get-pocket:before { + content: "\f265"; +} +.uk-icon-gg:before { + content: "\f260"; +} +.uk-icon-gg-circle:before { + content: "\f261"; +} +.uk-icon-hand-lizard-o:before { + content: "\f258"; +} +.uk-icon-hand-stop-o:before, +.uk-icon-hand-paper-o:before { + content: "\f256"; +} +.uk-icon-hand-peace-o:before { + content: "\f25b"; +} +.uk-icon-hand-pointer-o:before { + content: "\f25a"; +} +.uk-icon-hand-grab-o:before, +.uk-icon-hand-rock-o:before { + content: "\f255"; +} +.uk-icon-hand-scissors-o:before { + content: "\f257"; +} +.uk-icon-hand-spock-o:before { + content: "\f259"; +} +.uk-icon-hourglass:before { + content: "\f254"; +} +.uk-icon-hourglass-o:before { + content: "\f250"; +} +.uk-icon-hourglass-1:before, +.uk-icon-hourglass-start:before { + content: "\f251"; +} +.uk-icon-hourglass-2:before, +.uk-icon-hourglass-half:before { + content: "\f252"; +} +.uk-icon-hourglass-3:before, +.uk-icon-hourglass-end:before { + content: "\f253"; +} +.uk-icon-houzz:before { + content: "\f27c"; +} +.uk-icon-i-cursor:before { + content: "\f246"; +} +.uk-icon-industry:before { + content: "\f275"; +} +.uk-icon-internet-explorer:before { + content: "\f26b"; +} +.uk-icon-map:before { + content: "\f279"; +} +.uk-icon-map-o:before { + content: "\f278"; +} +.uk-icon-map-pin:before { + content: "\f276"; +} +.uk-icon-map-signs:before { + content: "\f277"; +} +.uk-icon-mouse-pointer:before { + content: "\f245"; +} +.uk-icon-object-group:before { + content: "\f247"; +} +.uk-icon-object-ungroup:before { + content: "\f248"; +} +.uk-icon-odnoklassniki:before { + content: "\f263"; +} +.uk-icon-odnoklassniki-square:before { + content: "\f264"; +} +.uk-icon-opencart:before { + content: "\f23d"; +} +.uk-icon-opera:before { + content: "\f26a"; +} +.uk-icon-optin-monster:before { + content: "\f23c"; +} +.uk-icon-registered:before { + content: "\f25d"; +} +.uk-icon-safari:before { + content: "\f267"; +} +.uk-icon-sticky-note:before { + content: "\f249"; +} +.uk-icon-sticky-note-o:before { + content: "\f24a"; +} +.uk-icon-tv:before, +.uk-icon-television:before { + content: "\f26c"; +} +.uk-icon-trademark:before { + content: "\f25c"; +} +.uk-icon-tripadvisor:before { + content: "\f262"; +} +.uk-icon-vimeo:before { + content: "\f27d"; +} +.uk-icon-wikipedia-w:before { + content: "\f266"; +} +.uk-icon-yc:before, +.uk-icon-y-combinator:before { + content: "\f23b"; +} +.uk-icon-yc-square:before, +.uk-icon-y-combinator-square:before { + content: "\f1d4"; +} +.uk-icon-bluetooth:before { + content: "\f293"; +} +.uk-icon-bluetooth-b:before { + content: "\f294"; +} +.uk-icon-codiepie:before { + content: "\f284"; +} +.uk-icon-credit-card-alt:before { + content: "\f283"; +} +.uk-icon-edge:before { + content: "\f282"; +} +.uk-icon-fort-awesome:before { + content: "\f286"; +} +.uk-icon-hashtag:before { + content: "\f292"; +} +.uk-icon-mixcloud:before { + content: "\f289"; +} +.uk-icon-modx:before { + content: "\f285"; +} +.uk-icon-pause-circle:before { + content: "\f28b"; +} +.uk-icon-pause-circle-o:before { + content: "\f28c"; +} +.uk-icon-percent:before { + content: "\f295"; +} +.uk-icon-product-hunt:before { + content: "\f288"; +} +.uk-icon-reddit-alien:before { + content: "\f281"; +} +.uk-icon-scribd:before { + content: "\f28a"; +} +.uk-icon-shopping-bag:before { + content: "\f290"; +} +.uk-icon-shopping-basket:before { + content: "\f291"; +} +.uk-icon-stop-circle:before { + content: "\f28d"; +} +.uk-icon-stop-circle-o:before { + content: "\f28e"; +} +.uk-icon-usb:before { + content: "\f287"; +} +.uk-icon-american-sign-language-interpreting:before, +.uk-icon-asl-interpreting:before { + content: "\f2a3"; +} +.uk-icon-assistive-listening-systems:before { + content: "\f2a2"; +} +.uk-icon-audio-description:before { + content: "\f29e"; +} +.uk-icon-blind:before { + content: "\f29d"; +} +.uk-icon-braille:before { + content: "\f2a1"; +} +.uk-icon-deaf:before, +.uk-icon-deafness:before { + content: "\f2a4"; +} +.uk-icon-envira:before { + content: "\f299"; +} +.uk-icon-font-awesome:before, +.uk-icon-fa:before { + content: "\f2b4"; +} +.uk-icon-first-order:before { + content: "\f2b0"; +} +.uk-icon-gitlab:before { + content: "\f296"; +} +.uk-icon-glide:before { + content: "\f2a5"; +} +.uk-icon-glide-g:before { + content: "\f2a6"; +} +.uk-icon-hard-of-hearing:before { + content: "\f2a4"; +} +.uk-icon-low-vision:before { + content: "\f2a8"; +} +.uk-icon-question-circle-o:before { + content: "\f29c"; +} +.uk-icon-sign-language:before, +.uk-icon-signing:before { + content: "\f2a7"; +} +.uk-icon-snapchat:before { + content: "\f2ab"; +} +.uk-icon-snapchat-ghost:before { + content: "\f2ac"; +} +.uk-icon-snapchat-square:before { + content: "\f2ad"; +} +.uk-icon-themeisle:before { + content: "\f2b2"; +} +.uk-icon-universal-access:before { + content: "\f29a"; +} +.uk-icon-viadeo:before { + content: "\f2a9"; +} +.uk-icon-viadeo-square:before { + content: "\f2aa"; +} +.uk-icon-volume-control-phone:before { + content: "\f2a0"; +} +.uk-icon-wheelchair-alt:before { + content: "\f29b"; +} +.uk-icon-wpbeginner:before { + content: "\f297"; +} +.uk-icon-wpforms:before { + content: "\f298"; +} +.uk-icon-yoast:before { + content: "\f2b1"; +} +.uk-icon-adress-book:before { + content: "\f2b9"; +} +.uk-icon-adress-book-o:before { + content: "\f2ba"; +} +.uk-icon-adress-card:before { + content: "\f2bb"; +} +.uk-icon-adress-card-o:before { + content: "\f2bc"; +} +.uk-icon-bandcamp:before { + content: "\f2d5"; +} +.uk-icon-bath:before { + content: "\f2cd"; +} +.uk-icon-bathub:before { + content: "\f2cd"; +} +.uk-icon-drivers-license:before { + content: "\f2c2"; +} +.uk-icon-drivers-license-o:before { + content: "\f2c3"; +} +.uk-icon-eercast:before { + content: "\f2da"; +} +.uk-icon-envelope-open:before { + content: "\f2b6"; +} +.uk-icon-envelope-open-o:before { + content: "\f2b7"; +} +.uk-icon-etsy:before { + content: "\f2d7"; +} +.uk-icon-free-code-camp:before { + content: "\f2c5"; +} +.uk-icon-grav:before { + content: "\f2d6"; +} +.uk-icon-handshake-o:before { + content: "\f2b5"; +} +.uk-icon-id-badge:before { + content: "\f2c1"; +} +.uk-icon-id-card:before { + content: "\f2c2"; +} +.uk-icon-id-card-o:before { + content: "\f2c3"; +} +.uk-icon-imdb:before { + content: "\f2d8"; +} +.uk-icon-linode:before { + content: "\f2b8"; +} +.uk-icon-meetup:before { + content: "\f2e0"; +} +.uk-icon-microchip:before { + content: "\f2db"; +} +.uk-icon-podcast:before { + content: "\f2ce"; +} +.uk-icon-quora:before { + content: "\f2c4"; +} +.uk-icon-ravelry:before { + content: "\f2d9"; +} +.uk-icon-s15:before { + content: "\f2cd"; +} +.uk-icon-shower:before { + content: "\f2cc"; +} +.uk-icon-snowflake-o:before { + content: "\f2dc"; +} +.uk-icon-superpowers:before { + content: "\f2dd"; +} +.uk-icon-telegram:before { + content: "\f2c6"; +} +.uk-icon-thermometer:before { + content: "\f2c7"; +} +.uk-icon-thermometer-0:before { + content: "\f2cb"; +} +.uk-icon-thermometer-1:before { + content: "\f2ca"; +} +.uk-icon-thermometer-2:before { + content: "\f2c9"; +} +.uk-icon-thermometer-3:before { + content: "\f2c8"; +} +.uk-icon-thermometer-4:before { + content: "\f2c7"; +} +.uk-icon-thermometer-empty:before { + content: "\f2cb"; +} +.uk-icon-thermometer-full:before { + content: "\f2c7"; +} +.uk-icon-thermometer-half:before { + content: "\f2c9"; +} +.uk-icon-thermometer-quarter:before { + content: "\f2ca"; +} +.uk-icon-thermometer-three-quarters:before { + content: "\f2c8"; +} +.uk-icon-times-rectangle:before { + content: "\f2d3"; +} +.uk-icon-times-rectangle-o:before { + content: "\f2d4"; +} +.uk-icon-user-circle:before { + content: "\f2bd"; +} +.uk-icon-user-circle-o:before { + content: "\f2be"; +} +.uk-icon-user-o:before { + content: "\f2c0"; +} +.uk-icon-vcard:before { + content: "\f2bb"; +} +.uk-icon-vcard-o:before { + content: "\f2bc"; +} +.uk-icon-widow-close:before { + content: "\f2d3"; +} +.uk-icon-widow-close-o:before { + content: "\f2d4"; +} +.uk-icon-window-maximize:before { + content: "\f2d0"; +} +.uk-icon-window-minimize:before { + content: "\f2d1"; +} +.uk-icon-window-restore:before { + content: "\f2d2"; +} +.uk-icon-wpexplorer:before { + content: "\f2de"; +} /* ======================================================================== Component: Close ========================================================================== */ @@ -5311,7 +5969,6 @@ select.uk-form-width-mini { background: transparent; /* 8 */ display: inline-block; - -moz-box-sizing: content-box; box-sizing: content-box; width: 20px; line-height: 20px; @@ -5346,7 +6003,7 @@ select.uk-form-width-mini { .uk-close-alt { padding: 2px; border-radius: 50%; - background: #eeeeee; + background: #eee; opacity: 1; } /* Hover */ @@ -5372,7 +6029,7 @@ select.uk-form-width-mini { font-size: 10px; font-weight: bold; line-height: 14px; - color: #ffffff; + color: #fff; text-align: center; vertical-align: middle; text-transform: none; @@ -5381,12 +6038,11 @@ select.uk-form-width-mini { * Keep color when badge is a link */ a.uk-badge:hover { - color: #ffffff; + color: #fff; } /* Modifier: `uk-badge-notification`; ========================================================================== */ .uk-badge-notification { - -moz-box-sizing: border-box; box-sizing: border-box; min-width: 18px; border-radius: 500px; @@ -5498,14 +6154,13 @@ a.uk-badge:hover { /* 2 */ max-width: 100%; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 3 */ margin: 0; /* 4 */ padding: 4px; - border: 1px solid #dddddd; - background: #ffffff; + border: 1px solid #ddd; + background: #fff; } /* * Hover state for `a` elements @@ -5516,7 +6171,7 @@ a.uk-badge:hover { a.uk-thumbnail:hover, a.uk-thumbnail:focus { border-color: #aaaaaa; - background-color: #ffffff; + background-color: #fff; /* 2 */ text-decoration: none; /* 3 */ @@ -5527,7 +6182,7 @@ a.uk-thumbnail:focus { .uk-thumbnail-caption { padding-top: 4px; text-align: center; - color: #444444; + color: #444; } /* Sizes ========================================================================== */ @@ -5600,7 +6255,7 @@ a.uk-thumbnail:focus { right: 0; /* 2 */ padding: 20px; - color: #ffffff; + color: #fff; } /* * Remove margin from the last-child @@ -5677,7 +6332,7 @@ a.uk-thumbnail:focus { line-height: 1; font-family: FontAwesome; text-align: center; - color: #ffffff; + color: #fff; } /* Transitions ========================================================================== */ @@ -5689,7 +6344,7 @@ a.uk-thumbnail:focus { [class*='uk-overlay-slide'] { transition-duration: 0.3s; transition-timing-function: ease-out; - transition-property: opacity transform filter; + transition-property: opacity, transform, filter; } .uk-overlay-active .uk-overlay-fade, .uk-overlay-active .uk-overlay-scale, @@ -5704,6 +6359,7 @@ a.uk-thumbnail:focus { opacity: 0.7; } .uk-overlay-hover:hover .uk-overlay-fade, +.uk-overlay-hover.uk-hover .uk-overlay-fade, .uk-overlay-active .uk-active > .uk-overlay-fade { opacity: 1; } @@ -5715,6 +6371,7 @@ a.uk-thumbnail:focus { transform: scale(1); } .uk-overlay-hover:hover .uk-overlay-scale, +.uk-overlay-hover.uk-hover .uk-overlay-scale, .uk-overlay-active .uk-active > .uk-overlay-scale { -webkit-transform: scale(1.1); transform: scale(1.1); @@ -5727,6 +6384,7 @@ a.uk-thumbnail:focus { transform: scale(1) rotate(0deg); } .uk-overlay-hover:hover .uk-overlay-spin, +.uk-overlay-hover.uk-hover .uk-overlay-spin, .uk-overlay-active .uk-active > .uk-overlay-spin { -webkit-transform: scale(1.1) rotate(3deg); transform: scale(1.1) rotate(3deg); @@ -5739,6 +6397,7 @@ a.uk-thumbnail:focus { filter: grayscale(100%); } .uk-overlay-hover:hover .uk-overlay-grayscale, +.uk-overlay-hover.uk-hover .uk-overlay-grayscale, .uk-overlay-active .uk-active > .uk-overlay-grayscale { -webkit-filter: grayscale(0%); filter: grayscale(0%); @@ -5771,6 +6430,7 @@ a.uk-thumbnail:focus { } /* Hover */ .uk-overlay-hover:hover [class*='uk-overlay-slide'], +.uk-overlay-hover.uk-hover [class*='uk-overlay-slide'], .uk-overlay-active .uk-active > [class*='uk-overlay-slide'] { opacity: 1; -webkit-transform: translateX(0) translateY(0); @@ -5826,7 +6486,7 @@ a.uk-thumbnail:focus { line-height: 1; font-family: FontAwesome; text-align: center; - color: #ffffff; + color: #fff; } /* DEPRECATED * Sub-object `uk-overlay-area-content` @@ -5856,7 +6516,6 @@ a.uk-thumbnail:focus { .uk-overlay-area-content { /* 1 */ display: inline-block; - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; vertical-align: middle; @@ -5866,7 +6525,7 @@ a.uk-thumbnail:focus { text-align: center; /* 4 */ padding: 0 15px; - color: #ffffff; + color: #fff; } /* * Remove margin from the last-child @@ -5898,7 +6557,7 @@ a.uk-thumbnail:focus { /* 2 */ padding: 15px; background: rgba(0, 0, 0, 0.5); - color: #ffffff; + color: #fff; /* 3 */ opacity: 0; -webkit-transition: opacity 0.15s linear; @@ -5916,6 +6575,153 @@ a.uk-thumbnail:focus { .uk-overlay-toggle.uk-hover .uk-overlay-caption { opacity: 1; } +/* ======================================================================== + Component: Column + ========================================================================== */ +[class*='uk-column-'] { + -webkit-column-gap: 25px; + -moz-column-gap: 25px; + column-gap: 25px; +} +/* Width modifiers + ========================================================================== */ +.uk-column-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; +} +.uk-column-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; +} +.uk-column-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; +} +.uk-column-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; +} +.uk-column-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; +} +/* Phone landscape and bigger */ +@media (min-width: 480px) { + .uk-column-small-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-small-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-small-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-small-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-small-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Tablet and bigger */ +@media (min-width: 768px) { + .uk-column-medium-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-medium-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-medium-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-medium-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-medium-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Desktop and bigger */ +@media (min-width: 960px) { + .uk-column-large-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-large-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-large-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-large-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-large-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Large screen and bigger */ +@media (min-width: 1220px) { + .uk-column-xlarge-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-xlarge-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-xlarge-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-xlarge-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-xlarge-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} /* ======================================================================== Component: Animation ========================================================================== */ @@ -6475,36 +7281,43 @@ a.uk-thumbnail:focus { * 1. Hide by default * 2. Set position * 3. Box-sizing is needed for `uk-dropdown-justify` - * 4. Set style - * 5. Reset button group whitespace hack + * 4. Set width */ -.uk-dropdown { +.uk-dropdown, +.uk-dropdown-blank { /* 1 */ display: none; /* 2 */ position: absolute; - top: 100%; - left: 0; z-index: 1020; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 4 */ width: 200px; - margin-top: 5px; +} +/* + * Dropdown style + * 1. Reset button group whitespace hack + */ +.uk-dropdown { padding: 15px; background: #f5f5f5; - color: #444444; - /* 5 */ + color: #444; + /* 1 */ font-size: 1rem; vertical-align: top; } +/* Focus */ +.uk-dropdown:focus { + outline: none; +} /* * 1. Show dropdown * 2. Set animation * 3. Needed for scale animation */ -.uk-open > .uk-dropdown { +.uk-open > .uk-dropdown, +.uk-open > .uk-dropdown-blank { /* 1 */ display: block; /* 2 */ @@ -6517,20 +7330,19 @@ a.uk-thumbnail:focus { /* Alignment modifiers ========================================================================== */ /* - * Modifier `uk-dropdown-flip` + * Modifier */ -.uk-dropdown-flip { - left: auto; - right: 0; +.uk-dropdown-top { + margin-top: -5px; } -/* - * Modifier `uk-dropdown-up` - */ -.uk-dropdown-up { - top: auto; - bottom: 100%; - margin-top: auto; - margin-bottom: 5px; +.uk-dropdown-bottom { + margin-top: 5px; +} +.uk-dropdown-left { + margin-left: -5px; +} +.uk-dropdown-right { + margin-left: 5px; } /* Nav in dropdown ========================================================================== */ @@ -6570,7 +7382,7 @@ a.uk-thumbnail:focus { * Column divider */ .uk-dropdown:not(.uk-dropdown-stack) > .uk-dropdown-grid > [class*='uk-width-']:nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* * Width multiplier for dropdown columns @@ -6634,7 +7446,7 @@ a.uk-thumbnail:focus { .uk-dropdown-navbar { margin-top: 0; background: #f5f5f5; - color: #444444; + color: #444; } .uk-open > .uk-dropdown-navbar { -webkit-animation: uk-slide-top-fixed 0.2s ease-in-out; @@ -6649,6 +7461,8 @@ a.uk-thumbnail:focus { overflow-y: auto; max-height: 200px; } +/* Sub-object: `uk-dropdown-overlay` + ========================================================================== */ /* ======================================================================== Component: Modal ========================================================================== */ @@ -6712,7 +7526,6 @@ a.uk-thumbnail:focus { /* 1 */ position: relative; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; margin: 50px auto; padding: 20px; @@ -6720,7 +7533,7 @@ a.uk-thumbnail:focus { max-width: 100%; max-width: calc(100% - 20px); /* 3 */ - background: #ffffff; + background: #fff; /* 4 */ opacity: 0; -webkit-transform: translateY(-100px); @@ -6772,6 +7585,7 @@ a.uk-thumbnail:focus { padding: 0; max-width: 95%; max-width: calc(100% - 30px); + min-height: 50px; } /* * Close button @@ -6790,6 +7604,27 @@ a.uk-thumbnail:focus { right: -7px; } } +/* Modifier: `uk-modal-dialog-blank` + ========================================================================== */ +.uk-modal-dialog-blank { + margin: 0; + padding: 0; + width: 100%; + max-width: 100%; + -webkit-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} +/* +* Close button +*/ +.uk-modal-dialog-blank > .uk-close:first-child { + position: absolute; + top: 20px; + right: 20px; + z-index: 1; + margin: 0; + float: none; +} /* Modifier: `uk-modal-dialog-large` ========================================================================== */ /* Tablet and bigger */ @@ -6827,7 +7662,7 @@ a.uk-thumbnail:focus { right: 0; bottom: -20px; margin-bottom: -10px; - color: #ffffff; + color: #fff; text-align: center; overflow: hidden; text-overflow: ellipsis; @@ -6846,6 +7681,7 @@ a.uk-thumbnail:focus { } .uk-modal-spinner:after { content: "\f110"; + display: block; font-family: FontAwesome; -webkit-animation: uk-rotate 2s infinite linear; animation: uk-rotate 2s infinite linear; @@ -6884,6 +7720,7 @@ a.uk-thumbnail:focus { * Prepares the whole HTML page to slide-out * 1. Fix the main page and disallow scrolling * 2. Side-out transition + * 3. Needed for the transition to work instead of just letting it pop to the side */ .uk-offcanvas-page { /* 1 */ @@ -6891,6 +7728,8 @@ a.uk-thumbnail:focus { /* 2 */ -webkit-transition: margin-left 0.3s ease-in-out; transition: margin-left 0.3s ease-in-out; + /* 3 */ + margin-left: 0; } /* Sub-object `uk-offcanvas-bar` ========================================================================== */ @@ -6900,7 +7739,7 @@ a.uk-thumbnail:focus { * 2. Size and style * 3. Allow scrolling * 4. Side-out transition - * 5. Deavtivate scroll chaining in IE11 + * 5. Deactivate scroll chaining in IE11 */ .uk-offcanvas-bar { /* 1 */ @@ -6914,7 +7753,7 @@ a.uk-thumbnail:focus { /* 2 */ width: 270px; max-width: 100%; - background: #333333; + background: #333; /* 3 */ overflow-y: auto; -webkit-overflow-scrolling: touch; @@ -6936,20 +7775,48 @@ a.uk-thumbnail:focus { -webkit-transform: translateX(100%); transform: translateX(100%); } +/* Offcanvase modes + ========================================================================== */ +.uk-offcanvas-bar[mode='none'] { + -webkit-transition: none; + transition: none; +} +.uk-offcanvas-bar[mode='reveal'] { + -webkit-transform: translateX(0%); + transform: translateX(0%); + clip: rect(0, 0, 100vh, 0); + -webkit-transition: -webkit-transform 0.3s ease-in-out, clip 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, clip 0.3s ease-in-out; +} +.uk-offcanvas-bar-flip[mode='reveal'] { + clip: none; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} +.uk-offcanvas-bar-flip[mode='reveal'] > * { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + -webkit-transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; +} +.uk-offcanvas.uk-active .uk-offcanvas-bar-flip[mode='reveal'].uk-offcanvas-bar-show > * { + -webkit-transform: translateX(0%); + transform: translateX(0%); +} /* Panel in offcanvas ========================================================================== */ .uk-offcanvas .uk-panel { margin: 20px 15px; - color: #777777; + color: #777; } .uk-offcanvas .uk-panel-title { - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-panel a:not([class]) { - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-panel a:not([class]):hover { - color: #ffffff; + color: #fff; } /* ======================================================================== Component: Switcher @@ -6992,7 +7859,7 @@ a.uk-thumbnail:focus { /* Color modifiers ========================================================================== */ .uk-text-muted { - color: #999999 !important; + color: #999 !important; } .uk-text-primary { color: #2d7091 !important; @@ -7007,7 +7874,7 @@ a.uk-thumbnail:focus { color: #d85030 !important; } .uk-text-contrast { - color: #ffffff !important; + color: #fff !important; } /* Alignment modifiers ========================================================================== */ @@ -7076,13 +7943,23 @@ a.uk-thumbnail:focus { -moz-hyphens: auto; hyphens: auto; } +/* Transform modifiers + ========================================================================== */ +.uk-text-capitalize { + text-transform: capitalize !important; +} +.uk-text-lowercase { + text-transform: lowercase !important; +} +.uk-text-uppercase { + text-transform: uppercase !important; +} /* ======================================================================== Component: Utility ========================================================================== */ /* Container ========================================================================== */ .uk-container { - -moz-box-sizing: border-box; box-sizing: border-box; max-width: 980px; padding: 0 25px; @@ -7176,12 +8053,10 @@ a.uk-thumbnail:focus { @media (min-width: 768px) { .uk-align-medium-left { margin-right: 15px; - margin-bottom: 15px; float: left; } .uk-align-medium-right { margin-left: 15px; - margin-bottom: 15px; float: right; } } @@ -7229,7 +8104,6 @@ a.uk-thumbnail:focus { * More robust if padding and border are used */ [class*='uk-height'] { - -moz-box-sizing: border-box; box-sizing: border-box; } /* @@ -7253,7 +8127,6 @@ a.uk-thumbnail:focus { */ .uk-responsive-width, .uk-responsive-height { - -moz-box-sizing: border-box; box-sizing: border-box; } /* @@ -7393,11 +8266,11 @@ a.uk-thumbnail:focus { */ .uk-link-muted, .uk-link-muted a { - color: #444444; + color: #444; } .uk-link-muted:hover, .uk-link-muted a:hover { - color: #444444; + color: #444; } /* * Reset link style @@ -7426,11 +8299,10 @@ a.uk-thumbnail:focus { * Box with scrolling enabled */ .uk-scrollable-box { - -moz-box-sizing: border-box; box-sizing: border-box; height: 170px; padding: 10px; - border: 1px solid #dddddd; + border: 1px solid #ddd; overflow: auto; -webkit-overflow-scrolling: touch; resize: both; @@ -7460,13 +8332,16 @@ a.uk-thumbnail:focus { [class*='uk-position-bottom'] { position: absolute !important; } +/* Don't use `width: 100%` because it is wrong if the parent has padding. */ .uk-position-top { top: 0; - width: 100%; + left: 0; + right: 0; } .uk-position-bottom { bottom: 0; - width: 100%; + left: 0; + right: 0; } .uk-position-top-left { top: 0; @@ -7510,6 +8385,7 @@ a.uk-thumbnail:focus { ========================================================================== */ /* * Display + * 1. Required if child is a responsive image */ .uk-display-block { display: block !important; @@ -7519,6 +8395,8 @@ a.uk-thumbnail:focus { } .uk-display-inline-block { display: inline-block !important; + /* 1 */ + max-width: 100%; } /* * Visibility @@ -7820,7 +8698,8 @@ a.uk-thumbnail:focus { Component: Contrast ========================================================================== */ .uk-contrast { - color: #ffffff; + color: #fff; + /* Active */ } .uk-contrast a:not([class]), .uk-contrast .uk-link { @@ -7829,16 +8708,16 @@ a.uk-thumbnail:focus { } .uk-contrast a:not([class]):hover, .uk-contrast .uk-link:hover { - color: #ffffff; + color: #fff; text-decoration: underline; } .uk-contrast :not(pre) > code, .uk-contrast :not(pre) > kbd, .uk-contrast :not(pre) > samp { - color: #ffffff; + color: #fff; } .uk-contrast em { - color: #ffffff; + color: #fff; } .uk-contrast h1, .uk-contrast h2, @@ -7846,7 +8725,7 @@ a.uk-thumbnail:focus { .uk-contrast h4, .uk-contrast h5, .uk-contrast h6 { - color: #ffffff; + color: #fff; } .uk-contrast hr { border-top-color: rgba(255, 255, 255, 0.2); @@ -7856,19 +8735,19 @@ a.uk-thumbnail:focus { text-decoration: none; } .uk-contrast .uk-nav-side > li > a { - color: #ffffff; + color: #fff; } .uk-contrast .uk-nav-side > li > a:hover, .uk-contrast .uk-nav-side > li > a:focus { background: rgba(255, 255, 255, 0.1); - color: #ffffff; + color: #fff; } .uk-contrast .uk-nav-side > li.uk-active > a { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } .uk-contrast .uk-nav-side .uk-nav-header { - color: #ffffff; + color: #fff; } .uk-contrast .uk-nav-side .uk-nav-divider { border-top-color: rgba(255, 255, 255, 0.2); @@ -7877,7 +8756,7 @@ a.uk-thumbnail:focus { color: rgba(255, 255, 255, 0.7); } .uk-contrast .uk-nav-side ul a:hover { - color: #ffffff; + color: #fff; } .uk-contrast .uk-subnav > * > a { color: rgba(255, 255, 255, 0.7); @@ -7885,11 +8764,11 @@ a.uk-thumbnail:focus { } .uk-contrast .uk-subnav > * > a:hover, .uk-contrast .uk-subnav > * > a:focus { - color: #ffffff; + color: #fff; text-decoration: none; } .uk-contrast .uk-subnav > .uk-active > a { - color: #ffffff; + color: #fff; } .uk-contrast .uk-subnav-line > :nth-child(n+2):before { border-left-color: rgba(255, 255, 255, 0.2); @@ -7897,12 +8776,39 @@ a.uk-thumbnail:focus { .uk-contrast .uk-subnav-pill > * > a:hover, .uk-contrast .uk-subnav-pill > * > a:focus { background: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; text-decoration: none; } .uk-contrast .uk-subnav-pill > .uk-active > a { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; +} +.uk-contrast .uk-tab { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-contrast .uk-tab > li > a { + border-color: transparent; + color: rgba(255, 255, 255, 0.7); +} +.uk-contrast .uk-tab > li > a:hover, +.uk-contrast .uk-tab > li > a:focus, +.uk-contrast .uk-tab > li.uk-open > a { + border-color: rgba(255, 255, 255, 0.7); + background: rgba(255, 255, 255, 0.7); + color: #444; + text-decoration: none; +} +.uk-contrast .uk-tab > li.uk-active > a { + border-color: rgba(255, 255, 255, 0.2); + border-bottom-color: transparent; + background: #fff; + color: #444; +} +.uk-contrast .uk-tab-center { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-contrast .uk-tab-grid:before { + border-top-color: rgba(255, 255, 255, 0.2); } .uk-contrast .uk-list-line > li:nth-child(n+2) { border-top-color: rgba(255, 255, 255, 0.2); @@ -7926,7 +8832,7 @@ a.uk-thumbnail:focus { .uk-contrast .uk-form input[type="color"] { border-color: rgba(255, 255, 255, 0.8); background: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; background-clip: padding-box; } .uk-contrast .uk-form select:focus, @@ -7946,9 +8852,9 @@ a.uk-thumbnail:focus { .uk-contrast .uk-form input[type="search"]:focus, .uk-contrast .uk-form input[type="tel"]:focus, .uk-contrast .uk-form input[type="color"]:focus { - border-color: #ffffff; - background: #ffffff; - color: #444444; + border-color: #fff; + background: #fff; + color: #444; } .uk-contrast .uk-form :-ms-input-placeholder { color: rgba(68, 68, 68, 0.7) !important; @@ -7960,51 +8866,51 @@ a.uk-thumbnail:focus { color: rgba(68, 68, 68, 0.7); } .uk-contrast .uk-button { - color: #444444; - background: #ffffff; + color: #444; + background: #fff; } .uk-contrast .uk-button:hover, .uk-contrast .uk-button:focus { background-color: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; } .uk-contrast .uk-button:active, .uk-contrast .uk-button.uk-active { background-color: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; } .uk-contrast .uk-button-primary { background-color: #00a8e6; - color: #ffffff; + color: #fff; } .uk-contrast .uk-button-primary:hover, .uk-contrast .uk-button-primary:focus { background-color: #35b3ee; - color: #ffffff; + color: #fff; } .uk-contrast .uk-button-primary:active, .uk-contrast .uk-button-primary.uk-active { background-color: #0091ca; - color: #ffffff; + color: #fff; } .uk-contrast .uk-icon-hover { color: rgba(255, 255, 255, 0.7); } .uk-contrast .uk-icon-hover:hover { - color: #ffffff; + color: #fff; } .uk-contrast .uk-icon-button { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } .uk-contrast .uk-icon-button:hover, .uk-contrast .uk-icon-button:focus { background-color: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; } .uk-contrast .uk-icon-button:active { background-color: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; } .uk-contrast .uk-text-muted { color: rgba(255, 255, 255, 0.6) !important; @@ -8016,7 +8922,9 @@ a.uk-thumbnail:focus { Component: Print ========================================================================== */ @media print { - * { + *, + *:before, + *:after { background: transparent !important; color: black !important; box-shadow: none !important; diff --git a/media/uikit/css/uikit.gradient.css b/media/uikit-v2/css/uikit.gradient.css similarity index 86% rename from media/uikit/css/uikit.gradient.css rename to media/uikit-v2/css/uikit.gradient.css index 4284f44..c5a3e70 100644 --- a/media/uikit/css/uikit.gradient.css +++ b/media/uikit-v2/css/uikit.gradient.css @@ -1,9 +1,9 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* ======================================================================== Component: Base ========================================================================== */ /* - * 1. Normalizes default `font-family` and sets `font-size` here to support `rem` units + * 1. Normalize default `font-family` and set `font-size` to support `rem` units * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom * 3. Style */ @@ -14,10 +14,10 @@ html { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; /* 3 */ - background: #ffffff; - color: #444444; - background-image: -webkit-radial-gradient(100% 100%, center, #ffffff, #ffffff); - background-image: radial-gradient(100% 100% at center, #ffffff, #ffffff); + background: #fff; + color: #444; + background-image: -webkit-radial-gradient(100% 100%, center, #fff, #fff); + background-image: radial-gradient(100% 100% at center, #fff, #fff); } /* * Removes default margin. @@ -34,7 +34,7 @@ a { background: transparent; } /* - * Improves readability when focused and also mouse hovered in all browsers. + * Improve readability of focused elements when they are also in an active/hover state. */ a:active, a:hover { @@ -45,25 +45,25 @@ a:hover { */ a, .uk-link { - color: #0077dd; + color: #07D; text-decoration: none; cursor: pointer; } a:hover, .uk-link:hover { - color: #005599; + color: #059; text-decoration: underline; } /* Text-level semantics ========================================================================== */ /* - * Addresses styling not present in Chrome, Safari, Opera and IE 8/9/10. + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ abbr[title] { border-bottom: 1px dotted; } /* - * Addresses style set to `bolder` in Firefox + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ b, strong { @@ -81,10 +81,10 @@ strong { /* 2 */ font-family: Consolas, monospace, serif; /* 3 */ - color: #dd0055; + color: #D05; white-space: nowrap; padding: 0 4px; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 3px; background: #fafafa; } @@ -92,14 +92,14 @@ strong { * Emphasize */ em { - color: #dd0055; + color: #D05; } /* * Insert */ ins { - background: #ffffaa; - color: #444444; + background: #ffa; + color: #444; text-decoration: none; } /* @@ -107,8 +107,8 @@ ins { * Note: Addresses styling not present in IE 8/9. */ mark { - background: #ffffaa; - color: #444444; + background: #ffa; + color: #444; } /* * Quote @@ -138,33 +138,52 @@ sup { sub { bottom: -0.25em; } -/* Images +/* Embedded content ========================================================================== */ /* - * 1. Responsiveness: Sets a maximum width relative to the parent and auto scales the height - * 2. Corrects `max-width` behavior if padding and border are used - * 3. Remove border when inside `a` element in IE 8/9/10. - * 4. Remove the gap between images and the bottom of their containers + * Remove the gap between embedded content and the bottom of their containers. */ -img { +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} +/* + * Responsiveness + * 1. Sets a maximum width relative to the parent and auto scales the height + * 2. Corrects `max-width` behavior if padding and border are used + */ +audio, +canvas, +img, +svg, +video { /* 1 */ max-width: 100%; height: auto; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; - /* 3 */ - border: 0; - /* 4 */ - vertical-align: middle; } /* - * Preserve original image dimensions + * Preserve original dimensions */ .uk-img-preserve, -.uk-img-preserve img { +.uk-img-preserve audio, +.uk-img-preserve canvas, +.uk-img-preserve img, +.uk-img-preserve svg, +.uk-img-preserve video { max-width: none; } +/* + * Remove border when inside `a` element in IE 8/9/10. + */ +img { + border: 0; +} /* * Correct overflow not hidden in IE 9/10/11. */ @@ -216,7 +235,7 @@ h6 { margin: 0 0 15px 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; - color: #444444; + color: #444; text-transform: none; } /* @@ -294,13 +313,12 @@ dd { */ hr { /* 1 */ - -moz-box-sizing: content-box; box-sizing: content-box; height: 0; /* 2 */ margin: 15px 0; border: 0; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Address ========================================================================== */ @@ -311,7 +329,7 @@ address { ========================================================================== */ blockquote { padding-left: 15px; - border-left: 5px solid #dddddd; + border-left: 5px solid #ddd; font-size: 16px; line-height: 22px; font-style: italic; @@ -325,30 +343,32 @@ pre { padding: 10px; background: #fafafa; font: 12px / 18px Consolas, monospace, serif; - color: #444444; + color: #444; -moz-tab-size: 4; tab-size: 4; /* 1 */ overflow: auto; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 3px; } -/* Selection pseudo-element +/* Selection pseudo-element ========================================================================== */ ::-moz-selection { - background: #3399ff; - color: #ffffff; + background: #39f; + color: #fff; text-shadow: none; } ::selection { - background: #3399ff; - color: #ffffff; + background: #39f; + color: #fff; text-shadow: none; } /* HTML5 elements ========================================================================== */ /* - * Corrects `block` display not defined in IE 8/9. + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. + * Correct `block` display not defined for `main` in IE 11. */ article, aside, @@ -364,7 +384,7 @@ summary { display: block; } /* - * Addresses inconsistent vertical alignment of `progress` in Chrome, Firefox and Opera. + * Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ progress { vertical-align: baseline; @@ -376,8 +396,8 @@ audio:not([controls]) { display: none; } /* - * Address `[hidden]` styling not present in IE 8/9. - * Hide the `template` element in IE and Safari + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. */ [hidden], template { @@ -531,6 +551,41 @@ iframe { .uk-grid-medium > * > .uk-panel + .uk-panel { margin-top: 25px; } +/* + * Large gutter + */ +/* Large screen and bigger */ +@media (min-width: 960px) { + /* Horizontal */ + .uk-grid-large { + margin-left: -35px; + } + .uk-grid-large > * { + padding-left: 35px; + } + /* Vertical */ + .uk-grid-large + .uk-grid-large, + .uk-grid-large-margin, + .uk-grid-large > * > .uk-panel + .uk-panel { + margin-top: 35px; + } +} +/* Extra Large screens */ +@media (min-width: 1220px) { + /* Horizontal */ + .uk-grid-large { + margin-left: -50px; + } + .uk-grid-large > * { + padding-left: 50px; + } + /* Vertical */ + .uk-grid-large + .uk-grid-large, + .uk-grid-large-margin, + .uk-grid-large > * > .uk-panel + .uk-panel { + margin-top: 50px; + } +} /* Modifier: `uk-grid-divider` ========================================================================== */ /* @@ -555,18 +610,18 @@ iframe { .uk-grid-divider > [class*='uk-width-7-']:nth-child(n+2), .uk-grid-divider > [class*='uk-width-8-']:nth-child(n+2), .uk-grid-divider > [class*='uk-width-9-']:nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* Tablet and bigger */ @media (min-width: 768px) { .uk-grid-divider > [class*='uk-width-medium-']:not(.uk-width-medium-1-1):nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } } /* Desktop and bigger */ @media (min-width: 960px) { .uk-grid-divider > [class*='uk-width-large-']:not(.uk-width-large-1-1):nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } } /* Large screen and bigger */ @@ -593,34 +648,33 @@ iframe { .uk-grid-divider:empty { margin-top: 25px; margin-bottom: 25px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Match panels in grids ========================================================================== */ +/* + * 1. Behave like a block element + */ .uk-grid-match > * { display: -ms-flexbox; display: -webkit-flex; display: flex; + /* 1 */ + -ms-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; } -/* - * 1. Behave like a block element - */ .uk-grid-match > * > * { /* 1 */ -ms-flex: none; -webkit-flex: none; flex: none; - -ms-flex-wrap: wrap; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } /* Even grid cell widths ========================================================================== */ [class*='uk-grid-width'] > * { - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } @@ -642,8 +696,14 @@ iframe { .uk-grid-width-1-10 > * { width: 10%; } +.uk-grid-width-auto > * { + width: auto; +} /* Phone landscape and bigger */ @media (min-width: 480px) { + .uk-grid-width-small-1-1 > * { + width: 100%; + } .uk-grid-width-small-1-2 > * { width: 50%; } @@ -665,6 +725,9 @@ iframe { } /* Tablet and bigger */ @media (min-width: 768px) { + .uk-grid-width-medium-1-1 > * { + width: 100%; + } .uk-grid-width-medium-1-2 > * { width: 50%; } @@ -686,6 +749,9 @@ iframe { } /* Desktop and bigger */ @media (min-width: 960px) { + .uk-grid-width-large-1-1 > * { + width: 100%; + } .uk-grid-width-large-1-2 > * { width: 50%; } @@ -707,6 +773,9 @@ iframe { } /* Large screen and bigger */ @media (min-width: 1220px) { + .uk-grid-width-xlarge-1-1 > * { + width: 100%; + } .uk-grid-width-xlarge-1-2 > * { width: 50%; } @@ -729,7 +798,6 @@ iframe { /* Sub-objects: `uk-width-*` ========================================================================== */ [class*='uk-width'] { - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; } @@ -1001,6 +1069,73 @@ iframe { width: 90%; } } +/* Large screen and bigger */ +@media (min-width: 1220px) { + /* Whole */ + .uk-width-xlarge-1-1 { + width: 100%; + } + /* Halves */ + .uk-width-xlarge-1-2, + .uk-width-xlarge-2-4, + .uk-width-xlarge-3-6, + .uk-width-xlarge-5-10 { + width: 50%; + } + /* Thirds */ + .uk-width-xlarge-1-3, + .uk-width-xlarge-2-6 { + width: 33.333%; + } + .uk-width-xlarge-2-3, + .uk-width-xlarge-4-6 { + width: 66.666%; + } + /* Quarters */ + .uk-width-xlarge-1-4 { + width: 25%; + } + .uk-width-xlarge-3-4 { + width: 75%; + } + /* Fifths */ + .uk-width-xlarge-1-5, + .uk-width-xlarge-2-10 { + width: 20%; + } + .uk-width-xlarge-2-5, + .uk-width-xlarge-4-10 { + width: 40%; + } + .uk-width-xlarge-3-5, + .uk-width-xlarge-6-10 { + width: 60%; + } + .uk-width-xlarge-4-5, + .uk-width-xlarge-8-10 { + width: 80%; + } + /* Sixths */ + .uk-width-xlarge-1-6 { + width: 16.666%; + } + .uk-width-xlarge-5-6 { + width: 83.333%; + } + /* Tenths */ + .uk-width-xlarge-1-10 { + width: 10%; + } + .uk-width-xlarge-3-10 { + width: 30%; + } + .uk-width-xlarge-7-10 { + width: 70%; + } + .uk-width-xlarge-9-10 { + width: 90%; + } +} /* Sub-object: `uk-push-*` and `uk-pull-*` ========================================================================== */ /* @@ -1186,7 +1321,7 @@ iframe { line-height: 24px; font-weight: normal; text-transform: none; - color: #444444; + color: #444; } /* Sub-object: `uk-panel-badge` ========================================================================== */ @@ -1201,26 +1336,31 @@ iframe { .uk-panel-teaser { margin-bottom: 15px; } +/* Sub-object: `uk-panel-body` + ========================================================================== */ +.uk-panel-body { + padding: 15px; +} /* Modifier: `uk-panel-box` ========================================================================== */ .uk-panel-box { padding: 15px; background: #fafafa; - color: #444444; - border: 1px solid #dddddd; + color: #444; + border: 1px solid #ddd; border-radius: 4px; } .uk-panel-box-hover:hover { - color: #444444; + color: #444; } .uk-panel-box .uk-panel-title { - color: #444444; + color: #444; } .uk-panel-box .uk-panel-badge { top: 10px; right: 10px; } -.uk-panel-box .uk-panel-teaser { +.uk-panel-box > .uk-panel-teaser { margin-top: -16px; margin-left: -16px; margin-right: -16px; @@ -1249,33 +1389,33 @@ iframe { * Sub-modifier: `uk-panel-box-secondary` */ .uk-panel-box-secondary { - background-color: #ffffff; - color: #444444; + background-color: #fff; + color: #444; } .uk-panel-box-secondary-hover:hover { - color: #444444; + color: #444; } .uk-panel-box-secondary .uk-panel-title { - color: #444444; + color: #444; } /* Modifier: `uk-panel-hover` ========================================================================== */ .uk-panel-hover { padding: 15px; - color: #444444; + color: #444; border: 1px solid transparent; border-radius: 4px; } .uk-panel-hover:hover { background: #fafafa; - color: #444444; - border-color: #dddddd; + color: #444; + border-color: #ddd; } .uk-panel-hover .uk-panel-badge { top: 10px; right: 10px; } -.uk-panel-hover .uk-panel-teaser { +.uk-panel-hover > .uk-panel-teaser { margin-top: -16px; margin-left: -16px; margin-right: -16px; @@ -1284,8 +1424,8 @@ iframe { ========================================================================== */ .uk-panel-header .uk-panel-title { padding-bottom: 10px; - border-bottom: 1px solid #dddddd; - color: #444444; + border-bottom: 1px solid #ddd; + color: #444; } /* Modifier: `uk-panel-space` ========================================================================== */ @@ -1308,7 +1448,7 @@ iframe { top: -25px; left: 0; right: 0; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Large screen and bigger */ @media (min-width: 1220px) { @@ -1330,7 +1470,6 @@ iframe { ========================================================================== */ .uk-block { position: relative; - -moz-box-sizing: border-box; box-sizing: border-box; padding-top: 20px; padding-bottom: 20px; @@ -1388,7 +1527,7 @@ iframe { * Default */ .uk-block-default { - background: #ffffff; + background: #fff; } /* * Muted @@ -1406,11 +1545,11 @@ iframe { * Secondary */ .uk-block-secondary { - background: #222222; + background: #222; } /* - * Adjust padding between equal colored blocks - */ + * Adjust padding between equal colored blocks + */ .uk-block-default + .uk-block-default, .uk-block-muted + .uk-block-muted, .uk-block-primary + .uk-block-primary, @@ -1460,12 +1599,12 @@ iframe { .uk-article-meta { font-size: 12px; line-height: 18px; - color: #999999; + color: #999; } /* Sub-object `uk-article-lead` ========================================================================== */ .uk-article-lead { - color: #444444; + color: #444; font-size: 18px; line-height: 24px; font-weight: normal; @@ -1474,14 +1613,14 @@ iframe { ========================================================================== */ .uk-article-divider { margin-bottom: 25px; - border-color: #dddddd; + border-color: #ddd; } * + .uk-article-divider { margin-top: 25px; } .uk-article + .uk-article { padding-top: 25px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* ======================================================================== Component: Comment @@ -1491,7 +1630,7 @@ iframe { .uk-comment-header { margin-bottom: 15px; padding: 10px; - border: 1px solid #dddddd; + border: 1px solid #ddd; border-radius: 4px; background: #fafafa; } @@ -1525,7 +1664,7 @@ iframe { margin: 2px 0 0 0; font-size: 11px; line-height: 16px; - color: #999999; + color: #999; } /* Sub-object `uk-comment-body` ========================================================================== */ @@ -1565,7 +1704,7 @@ iframe { border-color: rgba(45, 112, 145, 0.3); background-color: #ebf7fd; color: #2d7091; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* ======================================================================== Component: Cover @@ -1692,7 +1831,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-side > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1702,16 +1841,16 @@ ul.uk-nav-sub { .uk-nav-side > li > a:hover, .uk-nav-side > li > a:focus { background: rgba(0, 0, 0, 0.03); - color: #444444; + color: #444; /* 2 */ outline: none; box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.1); - text-shadow: 0 -1px 0 #ffffff; + text-shadow: 0 -1px 0 #fff; } /* Active */ .uk-nav-side > li.uk-active > a { background: #009dd8; - color: #ffffff; + color: #fff; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); } @@ -1719,23 +1858,23 @@ ul.uk-nav-sub { * Sub-object: `uk-nav-header` */ .uk-nav-side .uk-nav-header { - color: #444444; + color: #444; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-side .uk-nav-divider { - border-top: 1px solid #dddddd; - box-shadow: 0 1px 0 #ffffff; + border-top: 1px solid #ddd; + box-shadow: 0 1px 0 #fff; } /* * Nested items */ .uk-nav-side ul a { - color: #0077dd; + color: #07D; } .uk-nav-side ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-dropdown` ========================================================================== */ @@ -1743,7 +1882,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-dropdown > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1753,7 +1892,7 @@ ul.uk-nav-sub { .uk-nav-dropdown > li > a:hover, .uk-nav-dropdown > li > a:focus { background: #009dd8; - color: #ffffff; + color: #fff; /* 2 */ outline: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); @@ -1763,22 +1902,22 @@ ul.uk-nav-sub { * Sub-object: `uk-nav-header` */ .uk-nav-dropdown .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-dropdown .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-dropdown ul a { - color: #0077dd; + color: #07D; } .uk-nav-dropdown ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-navbar` ========================================================================== */ @@ -1786,7 +1925,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-navbar > li > a { - color: #444444; + color: #444; } /* * Hover @@ -1796,7 +1935,7 @@ ul.uk-nav-sub { .uk-nav-navbar > li > a:hover, .uk-nav-navbar > li > a:focus { background: #009dd8; - color: #ffffff; + color: #fff; /* 2 */ outline: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); @@ -1806,22 +1945,22 @@ ul.uk-nav-sub { * Sub-object: `uk-nav-header` */ .uk-nav-navbar .uk-nav-header { - color: #999999; + color: #999; } /* * Sub-object: `uk-nav-divider` */ .uk-nav-navbar .uk-nav-divider { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* * Nested items */ .uk-nav-navbar ul a { - color: #0077dd; + color: #07D; } .uk-nav-navbar ul a:hover { - color: #005599; + color: #059; } /* Modifier `uk-nav-offcanvas` ========================================================================== */ @@ -1829,7 +1968,7 @@ ul.uk-nav-sub { * Items */ .uk-nav-offcanvas > li > a { - color: #cccccc; + color: #ccc; padding: 10px 15px; border-top: 1px solid rgba(0, 0, 0, 0.3); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05); @@ -1845,7 +1984,7 @@ ul.uk-nav-sub { html:not(.uk-touch) .uk-nav-offcanvas > li > a:hover, html:not(.uk-touch) .uk-nav-offcanvas > li > a:focus { background: #404040; - color: #ffffff; + color: #fff; /* 2 */ outline: none; } @@ -1855,14 +1994,14 @@ html:not(.uk-touch) .uk-nav-offcanvas > li > a:focus { */ html .uk-nav.uk-nav-offcanvas > li.uk-active > a { background: #1a1a1a; - color: #ffffff; + color: #fff; box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3); } /* * Sub-object: `uk-nav-header` */ .uk-nav-offcanvas .uk-nav-header { - color: #777777; + color: #777; margin-top: 0; border-top: 1px solid rgba(0, 0, 0, 0.3); background: #404040; @@ -1884,10 +2023,10 @@ html .uk-nav.uk-nav-offcanvas > li.uk-active > a { * No hover on touch devices because it behaves buggy in fixed offcanvas */ .uk-nav-offcanvas ul a { - color: #cccccc; + color: #ccc; } html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { - color: #ffffff; + color: #fff; } /* * Modifier `uk-nav-offcanvas` @@ -1908,13 +2047,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-navbar { background: #f7f7f7; - color: #444444; + color: #444; border: 1px solid rgba(0, 0, 0, 0.1); border-bottom-color: rgba(0, 0, 0, 0.3); border-radius: 4px; background-origin: border-box; - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(to bottom, #ffffff, #eeeeee); + background-image: -webkit-linear-gradient(top, #fff, #eee); + background-image: linear-gradient(to bottom, #fff, #eee); } /* * Micro clearfix @@ -1949,7 +2088,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-nav > li > a { display: block; - -moz-box-sizing: border-box; box-sizing: border-box; text-decoration: none; /* 1 */ @@ -1957,7 +2095,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { padding: 0 15px; line-height: 40px; /* 2 */ - color: #444444; + color: #444; font-size: 14px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: normal; @@ -1965,7 +2103,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { margin-left: -1px; border: 1px solid transparent; border-bottom-width: 0; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* Appear not as link */ .uk-navbar-nav > li > a[href='#'] { @@ -1981,7 +2119,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-navbar-nav > li > a:focus, .uk-navbar-nav > li.uk-open > a { background-color: transparent; - color: #444444; + color: #444; /* 3 */ outline: none; position: relative; @@ -1994,7 +2132,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* OnClick */ .uk-navbar-nav > li > a:active { background-color: #f5f5f5; - color: #444444; + color: #444; border-left-color: rgba(0, 0, 0, 0.1); border-right-color: rgba(0, 0, 0, 0.1); border-top-color: rgba(0, 0, 0, 0.2); @@ -2003,7 +2141,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Active */ .uk-navbar-nav > li.uk-active > a { background-color: #fafafa; - color: #444444; + color: #444; border-left-color: rgba(0, 0, 0, 0.1); border-right-color: rgba(0, 0, 0, 0.1); border-top-color: rgba(0, 0, 0, 0.2); @@ -2027,14 +2165,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-navbar-content, .uk-navbar-brand, .uk-navbar-toggle { - -moz-box-sizing: border-box; box-sizing: border-box; display: block; height: 41px; padding: 0 15px; float: left; margin-top: -1px; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* * Helper to center all child elements vertically @@ -2059,16 +2196,16 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Link colors */ .uk-navbar-content > a:not([class]) { - color: #0077dd; + color: #07D; } .uk-navbar-content > a:not([class]):hover { - color: #005599; + color: #059; } /* Sub-objects: `uk-navbar-brand` ========================================================================== */ .uk-navbar-brand { font-size: 18px; - color: #444444; + color: #444; text-decoration: none; } /* @@ -2077,7 +2214,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-brand:hover, .uk-navbar-brand:focus { - color: #444444; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -2086,7 +2223,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-navbar-toggle { font-size: 18px; - color: #444444; + color: #444; text-decoration: none; } /* @@ -2095,7 +2232,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-navbar-toggle:hover, .uk-navbar-toggle:focus { - color: #444444; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -2223,7 +2360,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-subnav > * > * { display: inline-block; - color: #444444; + color: #444; } /* * Hover @@ -2231,14 +2368,14 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-subnav > * > :hover, .uk-subnav > * > :focus { - color: #0077dd; + color: #07D; text-decoration: none; } /* * Active */ .uk-subnav > .uk-active > * { - color: #0077dd; + color: #07D; } /* Modifier: 'subnav-line' ========================================================================== */ @@ -2250,7 +2387,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-subnav-line > :nth-child(n+2):before { margin-right: 10px; - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* Modifier: 'subnav-pill' ========================================================================== */ @@ -2266,7 +2403,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-subnav-pill > * > :hover, .uk-subnav-pill > * > :focus { background: #fafafa; - color: #444444; + color: #444; text-decoration: none; /* 2 */ outline: none; @@ -2278,14 +2415,14 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-subnav-pill > .uk-active > * { background: #009dd8; - color: #ffffff; + color: #fff; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); } /* Disabled state ========================================================================== */ .uk-subnav > .uk-disabled > * { background: none; - color: #999999; + color: #999; text-decoration: none; cursor: text; box-shadow: none; @@ -2327,7 +2464,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Disabled */ .uk-breadcrumb > li:not(.uk-active) > span { - color: #999999; + color: #999; } /* ======================================================================== Component: Pagination @@ -2386,7 +2523,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { line-height: 20px; text-decoration: none; /* 1 */ - -moz-box-sizing: content-box; box-sizing: content-box; /* 2 */ text-align: center; @@ -2397,13 +2533,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-pagination > li > a { background: #f7f7f7; - color: #444444; + color: #444; border: 1px solid rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.3); background-origin: border-box; - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(to bottom, #ffffff, #eeeeee); - text-shadow: 0 1px 0 #ffffff; + background-image: -webkit-linear-gradient(top, #fff, #eee); + background-image: linear-gradient(to bottom, #fff, #eee); + text-shadow: 0 1px 0 #fff; } /* * Hover @@ -2413,7 +2549,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-pagination > li > a:hover, .uk-pagination > li > a:focus { background-color: #fafafa; - color: #444444; + color: #444; /* 2 */ outline: none; background-image: none; @@ -2421,7 +2557,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* OnClick */ .uk-pagination > li > a:active { background-color: #f5f5f5; - color: #444444; + color: #444; border-color: rgba(0, 0, 0, 0.2); border-top-color: rgba(0, 0, 0, 0.3); background-image: none; @@ -2432,7 +2568,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-pagination > .uk-active > span { background: #009dd8; - color: #ffffff; + color: #fff; border: 1px solid rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.4); background-origin: border-box; @@ -2445,9 +2581,9 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { */ .uk-pagination > .uk-disabled > span { background-color: #fafafa; - color: #999999; + color: #999; border: 1px solid rgba(0, 0, 0, 0.2); - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* Previous and next navigation ========================================================================== */ @@ -2472,7 +2608,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { margin: 0; padding: 0; list-style: none; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } /* * Micro clearfix on the deepest container @@ -2500,10 +2636,10 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { padding: 8px 12px 8px 12px; border: 1px solid transparent; border-bottom-width: 0; - color: #0077dd; + color: #07D; text-decoration: none; border-radius: 4px 4px 0 0; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } .uk-tab > li:nth-child(n+2) > a { margin-left: 5px; @@ -2517,9 +2653,9 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-tab > li > a:hover, .uk-tab > li > a:focus, .uk-tab > li.uk-open > a { - border-color: #dddddd; + border-color: #ddd; background: #fafafa; - color: #005599; + color: #059; /* 2 */ outline: none; } @@ -2531,14 +2667,14 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } /* Active */ .uk-tab > li.uk-active > a { - border-color: #dddddd; + border-color: #ddd; border-bottom-color: transparent; - background: #ffffff; - color: #444444; + background: #fff; + color: #444; } /* Disabled */ .uk-tab > li.uk-disabled > a { - color: #999999; + color: #999; cursor: text; } .uk-tab > li.uk-disabled > a:hover, @@ -2572,11 +2708,11 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Modifier: 'tab-center' ========================================================================== */ .uk-tab-center { - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } .uk-tab-center-bottom { border-bottom: none; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .uk-tab-center:before, .uk-tab-center:after { @@ -2605,7 +2741,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* Modifier: 'tab-bottom' ========================================================================== */ .uk-tab-bottom { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; border-bottom: none; } .uk-tab-bottom > li { @@ -2628,7 +2764,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-tab-bottom > li.uk-active > a { border-top-color: transparent; - border-bottom-color: #dddddd; + border-bottom-color: #ddd; } /* Modifier: 'tab-grid' ========================================================================== */ @@ -2648,7 +2784,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { left: 5px; right: 0; bottom: -1px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; /* 1 */ z-index: -1; } @@ -2693,13 +2829,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-tab-left > li.uk-active > a, .uk-tab-right > li.uk-active > a { - border-color: #dddddd; + border-color: #ddd; } /* * Modifier: 'tab-left' */ .uk-tab-left { - border-right: 1px solid #dddddd; + border-right: 1px solid #ddd; } .uk-tab-left > li { margin-right: -1px; @@ -2722,7 +2858,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { * Modifier: 'tab-right' */ .uk-tab-right { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } .uk-tab-right > li { margin-left: -1px; @@ -2817,7 +2953,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { ========================================================================== */ .uk-thumbnav > * > * { display: block; - background: #ffffff; + background: #fff; } .uk-thumbnav > * > * > img { opacity: 0.7; @@ -2874,13 +3010,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-list-line > li:nth-child(n+2) { margin-top: 5px; padding-top: 5px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* Modifier: `uk-list-striped` ========================================================================== */ .uk-list-striped > li { padding: 5px 5px; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } .uk-list-striped > li:nth-of-type(odd) { background: #fafafa; @@ -2891,7 +3027,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { margin-top: 10px; } .uk-list-striped > li:first-child { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } /* ======================================================================== Component: Description list @@ -2923,10 +3059,10 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-description-list-line > dt:nth-child(n+2) { margin-top: 5px; padding-top: 5px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .uk-description-list-line > dd { - color: #999999; + color: #999; } /* ======================================================================== Component: Table @@ -2954,7 +3090,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-table th, .uk-table td { padding: 8px 8px; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } /* * Set alignment @@ -2978,7 +3114,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { } .uk-table caption { text-align: left; - color: #999999; + color: #999; } /* * Active State @@ -3024,7 +3160,6 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form select, .uk-form textarea { /* 1 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 2 */ margin: 0; @@ -3180,11 +3315,13 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { /* 3 */ padding: 4px 6px; /* 4 */ - border: 1px solid #dddddd; - background: #ffffff; - color: #444444; - -webkit-transition: all linear 0.2s; - transition: all linear 0.2s; + border: 1px solid #ddd; + background: #fff; + color: #444; + -webkit-transition: all 0.2s linear; + -webkit-transition-property: border, background, color, box-shadow, padding; + transition: all 0.2s linear; + transition-property: border, background, color, box-shadow, padding; border-radius: 4px; } .uk-form select:focus, @@ -3207,7 +3344,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { border-color: #99baca; outline: 0; background: #f5fbfe; - color: #444444; + color: #444; } .uk-form select:disabled, .uk-form textarea:disabled, @@ -3226,30 +3363,30 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form input[type="search"]:disabled, .uk-form input[type="tel"]:disabled, .uk-form input[type="color"]:disabled { - border-color: #dddddd; + border-color: #ddd; background-color: #fafafa; - color: #999999; + color: #999; } /* * Placeholder */ .uk-form :-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-form ::-moz-placeholder { - color: #999999; + color: #999; } .uk-form ::-webkit-input-placeholder { - color: #999999; + color: #999; } .uk-form :disabled:-ms-input-placeholder { - color: #999999 !important; + color: #999 !important; } .uk-form :disabled::-moz-placeholder { - color: #999999; + color: #999; } .uk-form :disabled::-webkit-input-placeholder { - color: #999999; + color: #999; } /* * Legend @@ -3279,7 +3416,7 @@ html:not(.uk-touch) .uk-nav-offcanvas ul a:hover { .uk-form legend:after { content: ""; display: block; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; /* 1 */ width: 100%; } @@ -3341,7 +3478,7 @@ input:not([type]).uk-form-large { background: none !important; } .uk-form-blank:focus { - border-color: #dddddd !important; + border-color: #ddd !important; } /* Size sub-modifiers ========================================================================== */ @@ -3472,7 +3609,7 @@ select.uk-form-width-mini { width: 30px; margin-top: -7px; font-size: 14px; - color: #999999; + color: #999; text-align: center; /* 1 */ pointer-events: none; @@ -3523,12 +3660,11 @@ select.uk-form-width-mini { overflow: visible; /* 5 */ font: inherit; - color: #444444; + color: #444; /* 6 */ text-transform: none; /* 7 */ display: inline-block; - -moz-box-sizing: border-box; box-sizing: border-box; padding: 0 12px; background: #f7f7f7; @@ -3545,10 +3681,10 @@ select.uk-form-width-mini { border: 1px solid rgba(0, 0, 0, 0.2); border-bottom-color: rgba(0, 0, 0, 0.3); background-origin: border-box; - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(to bottom, #ffffff, #eeeeee); + background-image: -webkit-linear-gradient(top, #fff, #eee); + background-image: linear-gradient(to bottom, #fff, #eee); border-radius: 4px; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } .uk-button:not(:disabled) { cursor: pointer; @@ -3562,7 +3698,7 @@ select.uk-form-width-mini { .uk-button:hover, .uk-button:focus { background-color: #fafafa; - color: #444444; + color: #444; /* 2 */ outline: none; /* 3 */ @@ -3573,7 +3709,7 @@ select.uk-form-width-mini { .uk-button:active, .uk-button.uk-active { background-color: #f5f5f5; - color: #444444; + color: #444; border-color: rgba(0, 0, 0, 0.2); border-top-color: rgba(0, 0, 0, 0.3); background-image: none; @@ -3586,7 +3722,7 @@ select.uk-form-width-mini { */ .uk-button-primary { background-color: #009dd8; - color: #ffffff; + color: #fff; background-image: -webkit-linear-gradient(top, #00b4f5, #008dc5); background-image: linear-gradient(to bottom, #00b4f5, #008dc5); border-color: rgba(0, 0, 0, 0.2); @@ -3597,14 +3733,14 @@ select.uk-form-width-mini { .uk-button-primary:hover, .uk-button-primary:focus { background-color: #00aff2; - color: #ffffff; + color: #fff; background-image: none; } /* Active */ .uk-button-primary:active, .uk-button-primary.uk-active { background-color: #008abf; - color: #ffffff; + color: #fff; background-image: none; border-color: rgba(0, 0, 0, 0.2); border-top-color: rgba(0, 0, 0, 0.4); @@ -3615,7 +3751,7 @@ select.uk-form-width-mini { */ .uk-button-success { background-color: #82bb42; - color: #ffffff; + color: #fff; background-image: -webkit-linear-gradient(top, #9fd256, #6fac34); background-image: linear-gradient(to bottom, #9fd256, #6fac34); border-color: rgba(0, 0, 0, 0.2); @@ -3626,14 +3762,14 @@ select.uk-form-width-mini { .uk-button-success:hover, .uk-button-success:focus { background-color: #8fce48; - color: #ffffff; + color: #fff; background-image: none; } /* Active */ .uk-button-success:active, .uk-button-success.uk-active { background-color: #76b430; - color: #ffffff; + color: #fff; background-image: none; border-color: rgba(0, 0, 0, 0.2); border-top-color: rgba(0, 0, 0, 0.4); @@ -3644,7 +3780,7 @@ select.uk-form-width-mini { */ .uk-button-danger { background-color: #d32c46; - color: #ffffff; + color: #fff; background-image: -webkit-linear-gradient(top, #ee465a, #c11a39); background-image: linear-gradient(to bottom, #ee465a, #c11a39); border-color: rgba(0, 0, 0, 0.2); @@ -3655,14 +3791,14 @@ select.uk-form-width-mini { .uk-button-danger:hover, .uk-button-danger:focus { background-color: #e33551; - color: #ffffff; + color: #fff; background-image: none; } /* Active */ .uk-button-danger:active, .uk-button-danger.uk-active { background-color: #c91c37; - color: #ffffff; + color: #fff; background-image: none; border-color: rgba(0, 0, 0, 0.2); border-top-color: rgba(0, 0, 0, 0.4); @@ -3674,11 +3810,11 @@ select.uk-form-width-mini { /* Equal for all button types */ .uk-button:disabled { background-color: #fafafa; - color: #999999; + color: #999; border-color: rgba(0, 0, 0, 0.2); background-image: none; box-shadow: none; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* Modifier: `uk-button-link` ========================================================================== */ @@ -3696,17 +3832,17 @@ select.uk-form-width-mini { } /* Color */ .uk-button-link { - color: #0077dd; + color: #07D; } .uk-button-link:hover, .uk-button-link:focus, .uk-button-link:active, .uk-button-link.uk-active { - color: #005599; + color: #059; text-decoration: underline; } .uk-button-link:disabled { - color: #999999; + color: #999; } /* Focus */ .uk-button-link:focus { @@ -3805,7 +3941,9 @@ select.uk-form-width-mini { * the active state will not work if you click the icon inside the button * Workaround: Just use a `button` or `input` element as button */ -.uk-button-group .uk-button:active { +.uk-button-group .uk-button:hover, +.uk-button-group .uk-button:active, +.uk-button-group .uk-button.uk-active { position: relative; } /* ======================================================================== @@ -3813,8 +3951,7 @@ select.uk-form-width-mini { ========================================================================== */ @font-face { font-family: 'FontAwesome'; - src: url("../fonts/fontawesome-webfont.eot"); - src: url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2") format('woff2'), url("../fonts/fontawesome-webfont.woff") format("woff"), url("../fonts/fontawesome-webfont.ttf") format("truetype"); + src: url("../fonts/fontawesome-webfont.woff2") format('woff2'), url("../fonts/fontawesome-webfont.woff") format("woff"), url("../fonts/fontawesome-webfont.ttf") format("truetype"); font-weight: normal; font-style: normal; } @@ -3874,18 +4011,17 @@ select.uk-form-width-mini { /* Modifier: `uk-icon-hover` ========================================================================== */ .uk-icon-hover { - color: #999999; + color: #999; } /* * Hover */ .uk-icon-hover:hover { - color: #444444; + color: #444; } /* Modifier: `uk-icon-button` ========================================================================== */ .uk-icon-button { - -moz-box-sizing: border-box; box-sizing: border-box; display: inline-block; width: 35px; @@ -3893,15 +4029,15 @@ select.uk-form-width-mini { border-radius: 100%; background: #f7f7f7; line-height: 35px; - color: #444444; + color: #444; font-size: 18px; text-align: center; - border: 1px solid #cccccc; - border-bottom-color: #bbbbbb; + border: 1px solid #ccc; + border-bottom-color: #bbb; background-origin: border-box; - background-image: -webkit-linear-gradient(top, #ffffff, #eeeeee); - background-image: linear-gradient(to bottom, #ffffff, #eeeeee); - text-shadow: 0 1px 0 #ffffff; + background-image: -webkit-linear-gradient(top, #fff, #eee); + background-image: linear-gradient(to bottom, #fff, #eee); + text-shadow: 0 1px 0 #fff; } /* * Hover @@ -3911,7 +4047,7 @@ select.uk-form-width-mini { .uk-icon-button:hover, .uk-icon-button:focus { background-color: #fafafa; - color: #444444; + color: #444; /* 2 */ outline: none; background-image: none; @@ -3919,9 +4055,9 @@ select.uk-form-width-mini { /* Active */ .uk-icon-button:active { background-color: #f5f5f5; - color: #444444; - border-color: #cccccc; - border-top-color: #bbbbbb; + color: #444; + border-color: #ccc; + border-top-color: #bbb; background-image: none; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1); } @@ -5558,6 +5694,530 @@ select.uk-form-width-mini { .uk-icon-medium-logo:before { content: "\f23a"; } +.uk-icon-500px:before { + content: "\f26e"; +} +.uk-icon-amazon:before { + content: "\f270"; +} +.uk-icon-balance-scale:before { + content: "\f24e"; +} +.uk-icon-battery-empty:before, +.uk-icon-battery-0:before { + content: "\f244"; +} +.uk-icon-battery-quarter:before, +.uk-icon-battery-1:before { + content: "\f243"; +} +.uk-icon-battery-half:before, +.uk-icon-battery-2:before { + content: "\f242"; +} +.uk-icon-battery-three-quarters:before, +.uk-icon-battery-3:before { + content: "\f241"; +} +.uk-icon-battery-full:before, +.uk-icon-battery-4:before { + content: "\f240"; +} +.uk-icon-black-tie:before { + content: "\f27e"; +} +.uk-icon-calendar-check-o:before { + content: "\f274"; +} +.uk-icon-calendar-minus-o:before { + content: "\f272"; +} +.uk-icon-calendar-plus-o:before { + content: "\f271"; +} +.uk-icon-calendar-times-o:before { + content: "\f273"; +} +.uk-icon-cc-diners-club:before { + content: "\f24c"; +} +.uk-icon-cc-jcb:before { + content: "\f24b"; +} +.uk-icon-chrome:before { + content: "\f268"; +} +.uk-icon-clone:before { + content: "\f24d"; +} +.uk-icon-commenting:before { + content: "\f27a"; +} +.uk-icon-commenting-o:before { + content: "\f27b"; +} +.uk-icon-contao:before { + content: "\f26d"; +} +.uk-icon-creative-commons:before { + content: "\f25e"; +} +.uk-icon-expeditedssl:before { + content: "\f23e"; +} +.uk-icon-firefox:before { + content: "\f269"; +} +.uk-icon-fonticons:before { + content: "\f280"; +} +.uk-icon-get-pocket:before { + content: "\f265"; +} +.uk-icon-gg:before { + content: "\f260"; +} +.uk-icon-gg-circle:before { + content: "\f261"; +} +.uk-icon-hand-lizard-o:before { + content: "\f258"; +} +.uk-icon-hand-stop-o:before, +.uk-icon-hand-paper-o:before { + content: "\f256"; +} +.uk-icon-hand-peace-o:before { + content: "\f25b"; +} +.uk-icon-hand-pointer-o:before { + content: "\f25a"; +} +.uk-icon-hand-grab-o:before, +.uk-icon-hand-rock-o:before { + content: "\f255"; +} +.uk-icon-hand-scissors-o:before { + content: "\f257"; +} +.uk-icon-hand-spock-o:before { + content: "\f259"; +} +.uk-icon-hourglass:before { + content: "\f254"; +} +.uk-icon-hourglass-o:before { + content: "\f250"; +} +.uk-icon-hourglass-1:before, +.uk-icon-hourglass-start:before { + content: "\f251"; +} +.uk-icon-hourglass-2:before, +.uk-icon-hourglass-half:before { + content: "\f252"; +} +.uk-icon-hourglass-3:before, +.uk-icon-hourglass-end:before { + content: "\f253"; +} +.uk-icon-houzz:before { + content: "\f27c"; +} +.uk-icon-i-cursor:before { + content: "\f246"; +} +.uk-icon-industry:before { + content: "\f275"; +} +.uk-icon-internet-explorer:before { + content: "\f26b"; +} +.uk-icon-map:before { + content: "\f279"; +} +.uk-icon-map-o:before { + content: "\f278"; +} +.uk-icon-map-pin:before { + content: "\f276"; +} +.uk-icon-map-signs:before { + content: "\f277"; +} +.uk-icon-mouse-pointer:before { + content: "\f245"; +} +.uk-icon-object-group:before { + content: "\f247"; +} +.uk-icon-object-ungroup:before { + content: "\f248"; +} +.uk-icon-odnoklassniki:before { + content: "\f263"; +} +.uk-icon-odnoklassniki-square:before { + content: "\f264"; +} +.uk-icon-opencart:before { + content: "\f23d"; +} +.uk-icon-opera:before { + content: "\f26a"; +} +.uk-icon-optin-monster:before { + content: "\f23c"; +} +.uk-icon-registered:before { + content: "\f25d"; +} +.uk-icon-safari:before { + content: "\f267"; +} +.uk-icon-sticky-note:before { + content: "\f249"; +} +.uk-icon-sticky-note-o:before { + content: "\f24a"; +} +.uk-icon-tv:before, +.uk-icon-television:before { + content: "\f26c"; +} +.uk-icon-trademark:before { + content: "\f25c"; +} +.uk-icon-tripadvisor:before { + content: "\f262"; +} +.uk-icon-vimeo:before { + content: "\f27d"; +} +.uk-icon-wikipedia-w:before { + content: "\f266"; +} +.uk-icon-yc:before, +.uk-icon-y-combinator:before { + content: "\f23b"; +} +.uk-icon-yc-square:before, +.uk-icon-y-combinator-square:before { + content: "\f1d4"; +} +.uk-icon-bluetooth:before { + content: "\f293"; +} +.uk-icon-bluetooth-b:before { + content: "\f294"; +} +.uk-icon-codiepie:before { + content: "\f284"; +} +.uk-icon-credit-card-alt:before { + content: "\f283"; +} +.uk-icon-edge:before { + content: "\f282"; +} +.uk-icon-fort-awesome:before { + content: "\f286"; +} +.uk-icon-hashtag:before { + content: "\f292"; +} +.uk-icon-mixcloud:before { + content: "\f289"; +} +.uk-icon-modx:before { + content: "\f285"; +} +.uk-icon-pause-circle:before { + content: "\f28b"; +} +.uk-icon-pause-circle-o:before { + content: "\f28c"; +} +.uk-icon-percent:before { + content: "\f295"; +} +.uk-icon-product-hunt:before { + content: "\f288"; +} +.uk-icon-reddit-alien:before { + content: "\f281"; +} +.uk-icon-scribd:before { + content: "\f28a"; +} +.uk-icon-shopping-bag:before { + content: "\f290"; +} +.uk-icon-shopping-basket:before { + content: "\f291"; +} +.uk-icon-stop-circle:before { + content: "\f28d"; +} +.uk-icon-stop-circle-o:before { + content: "\f28e"; +} +.uk-icon-usb:before { + content: "\f287"; +} +.uk-icon-american-sign-language-interpreting:before, +.uk-icon-asl-interpreting:before { + content: "\f2a3"; +} +.uk-icon-assistive-listening-systems:before { + content: "\f2a2"; +} +.uk-icon-audio-description:before { + content: "\f29e"; +} +.uk-icon-blind:before { + content: "\f29d"; +} +.uk-icon-braille:before { + content: "\f2a1"; +} +.uk-icon-deaf:before, +.uk-icon-deafness:before { + content: "\f2a4"; +} +.uk-icon-envira:before { + content: "\f299"; +} +.uk-icon-font-awesome:before, +.uk-icon-fa:before { + content: "\f2b4"; +} +.uk-icon-first-order:before { + content: "\f2b0"; +} +.uk-icon-gitlab:before { + content: "\f296"; +} +.uk-icon-glide:before { + content: "\f2a5"; +} +.uk-icon-glide-g:before { + content: "\f2a6"; +} +.uk-icon-hard-of-hearing:before { + content: "\f2a4"; +} +.uk-icon-low-vision:before { + content: "\f2a8"; +} +.uk-icon-question-circle-o:before { + content: "\f29c"; +} +.uk-icon-sign-language:before, +.uk-icon-signing:before { + content: "\f2a7"; +} +.uk-icon-snapchat:before { + content: "\f2ab"; +} +.uk-icon-snapchat-ghost:before { + content: "\f2ac"; +} +.uk-icon-snapchat-square:before { + content: "\f2ad"; +} +.uk-icon-themeisle:before { + content: "\f2b2"; +} +.uk-icon-universal-access:before { + content: "\f29a"; +} +.uk-icon-viadeo:before { + content: "\f2a9"; +} +.uk-icon-viadeo-square:before { + content: "\f2aa"; +} +.uk-icon-volume-control-phone:before { + content: "\f2a0"; +} +.uk-icon-wheelchair-alt:before { + content: "\f29b"; +} +.uk-icon-wpbeginner:before { + content: "\f297"; +} +.uk-icon-wpforms:before { + content: "\f298"; +} +.uk-icon-yoast:before { + content: "\f2b1"; +} +.uk-icon-adress-book:before { + content: "\f2b9"; +} +.uk-icon-adress-book-o:before { + content: "\f2ba"; +} +.uk-icon-adress-card:before { + content: "\f2bb"; +} +.uk-icon-adress-card-o:before { + content: "\f2bc"; +} +.uk-icon-bandcamp:before { + content: "\f2d5"; +} +.uk-icon-bath:before { + content: "\f2cd"; +} +.uk-icon-bathub:before { + content: "\f2cd"; +} +.uk-icon-drivers-license:before { + content: "\f2c2"; +} +.uk-icon-drivers-license-o:before { + content: "\f2c3"; +} +.uk-icon-eercast:before { + content: "\f2da"; +} +.uk-icon-envelope-open:before { + content: "\f2b6"; +} +.uk-icon-envelope-open-o:before { + content: "\f2b7"; +} +.uk-icon-etsy:before { + content: "\f2d7"; +} +.uk-icon-free-code-camp:before { + content: "\f2c5"; +} +.uk-icon-grav:before { + content: "\f2d6"; +} +.uk-icon-handshake-o:before { + content: "\f2b5"; +} +.uk-icon-id-badge:before { + content: "\f2c1"; +} +.uk-icon-id-card:before { + content: "\f2c2"; +} +.uk-icon-id-card-o:before { + content: "\f2c3"; +} +.uk-icon-imdb:before { + content: "\f2d8"; +} +.uk-icon-linode:before { + content: "\f2b8"; +} +.uk-icon-meetup:before { + content: "\f2e0"; +} +.uk-icon-microchip:before { + content: "\f2db"; +} +.uk-icon-podcast:before { + content: "\f2ce"; +} +.uk-icon-quora:before { + content: "\f2c4"; +} +.uk-icon-ravelry:before { + content: "\f2d9"; +} +.uk-icon-s15:before { + content: "\f2cd"; +} +.uk-icon-shower:before { + content: "\f2cc"; +} +.uk-icon-snowflake-o:before { + content: "\f2dc"; +} +.uk-icon-superpowers:before { + content: "\f2dd"; +} +.uk-icon-telegram:before { + content: "\f2c6"; +} +.uk-icon-thermometer:before { + content: "\f2c7"; +} +.uk-icon-thermometer-0:before { + content: "\f2cb"; +} +.uk-icon-thermometer-1:before { + content: "\f2ca"; +} +.uk-icon-thermometer-2:before { + content: "\f2c9"; +} +.uk-icon-thermometer-3:before { + content: "\f2c8"; +} +.uk-icon-thermometer-4:before { + content: "\f2c7"; +} +.uk-icon-thermometer-empty:before { + content: "\f2cb"; +} +.uk-icon-thermometer-full:before { + content: "\f2c7"; +} +.uk-icon-thermometer-half:before { + content: "\f2c9"; +} +.uk-icon-thermometer-quarter:before { + content: "\f2ca"; +} +.uk-icon-thermometer-three-quarters:before { + content: "\f2c8"; +} +.uk-icon-times-rectangle:before { + content: "\f2d3"; +} +.uk-icon-times-rectangle-o:before { + content: "\f2d4"; +} +.uk-icon-user-circle:before { + content: "\f2bd"; +} +.uk-icon-user-circle-o:before { + content: "\f2be"; +} +.uk-icon-user-o:before { + content: "\f2c0"; +} +.uk-icon-vcard:before { + content: "\f2bb"; +} +.uk-icon-vcard-o:before { + content: "\f2bc"; +} +.uk-icon-widow-close:before { + content: "\f2d3"; +} +.uk-icon-widow-close-o:before { + content: "\f2d4"; +} +.uk-icon-window-maximize:before { + content: "\f2d0"; +} +.uk-icon-window-minimize:before { + content: "\f2d1"; +} +.uk-icon-window-restore:before { + content: "\f2d2"; +} +.uk-icon-wpexplorer:before { + content: "\f2de"; +} /* ======================================================================== Component: Close ========================================================================== */ @@ -5597,7 +6257,6 @@ select.uk-form-width-mini { background: transparent; /* 8 */ display: inline-block; - -moz-box-sizing: content-box; box-sizing: content-box; width: 20px; line-height: 20px; @@ -5632,7 +6291,7 @@ select.uk-form-width-mini { .uk-close-alt { padding: 2px; border-radius: 50%; - background: #ffffff; + background: #fff; opacity: 1; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 0 6px rgba(0, 0, 0, 0.3); } @@ -5659,7 +6318,7 @@ select.uk-form-width-mini { font-size: 10px; font-weight: bold; line-height: 14px; - color: #ffffff; + color: #fff; text-align: center; vertical-align: middle; text-transform: none; @@ -5675,12 +6334,11 @@ select.uk-form-width-mini { * Keep color when badge is a link */ a.uk-badge:hover { - color: #ffffff; + color: #fff; } /* Modifier: `uk-badge-notification`; ========================================================================== */ .uk-badge-notification { - -moz-box-sizing: border-box; box-sizing: border-box; min-width: 18px; border-radius: 500px; @@ -5723,7 +6381,7 @@ a.uk-badge:hover { color: #2d7091; border: 1px solid rgba(45, 112, 145, 0.3); border-radius: 4px; - text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #fff; } /* * Add margin if adjacent element @@ -5804,14 +6462,13 @@ a.uk-badge:hover { /* 2 */ max-width: 100%; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 3 */ margin: 0; /* 4 */ padding: 4px; - border: 1px solid #dddddd; - background: #ffffff; + border: 1px solid #ddd; + background: #fff; border-radius: 4px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); } @@ -5824,7 +6481,7 @@ a.uk-badge:hover { a.uk-thumbnail:hover, a.uk-thumbnail:focus { border-color: #aaaaaa; - background-color: #ffffff; + background-color: #fff; /* 2 */ text-decoration: none; /* 3 */ @@ -5836,7 +6493,7 @@ a.uk-thumbnail:focus { .uk-thumbnail-caption { padding-top: 4px; text-align: center; - color: #444444; + color: #444; } /* Sizes ========================================================================== */ @@ -5909,7 +6566,7 @@ a.uk-thumbnail:focus { right: 0; /* 2 */ padding: 20px; - color: #ffffff; + color: #fff; } /* * Remove margin from the last-child @@ -5986,7 +6643,7 @@ a.uk-thumbnail:focus { line-height: 1; font-family: FontAwesome; text-align: center; - color: #ffffff; + color: #fff; } /* Transitions ========================================================================== */ @@ -5998,7 +6655,7 @@ a.uk-thumbnail:focus { [class*='uk-overlay-slide'] { transition-duration: 0.3s; transition-timing-function: ease-out; - transition-property: opacity transform filter; + transition-property: opacity, transform, filter; } .uk-overlay-active .uk-overlay-fade, .uk-overlay-active .uk-overlay-scale, @@ -6013,6 +6670,7 @@ a.uk-thumbnail:focus { opacity: 0.7; } .uk-overlay-hover:hover .uk-overlay-fade, +.uk-overlay-hover.uk-hover .uk-overlay-fade, .uk-overlay-active .uk-active > .uk-overlay-fade { opacity: 1; } @@ -6024,6 +6682,7 @@ a.uk-thumbnail:focus { transform: scale(1); } .uk-overlay-hover:hover .uk-overlay-scale, +.uk-overlay-hover.uk-hover .uk-overlay-scale, .uk-overlay-active .uk-active > .uk-overlay-scale { -webkit-transform: scale(1.1); transform: scale(1.1); @@ -6036,6 +6695,7 @@ a.uk-thumbnail:focus { transform: scale(1) rotate(0deg); } .uk-overlay-hover:hover .uk-overlay-spin, +.uk-overlay-hover.uk-hover .uk-overlay-spin, .uk-overlay-active .uk-active > .uk-overlay-spin { -webkit-transform: scale(1.1) rotate(3deg); transform: scale(1.1) rotate(3deg); @@ -6048,6 +6708,7 @@ a.uk-thumbnail:focus { filter: grayscale(100%); } .uk-overlay-hover:hover .uk-overlay-grayscale, +.uk-overlay-hover.uk-hover .uk-overlay-grayscale, .uk-overlay-active .uk-active > .uk-overlay-grayscale { -webkit-filter: grayscale(0%); filter: grayscale(0%); @@ -6080,6 +6741,7 @@ a.uk-thumbnail:focus { } /* Hover */ .uk-overlay-hover:hover [class*='uk-overlay-slide'], +.uk-overlay-hover.uk-hover [class*='uk-overlay-slide'], .uk-overlay-active .uk-active > [class*='uk-overlay-slide'] { opacity: 1; -webkit-transform: translateX(0) translateY(0); @@ -6135,7 +6797,7 @@ a.uk-thumbnail:focus { line-height: 1; font-family: FontAwesome; text-align: center; - color: #ffffff; + color: #fff; } /* DEPRECATED * Sub-object `uk-overlay-area-content` @@ -6165,7 +6827,6 @@ a.uk-thumbnail:focus { .uk-overlay-area-content { /* 1 */ display: inline-block; - -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; vertical-align: middle; @@ -6175,7 +6836,7 @@ a.uk-thumbnail:focus { text-align: center; /* 4 */ padding: 0 15px; - color: #ffffff; + color: #fff; } /* * Remove margin from the last-child @@ -6207,7 +6868,7 @@ a.uk-thumbnail:focus { /* 2 */ padding: 15px; background: rgba(0, 0, 0, 0.5); - color: #ffffff; + color: #fff; /* 3 */ opacity: 0; -webkit-transition: opacity 0.15s linear; @@ -6225,6 +6886,153 @@ a.uk-thumbnail:focus { .uk-overlay-toggle.uk-hover .uk-overlay-caption { opacity: 1; } +/* ======================================================================== + Component: Column + ========================================================================== */ +[class*='uk-column-'] { + -webkit-column-gap: 25px; + -moz-column-gap: 25px; + column-gap: 25px; +} +/* Width modifiers + ========================================================================== */ +.uk-column-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; +} +.uk-column-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; +} +.uk-column-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; +} +.uk-column-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; +} +.uk-column-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; +} +/* Phone landscape and bigger */ +@media (min-width: 480px) { + .uk-column-small-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-small-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-small-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-small-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-small-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Tablet and bigger */ +@media (min-width: 768px) { + .uk-column-medium-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-medium-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-medium-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-medium-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-medium-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Desktop and bigger */ +@media (min-width: 960px) { + .uk-column-large-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-large-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-large-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-large-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-large-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} +/* Large screen and bigger */ +@media (min-width: 1220px) { + .uk-column-xlarge-1-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + } + .uk-column-xlarge-1-3 { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + } + .uk-column-xlarge-1-4 { + -webkit-column-count: 4; + -moz-column-count: 4; + column-count: 4; + } + .uk-column-xlarge-1-5 { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + .uk-column-xlarge-1-6 { + -webkit-column-count: 6; + -moz-column-count: 6; + column-count: 6; + } +} /* ======================================================================== Component: Animation ========================================================================== */ @@ -6784,39 +7592,46 @@ a.uk-thumbnail:focus { * 1. Hide by default * 2. Set position * 3. Box-sizing is needed for `uk-dropdown-justify` - * 4. Set style - * 5. Reset button group whitespace hack + * 4. Set width */ -.uk-dropdown { +.uk-dropdown, +.uk-dropdown-blank { /* 1 */ display: none; /* 2 */ position: absolute; - top: 100%; - left: 0; z-index: 1020; /* 3 */ - -moz-box-sizing: border-box; box-sizing: border-box; /* 4 */ width: 200px; - margin-top: 5px; +} +/* + * Dropdown style + * 1. Reset button group whitespace hack + */ +.uk-dropdown { padding: 15px; - background: #ffffff; - color: #444444; - /* 5 */ + background: #fff; + color: #444; + /* 1 */ font-size: 1rem; vertical-align: top; border: 1px solid #cbcbcb; border-radius: 4px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } +/* Focus */ +.uk-dropdown:focus { + outline: none; +} /* * 1. Show dropdown * 2. Set animation * 3. Needed for scale animation */ -.uk-open > .uk-dropdown { +.uk-open > .uk-dropdown, +.uk-open > .uk-dropdown-blank { /* 1 */ display: block; /* 2 */ @@ -6829,20 +7644,19 @@ a.uk-thumbnail:focus { /* Alignment modifiers ========================================================================== */ /* - * Modifier `uk-dropdown-flip` + * Modifier */ -.uk-dropdown-flip { - left: auto; - right: 0; +.uk-dropdown-top { + margin-top: -5px; } -/* - * Modifier `uk-dropdown-up` - */ -.uk-dropdown-up { - top: auto; - bottom: 100%; - margin-top: auto; - margin-bottom: 5px; +.uk-dropdown-bottom { + margin-top: 5px; +} +.uk-dropdown-left { + margin-left: -5px; +} +.uk-dropdown-right { + margin-left: 5px; } /* Nav in dropdown ========================================================================== */ @@ -6882,7 +7696,7 @@ a.uk-thumbnail:focus { * Column divider */ .uk-dropdown:not(.uk-dropdown-stack) > .uk-dropdown-grid > [class*='uk-width-']:nth-child(n+2) { - border-left: 1px solid #dddddd; + border-left: 1px solid #ddd; } /* * Width multiplier for dropdown columns @@ -6945,8 +7759,8 @@ a.uk-thumbnail:focus { ========================================================================== */ .uk-dropdown-navbar { margin-top: 6px; - background: #ffffff; - color: #444444; + background: #fff; + color: #444; left: -1px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } @@ -6963,6 +7777,8 @@ a.uk-thumbnail:focus { overflow-y: auto; max-height: 200px; } +/* Sub-object: `uk-dropdown-overlay` + ========================================================================== */ .uk-dropdown-navbar.uk-dropdown-flip { left: auto; } @@ -7029,7 +7845,6 @@ a.uk-thumbnail:focus { /* 1 */ position: relative; /* 2 */ - -moz-box-sizing: border-box; box-sizing: border-box; margin: 50px auto; padding: 20px; @@ -7037,7 +7852,7 @@ a.uk-thumbnail:focus { max-width: 100%; max-width: calc(100% - 20px); /* 3 */ - background: #ffffff; + background: #fff; /* 4 */ opacity: 0; -webkit-transform: translateY(-100px); @@ -7091,6 +7906,7 @@ a.uk-thumbnail:focus { padding: 0; max-width: 95%; max-width: calc(100% - 30px); + min-height: 50px; border-radius: 0; } /* @@ -7110,6 +7926,27 @@ a.uk-thumbnail:focus { right: -7px; } } +/* Modifier: `uk-modal-dialog-blank` + ========================================================================== */ +.uk-modal-dialog-blank { + margin: 0; + padding: 0; + width: 100%; + max-width: 100%; + -webkit-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} +/* +* Close button +*/ +.uk-modal-dialog-blank > .uk-close:first-child { + position: absolute; + top: 20px; + right: 20px; + z-index: 1; + margin: 0; + float: none; +} /* Modifier: `uk-modal-dialog-large` ========================================================================== */ /* Tablet and bigger */ @@ -7130,7 +7967,7 @@ a.uk-thumbnail:focus { margin-bottom: 15px; margin: -20px -20px 15px -20px; padding: 20px; - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0; background: #fafafa; } @@ -7138,7 +7975,7 @@ a.uk-thumbnail:focus { margin-top: 15px; margin: 15px -20px -20px -20px; padding: 20px; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; border-radius: 0 0 4px 4px; background: #fafafa; } @@ -7157,7 +7994,7 @@ a.uk-thumbnail:focus { right: 0; bottom: -20px; margin-bottom: -10px; - color: #ffffff; + color: #fff; text-align: center; overflow: hidden; text-overflow: ellipsis; @@ -7176,6 +8013,7 @@ a.uk-thumbnail:focus { } .uk-modal-spinner:after { content: "\f110"; + display: block; font-family: FontAwesome; -webkit-animation: uk-rotate 2s infinite linear; animation: uk-rotate 2s infinite linear; @@ -7214,6 +8052,7 @@ a.uk-thumbnail:focus { * Prepares the whole HTML page to slide-out * 1. Fix the main page and disallow scrolling * 2. Side-out transition + * 3. Needed for the transition to work instead of just letting it pop to the side */ .uk-offcanvas-page { /* 1 */ @@ -7221,6 +8060,8 @@ a.uk-thumbnail:focus { /* 2 */ -webkit-transition: margin-left 0.3s ease-in-out; transition: margin-left 0.3s ease-in-out; + /* 3 */ + margin-left: 0; } /* Sub-object `uk-offcanvas-bar` ========================================================================== */ @@ -7230,7 +8071,7 @@ a.uk-thumbnail:focus { * 2. Size and style * 3. Allow scrolling * 4. Side-out transition - * 5. Deavtivate scroll chaining in IE11 + * 5. Deactivate scroll chaining in IE11 */ .uk-offcanvas-bar { /* 1 */ @@ -7244,7 +8085,7 @@ a.uk-thumbnail:focus { /* 2 */ width: 270px; max-width: 100%; - background: #333333; + background: #333; /* 3 */ overflow-y: auto; -webkit-overflow-scrolling: touch; @@ -7266,21 +8107,49 @@ a.uk-thumbnail:focus { -webkit-transform: translateX(100%); transform: translateX(100%); } +/* Offcanvase modes + ========================================================================== */ +.uk-offcanvas-bar[mode='none'] { + -webkit-transition: none; + transition: none; +} +.uk-offcanvas-bar[mode='reveal'] { + -webkit-transform: translateX(0%); + transform: translateX(0%); + clip: rect(0, 0, 100vh, 0); + -webkit-transition: -webkit-transform 0.3s ease-in-out, clip 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, clip 0.3s ease-in-out; +} +.uk-offcanvas-bar-flip[mode='reveal'] { + clip: none; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} +.uk-offcanvas-bar-flip[mode='reveal'] > * { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + -webkit-transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; +} +.uk-offcanvas.uk-active .uk-offcanvas-bar-flip[mode='reveal'].uk-offcanvas-bar-show > * { + -webkit-transform: translateX(0%); + transform: translateX(0%); +} /* Panel in offcanvas ========================================================================== */ .uk-offcanvas .uk-panel { margin: 20px 15px; - color: #777777; + color: #777; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); } .uk-offcanvas .uk-panel-title { - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-panel a:not([class]) { - color: #cccccc; + color: #ccc; } .uk-offcanvas .uk-panel a:not([class]):hover { - color: #ffffff; + color: #fff; } .uk-offcanvas-bar:after { content: ""; @@ -7341,7 +8210,7 @@ a.uk-thumbnail:focus { /* Color modifiers ========================================================================== */ .uk-text-muted { - color: #999999 !important; + color: #999 !important; } .uk-text-primary { color: #2d7091 !important; @@ -7356,7 +8225,7 @@ a.uk-thumbnail:focus { color: #d85030 !important; } .uk-text-contrast { - color: #ffffff !important; + color: #fff !important; } /* Alignment modifiers ========================================================================== */ @@ -7425,13 +8294,23 @@ a.uk-thumbnail:focus { -moz-hyphens: auto; hyphens: auto; } +/* Transform modifiers + ========================================================================== */ +.uk-text-capitalize { + text-transform: capitalize !important; +} +.uk-text-lowercase { + text-transform: lowercase !important; +} +.uk-text-uppercase { + text-transform: uppercase !important; +} /* ======================================================================== Component: Utility ========================================================================== */ /* Container ========================================================================== */ .uk-container { - -moz-box-sizing: border-box; box-sizing: border-box; max-width: 980px; padding: 0 25px; @@ -7525,12 +8404,10 @@ a.uk-thumbnail:focus { @media (min-width: 768px) { .uk-align-medium-left { margin-right: 15px; - margin-bottom: 15px; float: left; } .uk-align-medium-right { margin-left: 15px; - margin-bottom: 15px; float: right; } } @@ -7578,7 +8455,6 @@ a.uk-thumbnail:focus { * More robust if padding and border are used */ [class*='uk-height'] { - -moz-box-sizing: border-box; box-sizing: border-box; } /* @@ -7602,7 +8478,6 @@ a.uk-thumbnail:focus { */ .uk-responsive-width, .uk-responsive-height { - -moz-box-sizing: border-box; box-sizing: border-box; } /* @@ -7742,11 +8617,11 @@ a.uk-thumbnail:focus { */ .uk-link-muted, .uk-link-muted a { - color: #444444; + color: #444; } .uk-link-muted:hover, .uk-link-muted a:hover { - color: #444444; + color: #444; } /* * Reset link style @@ -7775,11 +8650,10 @@ a.uk-thumbnail:focus { * Box with scrolling enabled */ .uk-scrollable-box { - -moz-box-sizing: border-box; box-sizing: border-box; height: 170px; padding: 10px; - border: 1px solid #dddddd; + border: 1px solid #ddd; overflow: auto; -webkit-overflow-scrolling: touch; resize: both; @@ -7810,13 +8684,16 @@ a.uk-thumbnail:focus { [class*='uk-position-bottom'] { position: absolute !important; } +/* Don't use `width: 100%` because it is wrong if the parent has padding. */ .uk-position-top { top: 0; - width: 100%; + left: 0; + right: 0; } .uk-position-bottom { bottom: 0; - width: 100%; + left: 0; + right: 0; } .uk-position-top-left { top: 0; @@ -7860,6 +8737,7 @@ a.uk-thumbnail:focus { ========================================================================== */ /* * Display + * 1. Required if child is a responsive image */ .uk-display-block { display: block !important; @@ -7869,6 +8747,8 @@ a.uk-thumbnail:focus { } .uk-display-inline-block { display: inline-block !important; + /* 1 */ + max-width: 100%; } /* * Visibility @@ -8170,7 +9050,8 @@ a.uk-thumbnail:focus { Component: Contrast ========================================================================== */ .uk-contrast { - color: #ffffff; + color: #fff; + /* Active */ } .uk-contrast a:not([class]), .uk-contrast .uk-link { @@ -8179,18 +9060,18 @@ a.uk-thumbnail:focus { } .uk-contrast a:not([class]):hover, .uk-contrast .uk-link:hover { - color: #ffffff; + color: #fff; text-decoration: underline; } .uk-contrast :not(pre) > code, .uk-contrast :not(pre) > kbd, .uk-contrast :not(pre) > samp { - color: #ffffff; + color: #fff; border-color: rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.1); } .uk-contrast em { - color: #ffffff; + color: #fff; } .uk-contrast h1, .uk-contrast h2, @@ -8198,7 +9079,7 @@ a.uk-thumbnail:focus { .uk-contrast h4, .uk-contrast h5, .uk-contrast h6 { - color: #ffffff; + color: #fff; } .uk-contrast hr { border-top-color: rgba(255, 255, 255, 0.2); @@ -8208,21 +9089,21 @@ a.uk-thumbnail:focus { text-decoration: none; } .uk-contrast .uk-nav-side > li > a { - color: #ffffff; + color: #fff; } .uk-contrast .uk-nav-side > li > a:hover, .uk-contrast .uk-nav-side > li > a:focus { background: rgba(255, 255, 255, 0.1); - color: #ffffff; + color: #fff; text-shadow: none; } .uk-contrast .uk-nav-side > li.uk-active > a { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; text-shadow: none; } .uk-contrast .uk-nav-side .uk-nav-header { - color: #ffffff; + color: #fff; } .uk-contrast .uk-nav-side .uk-nav-divider { border-top-color: rgba(255, 255, 255, 0.2); @@ -8231,7 +9112,7 @@ a.uk-thumbnail:focus { color: rgba(255, 255, 255, 0.7); } .uk-contrast .uk-nav-side ul a:hover { - color: #ffffff; + color: #fff; } .uk-contrast .uk-subnav > * > a { color: rgba(255, 255, 255, 0.7); @@ -8239,11 +9120,11 @@ a.uk-thumbnail:focus { } .uk-contrast .uk-subnav > * > a:hover, .uk-contrast .uk-subnav > * > a:focus { - color: #ffffff; + color: #fff; text-decoration: none; } .uk-contrast .uk-subnav > .uk-active > a { - color: #ffffff; + color: #fff; } .uk-contrast .uk-subnav-line > :nth-child(n+2):before { border-left-color: rgba(255, 255, 255, 0.2); @@ -8251,12 +9132,40 @@ a.uk-thumbnail:focus { .uk-contrast .uk-subnav-pill > * > a:hover, .uk-contrast .uk-subnav-pill > * > a:focus { background: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; text-decoration: none; } .uk-contrast .uk-subnav-pill > .uk-active > a { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; +} +.uk-contrast .uk-tab { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-contrast .uk-tab > li > a { + border-color: transparent; + color: rgba(255, 255, 255, 0.7); + text-shadow: none; +} +.uk-contrast .uk-tab > li > a:hover, +.uk-contrast .uk-tab > li > a:focus, +.uk-contrast .uk-tab > li.uk-open > a { + border-color: rgba(255, 255, 255, 0.7); + background: rgba(255, 255, 255, 0.7); + color: #444; + text-decoration: none; +} +.uk-contrast .uk-tab > li.uk-active > a { + border-color: rgba(255, 255, 255, 0.2); + border-bottom-color: transparent; + background: #fff; + color: #444; +} +.uk-contrast .uk-tab-center { + border-bottom-color: rgba(255, 255, 255, 0.2); +} +.uk-contrast .uk-tab-grid:before { + border-top-color: rgba(255, 255, 255, 0.2); } .uk-contrast .uk-list-line > li:nth-child(n+2) { border-top-color: rgba(255, 255, 255, 0.2); @@ -8280,7 +9189,7 @@ a.uk-thumbnail:focus { .uk-contrast .uk-form input[type="color"] { border-color: rgba(255, 255, 255, 0.8); background: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; background-clip: padding-box; } .uk-contrast .uk-form select:focus, @@ -8300,9 +9209,9 @@ a.uk-thumbnail:focus { .uk-contrast .uk-form input[type="search"]:focus, .uk-contrast .uk-form input[type="tel"]:focus, .uk-contrast .uk-form input[type="color"]:focus { - border-color: #ffffff; - background: #ffffff; - color: #444444; + border-color: #fff; + background: #fff; + color: #444; } .uk-contrast .uk-form :-ms-input-placeholder { color: rgba(68, 68, 68, 0.7) !important; @@ -8314,56 +9223,56 @@ a.uk-thumbnail:focus { color: rgba(68, 68, 68, 0.7); } .uk-contrast .uk-button { - color: #444444; - background: #ffffff; + color: #444; + background: #fff; border-color: transparent; } .uk-contrast .uk-button:hover, .uk-contrast .uk-button:focus { background-color: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; border-color: transparent; } .uk-contrast .uk-button:active, .uk-contrast .uk-button.uk-active { background-color: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; box-shadow: none; } .uk-contrast .uk-button-primary { background-color: #009dd8; - color: #ffffff; + color: #fff; } .uk-contrast .uk-button-primary:hover, .uk-contrast .uk-button-primary:focus { background-color: #00aff2; - color: #ffffff; + color: #fff; } .uk-contrast .uk-button-primary:active, .uk-contrast .uk-button-primary.uk-active { background-color: #008abf; - color: #ffffff; + color: #fff; } .uk-contrast .uk-icon-hover { color: rgba(255, 255, 255, 0.7); } .uk-contrast .uk-icon-hover:hover { - color: #ffffff; + color: #fff; } .uk-contrast .uk-icon-button { - background: #ffffff; - color: #444444; + background: #fff; + color: #444; border-color: transparent; } .uk-contrast .uk-icon-button:hover, .uk-contrast .uk-icon-button:focus { background-color: rgba(255, 255, 255, 0.8); - color: #444444; + color: #444; border-color: transparent; } .uk-contrast .uk-icon-button:active { background-color: rgba(255, 255, 255, 0.7); - color: #444444; + color: #444; box-shadow: none; } .uk-contrast .uk-text-muted { @@ -8376,7 +9285,9 @@ a.uk-thumbnail:focus { Component: Print ========================================================================== */ @media print { - * { + *, + *:before, + *:after { background: transparent !important; color: black !important; box-shadow: none !important; diff --git a/media/uikit-v2/css/uikit.gradient.min.css b/media/uikit-v2/css/uikit.gradient.min.css new file mode 100644 index 0000000..48ce758 --- /dev/null +++ b/media/uikit-v2/css/uikit.gradient.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +html{font:400 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;background:#fff;color:#444;background-image:-webkit-radial-gradient(100% 100%,center,#fff,#fff);background-image:radial-gradient(100% 100% at center,#fff,#fff)}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}.uk-link,a{color:#07D;text-decoration:none;cursor:pointer}.uk-link:hover,a:hover{color:#059;text-decoration:underline}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-size:12px;font-family:Consolas,monospace,serif;color:#D05;white-space:nowrap;padding:0 4px;border:1px solid #ddd;border-radius:3px;background:#fafafa}em{color:#D05}ins{background:#ffa;color:#444;text-decoration:none}mark{background:#ffa;color:#444}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}.uk-img-preserve,.uk-img-preserve audio,.uk-img-preserve canvas,.uk-img-preserve img,.uk-img-preserve svg,.uk-img-preserve video{max-width:none}img{border:0}svg:not(:root){overflow:hidden}blockquote,figure{margin:0}address,blockquote,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 15px 0}*+address,*+blockquote,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:15px}h1,h2,h3,h4,h5,h6{margin:0 0 15px 0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;color:#444;text-transform:none}*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:25px}.uk-h1,h1{font-size:36px;line-height:42px}.uk-h2,h2{font-size:24px;line-height:30px}.uk-h3,h3{font-size:18px;line-height:24px}.uk-h4,h4{font-size:16px;line-height:22px}.uk-h5,h5{font-size:14px;line-height:20px}.uk-h6,h6{font-size:12px;line-height:18px}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}hr{box-sizing:content-box;height:0;margin:15px 0;border:0;border-top:1px solid #ddd}address{font-style:normal}blockquote{padding-left:15px;border-left:5px solid #ddd;font-size:16px;line-height:22px;font-style:italic}pre{padding:10px;background:#fafafa;font:12px/18px Consolas,monospace,serif;color:#444;-moz-tab-size:4;tab-size:4;overflow:auto;border:1px solid #ddd;border-radius:3px}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}article,aside,details,figcaption,figure,footer,header,main,nav,section,summary{display:block}progress{vertical-align:baseline}audio:not([controls]){display:none}[hidden],template{display:none}iframe{border:0}@media screen and (max-width:400px){@-ms-viewport{width:device-width}}.uk-grid{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid:after,.uk-grid:before{content:"";display:block;overflow:hidden}.uk-grid:after{clear:both}.uk-grid>*{-ms-flex:none;-webkit-flex:none;flex:none;margin:0;float:left}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-25px}.uk-grid>*{padding-left:25px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:25px}@media (min-width:1220px){.uk-grid{margin-left:-35px}.uk-grid>*{padding-left:35px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:35px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid-collapse+.uk-grid-collapse,.uk-grid-collapse>*>.uk-panel+.uk-panel,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-small{margin-left:-10px}.uk-grid-small>*{padding-left:10px}.uk-grid-small+.uk-grid-small,.uk-grid-small>*>.uk-panel+.uk-panel,.uk-grid-small>.uk-grid-margin{margin-top:10px}.uk-grid-medium{margin-left:-25px}.uk-grid-medium>*{padding-left:25px}.uk-grid-medium+.uk-grid-medium,.uk-grid-medium>*>.uk-panel+.uk-panel,.uk-grid-medium>.uk-grid-margin{margin-top:25px}@media (min-width:960px){.uk-grid-large{margin-left:-35px}.uk-grid-large>*{padding-left:35px}.uk-grid-large+.uk-grid-large,.uk-grid-large-margin,.uk-grid-large>*>.uk-panel+.uk-panel{margin-top:35px}}@media (min-width:1220px){.uk-grid-large{margin-left:-50px}.uk-grid-large>*{padding-left:50px}.uk-grid-large+.uk-grid-large,.uk-grid-large-margin,.uk-grid-large>*>.uk-panel+.uk-panel{margin-top:50px}}.uk-grid-divider:not(:empty){margin-left:-25px;margin-right:-25px}.uk-grid-divider>*{padding-left:25px;padding-right:25px}.uk-grid-divider>[class*=uk-width-9-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-1-]:not(.uk-width-1-1):nth-child(n+2),.uk-grid-divider>[class*=uk-width-2-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-3-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-4-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-5-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-6-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-7-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-8-]:nth-child(n+2){border-left:1px solid #ddd}@media (min-width:768px){.uk-grid-divider>[class*=uk-width-medium-]:not(.uk-width-medium-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:960px){.uk-grid-divider>[class*=uk-width-large-]:not(.uk-width-large-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:1220px){.uk-grid-divider:not(:empty){margin-left:-35px;margin-right:-35px}.uk-grid-divider>*{padding-left:35px;padding-right:35px}.uk-grid-divider:empty{margin-top:35px;margin-bottom:35px}}.uk-grid-divider:empty{margin-top:25px;margin-bottom:25px;border-top:1px solid #ddd}.uk-grid-match>*{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-grid-match>*>*{-ms-flex:none;-webkit-flex:none;flex:none;box-sizing:border-box;width:100%}[class*=uk-grid-width]>*{box-sizing:border-box;width:100%}.uk-grid-width-1-2>*{width:50%}.uk-grid-width-1-3>*{width:33.333%}.uk-grid-width-1-4>*{width:25%}.uk-grid-width-1-5>*{width:20%}.uk-grid-width-1-6>*{width:16.666%}.uk-grid-width-1-10>*{width:10%}.uk-grid-width-auto>*{width:auto}@media (min-width:480px){.uk-grid-width-small-1-1>*{width:100%}.uk-grid-width-small-1-2>*{width:50%}.uk-grid-width-small-1-3>*{width:33.333%}.uk-grid-width-small-1-4>*{width:25%}.uk-grid-width-small-1-5>*{width:20%}.uk-grid-width-small-1-6>*{width:16.666%}.uk-grid-width-small-1-10>*{width:10%}}@media (min-width:768px){.uk-grid-width-medium-1-1>*{width:100%}.uk-grid-width-medium-1-2>*{width:50%}.uk-grid-width-medium-1-3>*{width:33.333%}.uk-grid-width-medium-1-4>*{width:25%}.uk-grid-width-medium-1-5>*{width:20%}.uk-grid-width-medium-1-6>*{width:16.666%}.uk-grid-width-medium-1-10>*{width:10%}}@media (min-width:960px){.uk-grid-width-large-1-1>*{width:100%}.uk-grid-width-large-1-2>*{width:50%}.uk-grid-width-large-1-3>*{width:33.333%}.uk-grid-width-large-1-4>*{width:25%}.uk-grid-width-large-1-5>*{width:20%}.uk-grid-width-large-1-6>*{width:16.666%}.uk-grid-width-large-1-10>*{width:10%}}@media (min-width:1220px){.uk-grid-width-xlarge-1-1>*{width:100%}.uk-grid-width-xlarge-1-2>*{width:50%}.uk-grid-width-xlarge-1-3>*{width:33.333%}.uk-grid-width-xlarge-1-4>*{width:25%}.uk-grid-width-xlarge-1-5>*{width:20%}.uk-grid-width-xlarge-1-6>*{width:16.666%}.uk-grid-width-xlarge-1-10>*{width:10%}}[class*=uk-width]{box-sizing:border-box;width:100%}.uk-width-1-1{width:100%}.uk-width-1-2,.uk-width-2-4,.uk-width-3-6,.uk-width-5-10{width:50%}.uk-width-1-3,.uk-width-2-6{width:33.333%}.uk-width-2-3,.uk-width-4-6{width:66.666%}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5,.uk-width-2-10{width:20%}.uk-width-2-5,.uk-width-4-10{width:40%}.uk-width-3-5,.uk-width-6-10{width:60%}.uk-width-4-5,.uk-width-8-10{width:80%}.uk-width-1-6{width:16.666%}.uk-width-5-6{width:83.333%}.uk-width-1-10{width:10%}.uk-width-3-10{width:30%}.uk-width-7-10{width:70%}.uk-width-9-10{width:90%}@media (min-width:480px){.uk-width-small-1-1{width:100%}.uk-width-small-1-2,.uk-width-small-2-4,.uk-width-small-3-6,.uk-width-small-5-10{width:50%}.uk-width-small-1-3,.uk-width-small-2-6{width:33.333%}.uk-width-small-2-3,.uk-width-small-4-6{width:66.666%}.uk-width-small-1-4{width:25%}.uk-width-small-3-4{width:75%}.uk-width-small-1-5,.uk-width-small-2-10{width:20%}.uk-width-small-2-5,.uk-width-small-4-10{width:40%}.uk-width-small-3-5,.uk-width-small-6-10{width:60%}.uk-width-small-4-5,.uk-width-small-8-10{width:80%}.uk-width-small-1-6{width:16.666%}.uk-width-small-5-6{width:83.333%}.uk-width-small-1-10{width:10%}.uk-width-small-3-10{width:30%}.uk-width-small-7-10{width:70%}.uk-width-small-9-10{width:90%}}@media (min-width:768px){.uk-width-medium-1-1{width:100%}.uk-width-medium-1-2,.uk-width-medium-2-4,.uk-width-medium-3-6,.uk-width-medium-5-10{width:50%}.uk-width-medium-1-3,.uk-width-medium-2-6{width:33.333%}.uk-width-medium-2-3,.uk-width-medium-4-6{width:66.666%}.uk-width-medium-1-4{width:25%}.uk-width-medium-3-4{width:75%}.uk-width-medium-1-5,.uk-width-medium-2-10{width:20%}.uk-width-medium-2-5,.uk-width-medium-4-10{width:40%}.uk-width-medium-3-5,.uk-width-medium-6-10{width:60%}.uk-width-medium-4-5,.uk-width-medium-8-10{width:80%}.uk-width-medium-1-6{width:16.666%}.uk-width-medium-5-6{width:83.333%}.uk-width-medium-1-10{width:10%}.uk-width-medium-3-10{width:30%}.uk-width-medium-7-10{width:70%}.uk-width-medium-9-10{width:90%}}@media (min-width:960px){.uk-width-large-1-1{width:100%}.uk-width-large-1-2,.uk-width-large-2-4,.uk-width-large-3-6,.uk-width-large-5-10{width:50%}.uk-width-large-1-3,.uk-width-large-2-6{width:33.333%}.uk-width-large-2-3,.uk-width-large-4-6{width:66.666%}.uk-width-large-1-4{width:25%}.uk-width-large-3-4{width:75%}.uk-width-large-1-5,.uk-width-large-2-10{width:20%}.uk-width-large-2-5,.uk-width-large-4-10{width:40%}.uk-width-large-3-5,.uk-width-large-6-10{width:60%}.uk-width-large-4-5,.uk-width-large-8-10{width:80%}.uk-width-large-1-6{width:16.666%}.uk-width-large-5-6{width:83.333%}.uk-width-large-1-10{width:10%}.uk-width-large-3-10{width:30%}.uk-width-large-7-10{width:70%}.uk-width-large-9-10{width:90%}}@media (min-width:1220px){.uk-width-xlarge-1-1{width:100%}.uk-width-xlarge-1-2,.uk-width-xlarge-2-4,.uk-width-xlarge-3-6,.uk-width-xlarge-5-10{width:50%}.uk-width-xlarge-1-3,.uk-width-xlarge-2-6{width:33.333%}.uk-width-xlarge-2-3,.uk-width-xlarge-4-6{width:66.666%}.uk-width-xlarge-1-4{width:25%}.uk-width-xlarge-3-4{width:75%}.uk-width-xlarge-1-5,.uk-width-xlarge-2-10{width:20%}.uk-width-xlarge-2-5,.uk-width-xlarge-4-10{width:40%}.uk-width-xlarge-3-5,.uk-width-xlarge-6-10{width:60%}.uk-width-xlarge-4-5,.uk-width-xlarge-8-10{width:80%}.uk-width-xlarge-1-6{width:16.666%}.uk-width-xlarge-5-6{width:83.333%}.uk-width-xlarge-1-10{width:10%}.uk-width-xlarge-3-10{width:30%}.uk-width-xlarge-7-10{width:70%}.uk-width-xlarge-9-10{width:90%}}@media (min-width:768px){[class*=uk-push-],[class*=uk-pull-]{position:relative}.uk-push-1-2,.uk-push-2-4,.uk-push-3-6,.uk-push-5-10{left:50%}.uk-push-1-3,.uk-push-2-6{left:33.333%}.uk-push-2-3,.uk-push-4-6{left:66.666%}.uk-push-1-4{left:25%}.uk-push-3-4{left:75%}.uk-push-1-5,.uk-push-2-10{left:20%}.uk-push-2-5,.uk-push-4-10{left:40%}.uk-push-3-5,.uk-push-6-10{left:60%}.uk-push-4-5,.uk-push-8-10{left:80%}.uk-push-1-6{left:16.666%}.uk-push-5-6{left:83.333%}.uk-push-1-10{left:10%}.uk-push-3-10{left:30%}.uk-push-7-10{left:70%}.uk-push-9-10{left:90%}.uk-pull-1-2,.uk-pull-2-4,.uk-pull-3-6,.uk-pull-5-10{left:-50%}.uk-pull-1-3,.uk-pull-2-6{left:-33.333%}.uk-pull-2-3,.uk-pull-4-6{left:-66.666%}.uk-pull-1-4{left:-25%}.uk-pull-3-4{left:-75%}.uk-pull-1-5,.uk-pull-2-10{left:-20%}.uk-pull-2-5,.uk-pull-4-10{left:-40%}.uk-pull-3-5,.uk-pull-6-10{left:-60%}.uk-pull-4-5,.uk-pull-8-10{left:-80%}.uk-pull-1-6{left:-16.666%}.uk-pull-5-6{left:-83.333%}.uk-pull-1-10{left:-10%}.uk-pull-3-10{left:-30%}.uk-pull-7-10{left:-70%}.uk-pull-9-10{left:-90%}}.uk-panel{display:block;position:relative}.uk-panel,.uk-panel:hover{text-decoration:none}.uk-panel:after,.uk-panel:before{content:"";display:table}.uk-panel:after{clear:both}.uk-panel>:not(.uk-panel-title):last-child{margin-bottom:0}.uk-panel-title{margin-top:0;margin-bottom:15px;font-size:18px;line-height:24px;font-weight:400;text-transform:none;color:#444}.uk-panel-badge{position:absolute;top:0;right:0;z-index:1}.uk-panel-teaser{margin-bottom:15px}.uk-panel-body{padding:15px}.uk-panel-box{padding:15px;background:#fafafa;color:#444;border:1px solid #ddd;border-radius:4px}.uk-panel-box-hover:hover{color:#444}.uk-panel-box .uk-panel-title{color:#444}.uk-panel-box .uk-panel-badge{top:10px;right:10px}.uk-panel-box>.uk-panel-teaser{margin-top:-16px;margin-left:-16px;margin-right:-16px}.uk-panel-box>.uk-nav-side{margin:0 -15px}.uk-panel-box-primary{background-color:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-panel-box-primary-hover:hover{color:#2d7091}.uk-panel-box-primary .uk-panel-title{color:#2d7091}.uk-panel-box-secondary{background-color:#fff;color:#444}.uk-panel-box-secondary-hover:hover{color:#444}.uk-panel-box-secondary .uk-panel-title{color:#444}.uk-panel-hover{padding:15px;color:#444;border:1px solid transparent;border-radius:4px}.uk-panel-hover:hover{background:#fafafa;color:#444;border-color:#ddd}.uk-panel-hover .uk-panel-badge{top:10px;right:10px}.uk-panel-hover>.uk-panel-teaser{margin-top:-16px;margin-left:-16px;margin-right:-16px}.uk-panel-header .uk-panel-title{padding-bottom:10px;border-bottom:1px solid #ddd;color:#444}.uk-panel-space{padding:30px}.uk-panel-space .uk-panel-badge{top:30px;right:30px}.uk-panel+.uk-panel-divider{margin-top:50px!important}.uk-panel+.uk-panel-divider:before{content:"";display:block;position:absolute;top:-25px;left:0;right:0;border-top:1px solid #ddd}@media (min-width:1220px){.uk-panel+.uk-panel-divider{margin-top:70px!important}.uk-panel+.uk-panel-divider:before{top:-35px}}.uk-panel-box .uk-panel-teaser{border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden;-webkit-transform:translateZ(0)}.uk-block{position:relative;box-sizing:border-box;padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block{padding-top:50px;padding-bottom:50px}}.uk-block:after,.uk-block:before{content:"";display:table}.uk-block:after{clear:both}.uk-block>:last-child{margin-bottom:0}.uk-block-large{padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block-large{padding-top:50px;padding-bottom:50px}}@media (min-width:960px){.uk-block-large{padding-top:100px;padding-bottom:100px}}.uk-block-default{background:#fff}.uk-block-muted{background:#f9f9f9}.uk-block-primary{background:#00a8e6}.uk-block-secondary{background:#222}.uk-block-default+.uk-block-default,.uk-block-muted+.uk-block-muted,.uk-block-primary+.uk-block-primary,.uk-block-secondary+.uk-block-secondary{padding-top:0}.uk-article:after,.uk-article:before{content:"";display:table}.uk-article:after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:25px}.uk-article-title{font-size:36px;line-height:42px;font-weight:400;text-transform:none}.uk-article-title a{color:inherit;text-decoration:none}.uk-article-meta{font-size:12px;line-height:18px;color:#999}.uk-article-lead{color:#444;font-size:18px;line-height:24px;font-weight:400}.uk-article-divider{margin-bottom:25px;border-color:#ddd}*+.uk-article-divider{margin-top:25px}.uk-article+.uk-article{padding-top:25px;border-top:1px solid #ddd}.uk-comment-header{margin-bottom:15px;padding:10px;border:1px solid #ddd;border-radius:4px;background:#fafafa}.uk-comment-header:after,.uk-comment-header:before{content:"";display:table}.uk-comment-header:after{clear:both}.uk-comment-avatar{margin-right:15px;float:left}.uk-comment-title{margin:5px 0 0 0;font-size:16px;line-height:22px}.uk-comment-meta{margin:2px 0 0 0;font-size:11px;line-height:16px;color:#999}.uk-comment-body{padding-left:10px;padding-right:10px}.uk-comment-body>:last-child{margin-bottom:0}.uk-comment-list{padding:0;list-style:none}.uk-comment-list .uk-comment+ul{margin:25px 0 0 0;list-style:none}.uk-comment-list .uk-comment+ul>li:nth-child(n+2),.uk-comment-list>li:nth-child(n+2){margin-top:25px}@media (min-width:768px){.uk-comment-list .uk-comment+ul{padding-left:100px}}.uk-comment-primary .uk-comment-header{border-color:rgba(45,112,145,.3);background-color:#ebf7fd;color:#2d7091;text-shadow:0 1px 0 #fff}.uk-cover-background{background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.uk-cover{overflow:hidden}.uk-cover-object{width:auto;height:auto;min-width:100%;min-height:100%;max-width:none;position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}[data-uk-cover]{position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav>li>a{padding:5px 15px}.uk-nav ul{padding-left:15px}.uk-nav ul a{padding:2px 0}.uk-nav li>a>div{font-size:12px;line-height:18px}.uk-nav-header{padding:5px 15px;text-transform:uppercase;font-weight:700;font-size:12px}.uk-nav-header:not(:first-child){margin-top:15px}.uk-nav-divider{margin:9px 15px}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-parent-icon>.uk-parent>a:after{content:"\f104";width:20px;margin-right:-10px;float:right;font-family:FontAwesome;text-align:center}.uk-nav-parent-icon>.uk-parent.uk-open>a:after{content:"\f107"}.uk-nav-side>li>a{color:#444}.uk-nav-side>li>a:focus,.uk-nav-side>li>a:hover{background:rgba(0,0,0,.03);color:#444;outline:0;box-shadow:inset 0 0 1px rgba(0,0,0,.1);text-shadow:0 -1px 0 #fff}.uk-nav-side>li.uk-active>a{background:#009dd8;color:#fff;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-side .uk-nav-header{color:#444}.uk-nav-side .uk-nav-divider{border-top:1px solid #ddd;box-shadow:0 1px 0 #fff}.uk-nav-side ul a{color:#07D}.uk-nav-side ul a:hover{color:#059}.uk-nav-dropdown>li>a{color:#444}.uk-nav-dropdown>li>a:focus,.uk-nav-dropdown>li>a:hover{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-dropdown .uk-nav-header{color:#999}.uk-nav-dropdown .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-dropdown ul a{color:#07D}.uk-nav-dropdown ul a:hover{color:#059}.uk-nav-navbar>li>a{color:#444}.uk-nav-navbar>li>a:focus,.uk-nav-navbar>li>a:hover{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-navbar .uk-nav-header{color:#999}.uk-nav-navbar .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-navbar ul a{color:#07D}.uk-nav-navbar ul a:hover{color:#059}.uk-nav-offcanvas>li>a{color:#ccc;padding:10px 15px;border-top:1px solid rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05);text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-nav-offcanvas>.uk-open>a,html:not(.uk-touch) .uk-nav-offcanvas>li>a:focus,html:not(.uk-touch) .uk-nav-offcanvas>li>a:hover{background:#404040;color:#fff;outline:0}html .uk-nav.uk-nav-offcanvas>li.uk-active>a{background:#1a1a1a;color:#fff;box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.uk-nav-offcanvas .uk-nav-header{color:#777;margin-top:0;border-top:1px solid rgba(0,0,0,.3);background:#404040;box-shadow:inset 0 1px 0 rgba(255,255,255,.05);text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-nav-offcanvas .uk-nav-divider{border-top:1px solid rgba(255,255,255,.01);margin:0;height:4px;background:rgba(0,0,0,.2);box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.uk-nav-offcanvas ul a{color:#ccc}html:not(.uk-touch) .uk-nav-offcanvas ul a:hover{color:#fff}.uk-nav-offcanvas{border-bottom:1px solid rgba(0,0,0,.3);box-shadow:0 1px 0 rgba(255,255,255,.05)}.uk-nav-offcanvas .uk-nav-sub{border-top:1px solid rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}.uk-navbar{background:#f7f7f7;color:#444;border:1px solid rgba(0,0,0,.1);border-bottom-color:rgba(0,0,0,.3);border-radius:4px;background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee)}.uk-navbar:after,.uk-navbar:before{content:"";display:table}.uk-navbar:after{clear:both}.uk-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-navbar-nav>li{float:left;position:relative}.uk-navbar-nav>li>a{display:block;box-sizing:border-box;text-decoration:none;height:41px;padding:0 15px;line-height:40px;color:#444;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;margin-top:-1px;margin-left:-1px;border:1px solid transparent;border-bottom-width:0;text-shadow:0 1px 0 #fff}.uk-navbar-nav>li>a[href='#']{cursor:text}.uk-navbar-nav>li.uk-open>a,.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus{background-color:transparent;color:#444;outline:0;position:relative;z-index:1;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-navbar-nav>li>a:active{background-color:#f5f5f5;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-navbar-nav>li.uk-active>a{background-color:#fafafa;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-navbar-nav .uk-navbar-nav-subtitle{line-height:28px}.uk-navbar-nav-subtitle>div{margin-top:-6px;font-size:10px;line-height:12px}.uk-navbar-brand,.uk-navbar-content,.uk-navbar-toggle{box-sizing:border-box;display:block;height:41px;padding:0 15px;float:left;margin-top:-1px;text-shadow:0 1px 0 #fff}.uk-navbar-brand:before,.uk-navbar-content:before,.uk-navbar-toggle:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-navbar-content+.uk-navbar-content:not(.uk-navbar-center){padding-left:0}.uk-navbar-content>a:not([class]){color:#07D}.uk-navbar-content>a:not([class]):hover{color:#059}.uk-navbar-brand{font-size:18px;color:#444;text-decoration:none}.uk-navbar-brand:focus,.uk-navbar-brand:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle{font-size:18px;color:#444;text-decoration:none}.uk-navbar-toggle:focus,.uk-navbar-toggle:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle:after{content:"\f0c9";font-family:FontAwesome;vertical-align:middle}.uk-navbar-toggle-alt:after{content:"\f002"}.uk-navbar-center{float:none;text-align:center;max-width:50%;margin-left:auto;margin-right:auto}.uk-navbar-flip{float:right}.uk-navbar-nav:first-child>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.uk-navbar-flip .uk-navbar-nav>li>a{margin-left:0;margin-right:-1px}.uk-navbar-flip .uk-navbar-nav:first-child>li:first-child>a{border-top-left-radius:0;border-bottom-left-radius:0}.uk-navbar-flip .uk-navbar-nav:last-child>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.uk-navbar-attached{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;border-radius:0}.uk-navbar-attached .uk-navbar-nav>li>a{border-radius:0!important}.uk-subnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-subnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px;position:relative}.uk-subnav:after,.uk-subnav:before{content:"";display:block;overflow:hidden}.uk-subnav:after{clear:both}.uk-subnav>*{float:left}.uk-subnav>*>*{display:inline-block;color:#444}.uk-subnav>*>:focus,.uk-subnav>*>:hover{color:#07D;text-decoration:none}.uk-subnav>.uk-active>*{color:#07D}.uk-subnav-line>:before{content:"";display:inline-block;height:10px;vertical-align:middle}.uk-subnav-line>:nth-child(n+2):before{margin-right:10px;border-left:1px solid #ddd}.uk-subnav-pill>*>*{padding:3px 9px;border-radius:4px}.uk-subnav-pill>*>:focus,.uk-subnav-pill>*>:hover{background:#fafafa;color:#444;text-decoration:none;outline:0;box-shadow:0 0 0 1px rgba(0,0,0,.1)}.uk-subnav-pill>.uk-active>*{background:#009dd8;color:#fff;box-shadow:inset 0 2px 4px rgba(0,0,0,.2)}.uk-subnav>.uk-disabled>*{background:0 0;color:#999;text-decoration:none;cursor:text;box-shadow:none}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>li{font-size:1rem;vertical-align:top}.uk-breadcrumb>li,.uk-breadcrumb>li>a,.uk-breadcrumb>li>span{display:inline-block}.uk-breadcrumb>li:nth-child(n+2):before{content:"/";display:inline-block;margin:0 8px}.uk-breadcrumb>li:not(.uk-active)>span{color:#999}.uk-pagination{padding:0;list-style:none;text-align:center;font-size:0}.uk-pagination:after,.uk-pagination:before{content:"";display:table}.uk-pagination:after{clear:both}.uk-pagination>li{display:inline-block;font-size:1rem;vertical-align:top}.uk-pagination>li:nth-child(n+2){margin-left:5px}.uk-pagination>li>a,.uk-pagination>li>span{display:inline-block;min-width:16px;padding:3px 5px;line-height:20px;text-decoration:none;box-sizing:content-box;text-align:center;border-radius:4px}.uk-pagination>li>a{background:#f7f7f7;color:#444;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);text-shadow:0 1px 0 #fff}.uk-pagination>li>a:focus,.uk-pagination>li>a:hover{background-color:#fafafa;color:#444;outline:0;background-image:none}.uk-pagination>li>a:active{background-color:#f5f5f5;color:#444;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.3);background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-pagination>.uk-active>span{background:#009dd8;color:#fff;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);background-origin:border-box;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-pagination>.uk-disabled>span{background-color:#fafafa;color:#999;border:1px solid rgba(0,0,0,.2);text-shadow:0 1px 0 #fff}.uk-pagination-previous{float:left}.uk-pagination-next{float:right}.uk-pagination-left{text-align:left}.uk-pagination-right{text-align:right}.uk-tab{margin:0;padding:0;list-style:none;border-bottom:1px solid #ddd}.uk-tab:after,.uk-tab:before{content:"";display:table}.uk-tab:after{clear:both}.uk-tab>li{margin-bottom:-1px;float:left;position:relative}.uk-tab>li>a{display:block;padding:8px 12px 8px 12px;border:1px solid transparent;border-bottom-width:0;color:#07D;text-decoration:none;border-radius:4px 4px 0 0;text-shadow:0 1px 0 #fff}.uk-tab>li:nth-child(n+2)>a{margin-left:5px}.uk-tab>li.uk-open>a,.uk-tab>li>a:focus,.uk-tab>li>a:hover{border-color:#ddd;background:#fafafa;color:#059;outline:0}.uk-tab>li.uk-open:not(.uk-active)>a,.uk-tab>li:not(.uk-active)>a:focus,.uk-tab>li:not(.uk-active)>a:hover{margin-bottom:1px;padding-bottom:7px}.uk-tab>li.uk-active>a{border-color:#ddd;border-bottom-color:transparent;background:#fff;color:#444}.uk-tab>li.uk-disabled>a{color:#999;cursor:text}.uk-tab>li.uk-disabled.uk-active>a,.uk-tab>li.uk-disabled>a:focus,.uk-tab>li.uk-disabled>a:hover{background:0 0;border-color:transparent}.uk-tab-flip>li{float:right}.uk-tab-flip>li:nth-child(n+2)>a{margin-left:0;margin-right:5px}.uk-tab>li.uk-tab-responsive>a{margin-left:0;margin-right:0}.uk-tab-responsive>a:before{content:"\f0c9\00a0";font-family:FontAwesome}.uk-tab-center{border-bottom:1px solid #ddd}.uk-tab-center-bottom{border-bottom:none;border-top:1px solid #ddd}.uk-tab-center:after,.uk-tab-center:before{content:"";display:table}.uk-tab-center:after{clear:both}.uk-tab-center .uk-tab{position:relative;right:50%;border:none;float:right}.uk-tab-center .uk-tab>li{position:relative;right:-50%}.uk-tab-center .uk-tab>li>a{text-align:center}.uk-tab-bottom{border-top:1px solid #ddd;border-bottom:none}.uk-tab-bottom>li{margin-top:-1px;margin-bottom:0}.uk-tab-bottom>li>a{padding-top:8px;padding-bottom:8px;border-bottom-width:1px;border-top-width:0}.uk-tab-bottom>li.uk-open:not(.uk-active)>a,.uk-tab-bottom>li:not(.uk-active)>a:focus,.uk-tab-bottom>li:not(.uk-active)>a:hover{margin-bottom:0;margin-top:1px;padding-bottom:8px;padding-top:7px}.uk-tab-bottom>li.uk-active>a{border-top-color:transparent;border-bottom-color:#ddd}.uk-tab-grid{margin-left:-5px;border-bottom:none;position:relative;z-index:0}.uk-tab-grid:before{display:block;position:absolute;left:5px;right:0;bottom:-1px;border-top:1px solid #ddd;z-index:-1}.uk-tab-grid>li:first-child>a{margin-left:5px}.uk-tab-grid>li>a{text-align:center}.uk-tab-grid.uk-tab-bottom{border-top:none}.uk-tab-grid.uk-tab-bottom:before{top:-1px;bottom:auto}@media (min-width:768px){.uk-tab-left,.uk-tab-right{border-bottom:none}.uk-tab-left>li,.uk-tab-right>li{margin-bottom:0;float:none}.uk-tab-left>li>a,.uk-tab-right>li>a{padding-top:8px;padding-bottom:8px}.uk-tab-left>li:nth-child(n+2)>a,.uk-tab-right>li:nth-child(n+2)>a{margin-left:0;margin-top:5px}.uk-tab-left>li.uk-active>a,.uk-tab-right>li.uk-active>a{border-color:#ddd}.uk-tab-left{border-right:1px solid #ddd}.uk-tab-left>li{margin-right:-1px}.uk-tab-left>li>a{border-bottom-width:1px;border-right-width:0}.uk-tab-left>li:not(.uk-active)>a:focus,.uk-tab-left>li:not(.uk-active)>a:hover{margin-bottom:0;margin-right:1px;padding-bottom:8px;padding-right:11px}.uk-tab-left>li.uk-active>a{border-right-color:transparent}.uk-tab-right{border-left:1px solid #ddd}.uk-tab-right>li{margin-left:-1px}.uk-tab-right>li>a{border-bottom-width:1px;border-left-width:0}.uk-tab-right>li:not(.uk-active)>a:focus,.uk-tab-right>li:not(.uk-active)>a:hover{margin-bottom:0;margin-left:1px;padding-bottom:8px;padding-left:11px}.uk-tab-right>li.uk-active>a{border-left-color:transparent}}.uk-tab-bottom>li>a{border-radius:0 0 4px 4px}@media (min-width:768px){.uk-tab-left>li>a{border-radius:4px 0 0 4px}.uk-tab-right>li>a{border-radius:0 4px 4px 0}}.uk-thumbnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-thumbnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px}.uk-thumbnav:after,.uk-thumbnav:before{content:"";display:block;overflow:hidden}.uk-thumbnav:after{clear:both}.uk-thumbnav>*{float:left}.uk-thumbnav>*>*{display:block;background:#fff}.uk-thumbnav>*>*>img{opacity:.7;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.uk-thumbnav>*>:focus>img,.uk-thumbnav>*>:hover>img{opacity:1}.uk-thumbnav>.uk-active>*>img{opacity:1}.uk-list{padding:0;list-style:none}.uk-list>li:after,.uk-list>li:before{content:"";display:table}.uk-list>li:after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:20px;list-style:none}.uk-list-line>li:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-list-striped>li{padding:5px 5px;border-bottom:1px solid #ddd}.uk-list-striped>li:nth-of-type(odd){background:#fafafa}.uk-list-space>li:nth-child(n+2){margin-top:10px}.uk-list-striped>li:first-child{border-top:1px solid #ddd}@media (min-width:768px){.uk-description-list-horizontal{overflow:hidden}.uk-description-list-horizontal>dt{width:160px;float:left;clear:both;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-description-list-horizontal>dd{margin-left:180px}}.uk-description-list-line>dt{font-weight:400}.uk-description-list-line>dt:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-description-list-line>dd{color:#999}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:15px}*+.uk-table{margin-top:15px}.uk-table td,.uk-table th{padding:8px 8px;border-bottom:1px solid #ddd}.uk-table th{text-align:left}.uk-table td{vertical-align:top}.uk-table thead th{vertical-align:bottom}.uk-table caption,.uk-table tfoot{font-size:12px;font-style:italic}.uk-table caption{text-align:left;color:#999}.uk-table tbody tr.uk-active{background:#f0f0f0}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-striped tbody tr:nth-of-type(odd){background:#fafafa}.uk-table-condensed td{padding:4px 8px}.uk-table-hover tbody tr:hover{background:#f0f0f0}.uk-form input,.uk-form select,.uk-form textarea{box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:inherit}.uk-form select{text-transform:none}.uk-form optgroup{font:inherit;font-weight:700}.uk-form input::-moz-focus-inner{border:0;padding:0}.uk-form input[type=checkbox],.uk-form input[type=radio]{padding:0}.uk-form input[type=checkbox]:not(:disabled),.uk-form input[type=radio]:not(:disabled){cursor:pointer}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form textarea{-webkit-appearance:none}.uk-form input[type=search]::-webkit-search-cancel-button,.uk-form input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-form input[type=number]::-webkit-inner-spin-button,.uk-form input[type=number]::-webkit-outer-spin-button{height:auto}.uk-form fieldset{border:none;margin:0;padding:0}.uk-form textarea{overflow:auto;vertical-align:top}.uk-form ::-moz-placeholder{opacity:1}.uk-form :invalid{box-shadow:none}.uk-form input:not([type=radio]):not([type=checkbox]),.uk-form select{vertical-align:middle}.uk-form>:last-child{margin-bottom:0}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form input[type=datetime-local],.uk-form input[type=date],.uk-form input[type=month],.uk-form input[type=time],.uk-form input[type=week],.uk-form input[type=color],.uk-form select,.uk-form textarea{height:30px;max-width:100%;padding:4px 6px;border:1px solid #ddd;background:#fff;color:#444;-webkit-transition:all .2s linear;-webkit-transition-property:border,background,color,box-shadow,padding;transition:all .2s linear;transition-property:border,background,color,box-shadow,padding;border-radius:4px}.uk-form input:not([type]):focus,.uk-form input[type=text]:focus,.uk-form input[type=password]:focus,.uk-form input[type=email]:focus,.uk-form input[type=url]:focus,.uk-form input[type=search]:focus,.uk-form input[type=tel]:focus,.uk-form input[type=number]:focus,.uk-form input[type=datetime]:focus,.uk-form input[type=datetime-local]:focus,.uk-form input[type=date]:focus,.uk-form input[type=month]:focus,.uk-form input[type=time]:focus,.uk-form input[type=week]:focus,.uk-form input[type=color]:focus,.uk-form select:focus,.uk-form textarea:focus{border-color:#99baca;outline:0;background:#f5fbfe;color:#444}.uk-form input:not([type]):disabled,.uk-form input[type=text]:disabled,.uk-form input[type=password]:disabled,.uk-form input[type=email]:disabled,.uk-form input[type=url]:disabled,.uk-form input[type=search]:disabled,.uk-form input[type=tel]:disabled,.uk-form input[type=number]:disabled,.uk-form input[type=datetime]:disabled,.uk-form input[type=datetime-local]:disabled,.uk-form input[type=date]:disabled,.uk-form input[type=month]:disabled,.uk-form input[type=time]:disabled,.uk-form input[type=week]:disabled,.uk-form input[type=color]:disabled,.uk-form select:disabled,.uk-form textarea:disabled{border-color:#ddd;background-color:#fafafa;color:#999}.uk-form :-ms-input-placeholder{color:#999!important}.uk-form ::-moz-placeholder{color:#999}.uk-form ::-webkit-input-placeholder{color:#999}.uk-form :disabled:-ms-input-placeholder{color:#999!important}.uk-form :disabled::-moz-placeholder{color:#999}.uk-form :disabled::-webkit-input-placeholder{color:#999}.uk-form legend{width:100%;border:0;padding:0;padding-bottom:15px;font-size:18px;line-height:30px}.uk-form legend:after{content:"";display:block;border-bottom:1px solid #ddd;width:100%}input:not([type]).uk-form-small,input[type].uk-form-small,select.uk-form-small,textarea.uk-form-small{height:25px;padding:3px 3px;font-size:12px}input:not([type]).uk-form-large,input[type].uk-form-large,select.uk-form-large,textarea.uk-form-large{height:40px;padding:8px 6px;font-size:16px}.uk-form select[multiple],.uk-form select[size],.uk-form textarea{height:auto}.uk-form-danger{border-color:#dc8d99!important;background:#fff7f8!important;color:#d85030!important}.uk-form-success{border-color:#8ec73b!important;background:#fafff2!important;color:#659f13!important}.uk-form-blank{border-color:transparent!important;border-style:dashed!important;background:0 0!important}.uk-form-blank:focus{border-color:#ddd!important}input.uk-form-width-mini{width:40px}select.uk-form-width-mini{width:65px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-form-row:after,.uk-form-row:before{content:"";display:table}.uk-form-row:after{clear:both}.uk-form-row+.uk-form-row{margin-top:15px}.uk-form-help-inline{display:inline-block;margin:0 0 0 10px}.uk-form-help-block{margin:5px 0 0 0}.uk-form-controls>:first-child{margin-top:0}.uk-form-controls>:last-child{margin-bottom:0}.uk-form-controls-condensed{margin:5px 0}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px;font-weight:700}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px;font-weight:700}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:5px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:5px}}.uk-form-icon{display:inline-block;position:relative;max-width:100%}.uk-form-icon>[class*=uk-icon-]{position:absolute;top:50%;width:30px;margin-top:-7px;font-size:14px;color:#999;text-align:center;pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)>input{padding-left:30px!important}.uk-form-icon-flip>[class*=uk-icon-]{right:0}.uk-form-icon-flip>input{padding-right:30px!important}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:#444;text-transform:none;display:inline-block;box-sizing:border-box;padding:0 12px;background:#f7f7f7;vertical-align:middle;line-height:28px;min-height:30px;font-size:1rem;text-decoration:none;text-align:center;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);border-radius:4px;text-shadow:0 1px 0 #fff}.uk-button:not(:disabled){cursor:pointer}.uk-button:focus,.uk-button:hover{background-color:#fafafa;color:#444;outline:0;text-decoration:none;background-image:none}.uk-button.uk-active,.uk-button:active{background-color:#f5f5f5;color:#444;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.3);background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-button-primary{background-color:#009dd8;color:#fff;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);border-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-button-primary:focus,.uk-button-primary:hover{background-color:#00aff2;color:#fff;background-image:none}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#008abf;color:#fff;background-image:none;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.4);box-shadow:inset 0 2px 4px rgba(0,0,0,.2)}.uk-button-success{background-color:#82bb42;color:#fff;background-image:-webkit-linear-gradient(top,#9fd256,#6fac34);background-image:linear-gradient(to bottom,#9fd256,#6fac34);border-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-button-success:focus,.uk-button-success:hover{background-color:#8fce48;color:#fff;background-image:none}.uk-button-success.uk-active,.uk-button-success:active{background-color:#76b430;color:#fff;background-image:none;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.4);box-shadow:inset 0 2px 4px rgba(0,0,0,.2)}.uk-button-danger{background-color:#d32c46;color:#fff;background-image:-webkit-linear-gradient(top,#ee465a,#c11a39);background-image:linear-gradient(to bottom,#ee465a,#c11a39);border-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-button-danger:focus,.uk-button-danger:hover{background-color:#e33551;color:#fff;background-image:none}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#c91c37;color:#fff;background-image:none;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.4);box-shadow:inset 0 2px 4px rgba(0,0,0,.2)}.uk-button:disabled{background-color:#fafafa;color:#999;border-color:rgba(0,0,0,.2);background-image:none;box-shadow:none;text-shadow:0 1px 0 #fff}.uk-button-link,.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:disabled,.uk-button-link:focus,.uk-button-link:hover{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none}.uk-button-link{color:#07D}.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:focus,.uk-button-link:hover{color:#059;text-decoration:underline}.uk-button-link:disabled{color:#999}.uk-button-link:focus{outline:1px dotted}.uk-button-mini{min-height:20px;padding:0 6px;line-height:18px;font-size:11px}.uk-button-small{min-height:25px;padding:0 10px;line-height:23px;font-size:12px}.uk-button-large{min-height:40px;padding:0 15px;line-height:38px;font-size:16px;border-radius:5px}.uk-button-group{display:inline-block;vertical-align:middle;position:relative;font-size:0;white-space:nowrap}.uk-button-group>*{display:inline-block}.uk-button-group .uk-button{vertical-align:top}.uk-button-dropdown{display:inline-block;vertical-align:middle;position:relative}.uk-button-group>.uk-button:not(:first-child):not(:last-child),.uk-button-group>div:not(:first-child):not(:last-child) .uk-button{border-radius:0}.uk-button-group>.uk-button:first-child,.uk-button-group>div:first-child .uk-button{border-top-right-radius:0;border-bottom-right-radius:0}.uk-button-group>.uk-button:last-child,.uk-button-group>div:last-child .uk-button{border-top-left-radius:0;border-bottom-left-radius:0}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button.uk-active,.uk-button-group .uk-button:active,.uk-button-group .uk-button:hover{position:relative}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.woff2) format('woff2'),url(../fonts/fontawesome-webfont.woff) format("woff"),url(../fonts/fontawesome-webfont.ttf) format("truetype");font-weight:400;font-style:normal}[class*=uk-icon-]{font-family:FontAwesome;display:inline-block;font-weight:400;font-style:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=uk-icon-],[class*=uk-icon-]:focus,[class*=uk-icon-]:hover{text-decoration:none}.uk-icon-small{font-size:150%;vertical-align:-10%}.uk-icon-medium{font-size:200%;vertical-align:-16%}.uk-icon-large{font-size:250%;vertical-align:-22%}.uk-icon-justify{width:1em;text-align:center}.uk-icon-spin{display:inline-block;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-icon-hover{color:#999}.uk-icon-hover:hover{color:#444}.uk-icon-button{box-sizing:border-box;display:inline-block;width:35px;height:35px;border-radius:100%;background:#f7f7f7;line-height:35px;color:#444;font-size:18px;text-align:center;border:1px solid #ccc;border-bottom-color:#bbb;background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);text-shadow:0 1px 0 #fff}.uk-icon-button:focus,.uk-icon-button:hover{background-color:#fafafa;color:#444;outline:0;background-image:none}.uk-icon-button:active{background-color:#f5f5f5;color:#444;border-color:#ccc;border-top-color:#bbb;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-icon-glass:before{content:"\f000"}.uk-icon-music:before{content:"\f001"}.uk-icon-search:before{content:"\f002"}.uk-icon-envelope-o:before{content:"\f003"}.uk-icon-heart:before{content:"\f004"}.uk-icon-star:before{content:"\f005"}.uk-icon-star-o:before{content:"\f006"}.uk-icon-user:before{content:"\f007"}.uk-icon-film:before{content:"\f008"}.uk-icon-th-large:before{content:"\f009"}.uk-icon-th:before{content:"\f00a"}.uk-icon-th-list:before{content:"\f00b"}.uk-icon-check:before{content:"\f00c"}.uk-icon-close:before,.uk-icon-remove:before,.uk-icon-times:before{content:"\f00d"}.uk-icon-search-plus:before{content:"\f00e"}.uk-icon-search-minus:before{content:"\f010"}.uk-icon-power-off:before{content:"\f011"}.uk-icon-signal:before{content:"\f012"}.uk-icon-cog:before,.uk-icon-gear:before{content:"\f013"}.uk-icon-trash-o:before{content:"\f014"}.uk-icon-home:before{content:"\f015"}.uk-icon-file-o:before{content:"\f016"}.uk-icon-clock-o:before{content:"\f017"}.uk-icon-road:before{content:"\f018"}.uk-icon-download:before{content:"\f019"}.uk-icon-arrow-circle-o-down:before{content:"\f01a"}.uk-icon-arrow-circle-o-up:before{content:"\f01b"}.uk-icon-inbox:before{content:"\f01c"}.uk-icon-play-circle-o:before{content:"\f01d"}.uk-icon-repeat:before,.uk-icon-rotate-right:before{content:"\f01e"}.uk-icon-refresh:before{content:"\f021"}.uk-icon-list-alt:before{content:"\f022"}.uk-icon-lock:before{content:"\f023"}.uk-icon-flag:before{content:"\f024"}.uk-icon-headphones:before{content:"\f025"}.uk-icon-volume-off:before{content:"\f026"}.uk-icon-volume-down:before{content:"\f027"}.uk-icon-volume-up:before{content:"\f028"}.uk-icon-qrcode:before{content:"\f029"}.uk-icon-barcode:before{content:"\f02a"}.uk-icon-tag:before{content:"\f02b"}.uk-icon-tags:before{content:"\f02c"}.uk-icon-book:before{content:"\f02d"}.uk-icon-bookmark:before{content:"\f02e"}.uk-icon-print:before{content:"\f02f"}.uk-icon-camera:before{content:"\f030"}.uk-icon-font:before{content:"\f031"}.uk-icon-bold:before{content:"\f032"}.uk-icon-italic:before{content:"\f033"}.uk-icon-text-height:before{content:"\f034"}.uk-icon-text-width:before{content:"\f035"}.uk-icon-align-left:before{content:"\f036"}.uk-icon-align-center:before{content:"\f037"}.uk-icon-align-right:before{content:"\f038"}.uk-icon-align-justify:before{content:"\f039"}.uk-icon-list:before{content:"\f03a"}.uk-icon-dedent:before,.uk-icon-outdent:before{content:"\f03b"}.uk-icon-indent:before{content:"\f03c"}.uk-icon-video-camera:before{content:"\f03d"}.uk-icon-image:before,.uk-icon-photo:before,.uk-icon-picture-o:before{content:"\f03e"}.uk-icon-pencil:before{content:"\f040"}.uk-icon-map-marker:before{content:"\f041"}.uk-icon-adjust:before{content:"\f042"}.uk-icon-tint:before{content:"\f043"}.uk-icon-edit:before,.uk-icon-pencil-square-o:before{content:"\f044"}.uk-icon-share-square-o:before{content:"\f045"}.uk-icon-check-square-o:before{content:"\f046"}.uk-icon-arrows:before{content:"\f047"}.uk-icon-step-backward:before{content:"\f048"}.uk-icon-fast-backward:before{content:"\f049"}.uk-icon-backward:before{content:"\f04a"}.uk-icon-play:before{content:"\f04b"}.uk-icon-pause:before{content:"\f04c"}.uk-icon-stop:before{content:"\f04d"}.uk-icon-forward:before{content:"\f04e"}.uk-icon-fast-forward:before{content:"\f050"}.uk-icon-step-forward:before{content:"\f051"}.uk-icon-eject:before{content:"\f052"}.uk-icon-chevron-left:before{content:"\f053"}.uk-icon-chevron-right:before{content:"\f054"}.uk-icon-plus-circle:before{content:"\f055"}.uk-icon-minus-circle:before{content:"\f056"}.uk-icon-times-circle:before{content:"\f057"}.uk-icon-check-circle:before{content:"\f058"}.uk-icon-question-circle:before{content:"\f059"}.uk-icon-info-circle:before{content:"\f05a"}.uk-icon-crosshairs:before{content:"\f05b"}.uk-icon-times-circle-o:before{content:"\f05c"}.uk-icon-check-circle-o:before{content:"\f05d"}.uk-icon-ban:before{content:"\f05e"}.uk-icon-arrow-left:before{content:"\f060"}.uk-icon-arrow-right:before{content:"\f061"}.uk-icon-arrow-up:before{content:"\f062"}.uk-icon-arrow-down:before{content:"\f063"}.uk-icon-mail-forward:before,.uk-icon-share:before{content:"\f064"}.uk-icon-expand:before{content:"\f065"}.uk-icon-compress:before{content:"\f066"}.uk-icon-plus:before{content:"\f067"}.uk-icon-minus:before{content:"\f068"}.uk-icon-asterisk:before{content:"\f069"}.uk-icon-exclamation-circle:before{content:"\f06a"}.uk-icon-gift:before{content:"\f06b"}.uk-icon-leaf:before{content:"\f06c"}.uk-icon-fire:before{content:"\f06d"}.uk-icon-eye:before{content:"\f06e"}.uk-icon-eye-slash:before{content:"\f070"}.uk-icon-exclamation-triangle:before,.uk-icon-warning:before{content:"\f071"}.uk-icon-plane:before{content:"\f072"}.uk-icon-calendar:before{content:"\f073"}.uk-icon-random:before{content:"\f074"}.uk-icon-comment:before{content:"\f075"}.uk-icon-magnet:before{content:"\f076"}.uk-icon-chevron-up:before{content:"\f077"}.uk-icon-chevron-down:before{content:"\f078"}.uk-icon-retweet:before{content:"\f079"}.uk-icon-shopping-cart:before{content:"\f07a"}.uk-icon-folder:before{content:"\f07b"}.uk-icon-folder-open:before{content:"\f07c"}.uk-icon-arrows-v:before{content:"\f07d"}.uk-icon-arrows-h:before{content:"\f07e"}.uk-icon-bar-chart-o:before,.uk-icon-bar-chart:before{content:"\f080"}.uk-icon-twitter-square:before{content:"\f081"}.uk-icon-facebook-square:before{content:"\f082"}.uk-icon-camera-retro:before{content:"\f083"}.uk-icon-key:before{content:"\f084"}.uk-icon-cogs:before,.uk-icon-gears:before{content:"\f085"}.uk-icon-comments:before{content:"\f086"}.uk-icon-thumbs-o-up:before{content:"\f087"}.uk-icon-thumbs-o-down:before{content:"\f088"}.uk-icon-star-half:before{content:"\f089"}.uk-icon-heart-o:before{content:"\f08a"}.uk-icon-sign-out:before{content:"\f08b"}.uk-icon-linkedin-square:before{content:"\f08c"}.uk-icon-thumb-tack:before{content:"\f08d"}.uk-icon-external-link:before{content:"\f08e"}.uk-icon-sign-in:before{content:"\f090"}.uk-icon-trophy:before{content:"\f091"}.uk-icon-github-square:before{content:"\f092"}.uk-icon-upload:before{content:"\f093"}.uk-icon-lemon-o:before{content:"\f094"}.uk-icon-phone:before{content:"\f095"}.uk-icon-square-o:before{content:"\f096"}.uk-icon-bookmark-o:before{content:"\f097"}.uk-icon-phone-square:before{content:"\f098"}.uk-icon-twitter:before{content:"\f099"}.uk-icon-facebook-f:before,.uk-icon-facebook:before{content:"\f09a"}.uk-icon-github:before{content:"\f09b"}.uk-icon-unlock:before{content:"\f09c"}.uk-icon-credit-card:before{content:"\f09d"}.uk-icon-rss:before{content:"\f09e"}.uk-icon-hdd-o:before{content:"\f0a0"}.uk-icon-bullhorn:before{content:"\f0a1"}.uk-icon-bell:before{content:"\f0f3"}.uk-icon-certificate:before{content:"\f0a3"}.uk-icon-hand-o-right:before{content:"\f0a4"}.uk-icon-hand-o-left:before{content:"\f0a5"}.uk-icon-hand-o-up:before{content:"\f0a6"}.uk-icon-hand-o-down:before{content:"\f0a7"}.uk-icon-arrow-circle-left:before{content:"\f0a8"}.uk-icon-arrow-circle-right:before{content:"\f0a9"}.uk-icon-arrow-circle-up:before{content:"\f0aa"}.uk-icon-arrow-circle-down:before{content:"\f0ab"}.uk-icon-globe:before{content:"\f0ac"}.uk-icon-wrench:before{content:"\f0ad"}.uk-icon-tasks:before{content:"\f0ae"}.uk-icon-filter:before{content:"\f0b0"}.uk-icon-briefcase:before{content:"\f0b1"}.uk-icon-arrows-alt:before{content:"\f0b2"}.uk-icon-group:before,.uk-icon-users:before{content:"\f0c0"}.uk-icon-chain:before,.uk-icon-link:before{content:"\f0c1"}.uk-icon-cloud:before{content:"\f0c2"}.uk-icon-flask:before{content:"\f0c3"}.uk-icon-cut:before,.uk-icon-scissors:before{content:"\f0c4"}.uk-icon-copy:before,.uk-icon-files-o:before{content:"\f0c5"}.uk-icon-paperclip:before{content:"\f0c6"}.uk-icon-floppy-o:before,.uk-icon-save:before{content:"\f0c7"}.uk-icon-square:before{content:"\f0c8"}.uk-icon-bars:before,.uk-icon-navicon:before,.uk-icon-reorder:before{content:"\f0c9"}.uk-icon-list-ul:before{content:"\f0ca"}.uk-icon-list-ol:before{content:"\f0cb"}.uk-icon-strikethrough:before{content:"\f0cc"}.uk-icon-underline:before{content:"\f0cd"}.uk-icon-table:before{content:"\f0ce"}.uk-icon-magic:before{content:"\f0d0"}.uk-icon-truck:before{content:"\f0d1"}.uk-icon-pinterest:before{content:"\f0d2"}.uk-icon-pinterest-square:before{content:"\f0d3"}.uk-icon-google-plus-square:before{content:"\f0d4"}.uk-icon-google-plus:before{content:"\f0d5"}.uk-icon-money:before{content:"\f0d6"}.uk-icon-caret-down:before{content:"\f0d7"}.uk-icon-caret-up:before{content:"\f0d8"}.uk-icon-caret-left:before{content:"\f0d9"}.uk-icon-caret-right:before{content:"\f0da"}.uk-icon-columns:before{content:"\f0db"}.uk-icon-sort:before,.uk-icon-unsorted:before{content:"\f0dc"}.uk-icon-sort-desc:before,.uk-icon-sort-down:before{content:"\f0dd"}.uk-icon-sort-asc:before,.uk-icon-sort-up:before{content:"\f0de"}.uk-icon-envelope:before{content:"\f0e0"}.uk-icon-linkedin:before{content:"\f0e1"}.uk-icon-rotate-left:before,.uk-icon-undo:before{content:"\f0e2"}.uk-icon-gavel:before,.uk-icon-legal:before{content:"\f0e3"}.uk-icon-dashboard:before,.uk-icon-tachometer:before{content:"\f0e4"}.uk-icon-comment-o:before{content:"\f0e5"}.uk-icon-comments-o:before{content:"\f0e6"}.uk-icon-bolt:before,.uk-icon-flash:before{content:"\f0e7"}.uk-icon-sitemap:before{content:"\f0e8"}.uk-icon-umbrella:before{content:"\f0e9"}.uk-icon-clipboard:before,.uk-icon-paste:before{content:"\f0ea"}.uk-icon-lightbulb-o:before{content:"\f0eb"}.uk-icon-exchange:before{content:"\f0ec"}.uk-icon-cloud-download:before{content:"\f0ed"}.uk-icon-cloud-upload:before{content:"\f0ee"}.uk-icon-user-md:before{content:"\f0f0"}.uk-icon-stethoscope:before{content:"\f0f1"}.uk-icon-suitcase:before{content:"\f0f2"}.uk-icon-bell-o:before{content:"\f0a2"}.uk-icon-coffee:before{content:"\f0f4"}.uk-icon-cutlery:before{content:"\f0f5"}.uk-icon-file-text-o:before{content:"\f0f6"}.uk-icon-building-o:before{content:"\f0f7"}.uk-icon-hospital-o:before{content:"\f0f8"}.uk-icon-ambulance:before{content:"\f0f9"}.uk-icon-medkit:before{content:"\f0fa"}.uk-icon-fighter-jet:before{content:"\f0fb"}.uk-icon-beer:before{content:"\f0fc"}.uk-icon-h-square:before{content:"\f0fd"}.uk-icon-plus-square:before{content:"\f0fe"}.uk-icon-angle-double-left:before{content:"\f100"}.uk-icon-angle-double-right:before{content:"\f101"}.uk-icon-angle-double-up:before{content:"\f102"}.uk-icon-angle-double-down:before{content:"\f103"}.uk-icon-angle-left:before{content:"\f104"}.uk-icon-angle-right:before{content:"\f105"}.uk-icon-angle-up:before{content:"\f106"}.uk-icon-angle-down:before{content:"\f107"}.uk-icon-desktop:before{content:"\f108"}.uk-icon-laptop:before{content:"\f109"}.uk-icon-tablet:before{content:"\f10a"}.uk-icon-mobile-phone:before,.uk-icon-mobile:before{content:"\f10b"}.uk-icon-circle-o:before{content:"\f10c"}.uk-icon-quote-left:before{content:"\f10d"}.uk-icon-quote-right:before{content:"\f10e"}.uk-icon-spinner:before{content:"\f110"}.uk-icon-circle:before{content:"\f111"}.uk-icon-mail-reply:before,.uk-icon-reply:before{content:"\f112"}.uk-icon-github-alt:before{content:"\f113"}.uk-icon-folder-o:before{content:"\f114"}.uk-icon-folder-open-o:before{content:"\f115"}.uk-icon-smile-o:before{content:"\f118"}.uk-icon-frown-o:before{content:"\f119"}.uk-icon-meh-o:before{content:"\f11a"}.uk-icon-gamepad:before{content:"\f11b"}.uk-icon-keyboard-o:before{content:"\f11c"}.uk-icon-flag-o:before{content:"\f11d"}.uk-icon-flag-checkered:before{content:"\f11e"}.uk-icon-terminal:before{content:"\f120"}.uk-icon-code:before{content:"\f121"}.uk-icon-mail-reply-all:before,.uk-icon-reply-all:before{content:"\f122"}.uk-icon-star-half-empty:before,.uk-icon-star-half-full:before,.uk-icon-star-half-o:before{content:"\f123"}.uk-icon-location-arrow:before{content:"\f124"}.uk-icon-crop:before{content:"\f125"}.uk-icon-code-fork:before{content:"\f126"}.uk-icon-chain-broken:before,.uk-icon-unlink:before{content:"\f127"}.uk-icon-question:before{content:"\f128"}.uk-icon-info:before{content:"\f129"}.uk-icon-exclamation:before{content:"\f12a"}.uk-icon-superscript:before{content:"\f12b"}.uk-icon-subscript:before{content:"\f12c"}.uk-icon-eraser:before{content:"\f12d"}.uk-icon-puzzle-piece:before{content:"\f12e"}.uk-icon-microphone:before{content:"\f130"}.uk-icon-microphone-slash:before{content:"\f131"}.uk-icon-shield:before{content:"\f132"}.uk-icon-calendar-o:before{content:"\f133"}.uk-icon-fire-extinguisher:before{content:"\f134"}.uk-icon-rocket:before{content:"\f135"}.uk-icon-maxcdn:before{content:"\f136"}.uk-icon-chevron-circle-left:before{content:"\f137"}.uk-icon-chevron-circle-right:before{content:"\f138"}.uk-icon-chevron-circle-up:before{content:"\f139"}.uk-icon-chevron-circle-down:before{content:"\f13a"}.uk-icon-html5:before{content:"\f13b"}.uk-icon-css3:before{content:"\f13c"}.uk-icon-anchor:before{content:"\f13d"}.uk-icon-unlock-alt:before{content:"\f13e"}.uk-icon-bullseye:before{content:"\f140"}.uk-icon-ellipsis-h:before{content:"\f141"}.uk-icon-ellipsis-v:before{content:"\f142"}.uk-icon-rss-square:before{content:"\f143"}.uk-icon-play-circle:before{content:"\f144"}.uk-icon-ticket:before{content:"\f145"}.uk-icon-minus-square:before{content:"\f146"}.uk-icon-minus-square-o:before{content:"\f147"}.uk-icon-level-up:before{content:"\f148"}.uk-icon-level-down:before{content:"\f149"}.uk-icon-check-square:before{content:"\f14a"}.uk-icon-pencil-square:before{content:"\f14b"}.uk-icon-external-link-square:before{content:"\f14c"}.uk-icon-share-square:before{content:"\f14d"}.uk-icon-compass:before{content:"\f14e"}.uk-icon-caret-square-o-down:before,.uk-icon-toggle-down:before{content:"\f150"}.uk-icon-caret-square-o-up:before,.uk-icon-toggle-up:before{content:"\f151"}.uk-icon-caret-square-o-right:before,.uk-icon-toggle-right:before{content:"\f152"}.uk-icon-eur:before,.uk-icon-euro:before{content:"\f153"}.uk-icon-gbp:before{content:"\f154"}.uk-icon-dollar:before,.uk-icon-usd:before{content:"\f155"}.uk-icon-inr:before,.uk-icon-rupee:before{content:"\f156"}.uk-icon-cny:before,.uk-icon-jpy:before,.uk-icon-rmb:before,.uk-icon-yen:before{content:"\f157"}.uk-icon-rouble:before,.uk-icon-rub:before,.uk-icon-ruble:before{content:"\f158"}.uk-icon-krw:before,.uk-icon-won:before{content:"\f159"}.uk-icon-bitcoin:before,.uk-icon-btc:before{content:"\f15a"}.uk-icon-file:before{content:"\f15b"}.uk-icon-file-text:before{content:"\f15c"}.uk-icon-sort-alpha-asc:before{content:"\f15d"}.uk-icon-sort-alpha-desc:before{content:"\f15e"}.uk-icon-sort-amount-asc:before{content:"\f160"}.uk-icon-sort-amount-desc:before{content:"\f161"}.uk-icon-sort-numeric-asc:before{content:"\f162"}.uk-icon-sort-numeric-desc:before{content:"\f163"}.uk-icon-thumbs-up:before{content:"\f164"}.uk-icon-thumbs-down:before{content:"\f165"}.uk-icon-youtube-square:before{content:"\f166"}.uk-icon-youtube:before{content:"\f167"}.uk-icon-xing:before{content:"\f168"}.uk-icon-xing-square:before{content:"\f169"}.uk-icon-youtube-play:before{content:"\f16a"}.uk-icon-dropbox:before{content:"\f16b"}.uk-icon-stack-overflow:before{content:"\f16c"}.uk-icon-instagram:before{content:"\f16d"}.uk-icon-flickr:before{content:"\f16e"}.uk-icon-adn:before{content:"\f170"}.uk-icon-bitbucket:before{content:"\f171"}.uk-icon-bitbucket-square:before{content:"\f172"}.uk-icon-tumblr:before{content:"\f173"}.uk-icon-tumblr-square:before{content:"\f174"}.uk-icon-long-arrow-down:before{content:"\f175"}.uk-icon-long-arrow-up:before{content:"\f176"}.uk-icon-long-arrow-left:before{content:"\f177"}.uk-icon-long-arrow-right:before{content:"\f178"}.uk-icon-apple:before{content:"\f179"}.uk-icon-windows:before{content:"\f17a"}.uk-icon-android:before{content:"\f17b"}.uk-icon-linux:before{content:"\f17c"}.uk-icon-dribbble:before{content:"\f17d"}.uk-icon-skype:before{content:"\f17e"}.uk-icon-foursquare:before{content:"\f180"}.uk-icon-trello:before{content:"\f181"}.uk-icon-female:before{content:"\f182"}.uk-icon-male:before{content:"\f183"}.uk-icon-gittip:before,.uk-icon-gratipay:before{content:"\f184"}.uk-icon-sun-o:before{content:"\f185"}.uk-icon-moon-o:before{content:"\f186"}.uk-icon-archive:before{content:"\f187"}.uk-icon-bug:before{content:"\f188"}.uk-icon-vk:before{content:"\f189"}.uk-icon-weibo:before{content:"\f18a"}.uk-icon-renren:before{content:"\f18b"}.uk-icon-pagelines:before{content:"\f18c"}.uk-icon-stack-exchange:before{content:"\f18d"}.uk-icon-arrow-circle-o-right:before{content:"\f18e"}.uk-icon-arrow-circle-o-left:before{content:"\f190"}.uk-icon-caret-square-o-left:before,.uk-icon-toggle-left:before{content:"\f191"}.uk-icon-dot-circle-o:before{content:"\f192"}.uk-icon-wheelchair:before{content:"\f193"}.uk-icon-vimeo-square:before{content:"\f194"}.uk-icon-try:before,.uk-icon-turkish-lira:before{content:"\f195"}.uk-icon-plus-square-o:before{content:"\f196"}.uk-icon-space-shuttle:before{content:"\f197"}.uk-icon-slack:before{content:"\f198"}.uk-icon-envelope-square:before{content:"\f199"}.uk-icon-wordpress:before{content:"\f19a"}.uk-icon-openid:before{content:"\f19b"}.uk-icon-bank:before,.uk-icon-institution:before,.uk-icon-university:before{content:"\f19c"}.uk-icon-graduation-cap:before,.uk-icon-mortar-board:before{content:"\f19d"}.uk-icon-yahoo:before{content:"\f19e"}.uk-icon-google:before{content:"\f1a0"}.uk-icon-reddit:before{content:"\f1a1"}.uk-icon-reddit-square:before{content:"\f1a2"}.uk-icon-stumbleupon-circle:before{content:"\f1a3"}.uk-icon-stumbleupon:before{content:"\f1a4"}.uk-icon-delicious:before{content:"\f1a5"}.uk-icon-digg:before{content:"\f1a6"}.uk-icon-pied-piper:before{content:"\f1a7"}.uk-icon-pied-piper-alt:before{content:"\f1a8"}.uk-icon-drupal:before{content:"\f1a9"}.uk-icon-joomla:before{content:"\f1aa"}.uk-icon-language:before{content:"\f1ab"}.uk-icon-fax:before{content:"\f1ac"}.uk-icon-building:before{content:"\f1ad"}.uk-icon-child:before{content:"\f1ae"}.uk-icon-paw:before{content:"\f1b0"}.uk-icon-spoon:before{content:"\f1b1"}.uk-icon-cube:before{content:"\f1b2"}.uk-icon-cubes:before{content:"\f1b3"}.uk-icon-behance:before{content:"\f1b4"}.uk-icon-behance-square:before{content:"\f1b5"}.uk-icon-steam:before{content:"\f1b6"}.uk-icon-steam-square:before{content:"\f1b7"}.uk-icon-recycle:before{content:"\f1b8"}.uk-icon-automobile:before,.uk-icon-car:before{content:"\f1b9"}.uk-icon-cab:before,.uk-icon-taxi:before{content:"\f1ba"}.uk-icon-tree:before{content:"\f1bb"}.uk-icon-spotify:before{content:"\f1bc"}.uk-icon-deviantart:before{content:"\f1bd"}.uk-icon-soundcloud:before{content:"\f1be"}.uk-icon-database:before{content:"\f1c0"}.uk-icon-file-pdf-o:before{content:"\f1c1"}.uk-icon-file-word-o:before{content:"\f1c2"}.uk-icon-file-excel-o:before{content:"\f1c3"}.uk-icon-file-powerpoint-o:before{content:"\f1c4"}.uk-icon-file-image-o:before,.uk-icon-file-photo-o:before,.uk-icon-file-picture-o:before{content:"\f1c5"}.uk-icon-file-archive-o:before,.uk-icon-file-zip-o:before{content:"\f1c6"}.uk-icon-file-audio-o:before,.uk-icon-file-sound-o:before{content:"\f1c7"}.uk-icon-file-movie-o:before,.uk-icon-file-video-o:before{content:"\f1c8"}.uk-icon-file-code-o:before{content:"\f1c9"}.uk-icon-vine:before{content:"\f1ca"}.uk-icon-codepen:before{content:"\f1cb"}.uk-icon-jsfiddle:before{content:"\f1cc"}.uk-icon-life-bouy:before,.uk-icon-life-buoy:before,.uk-icon-life-ring:before,.uk-icon-life-saver:before,.uk-icon-support:before{content:"\f1cd"}.uk-icon-circle-o-notch:before{content:"\f1ce"}.uk-icon-ra:before,.uk-icon-rebel:before{content:"\f1d0"}.uk-icon-empire:before,.uk-icon-ge:before{content:"\f1d1"}.uk-icon-git-square:before{content:"\f1d2"}.uk-icon-git:before{content:"\f1d3"}.uk-icon-hacker-news:before{content:"\f1d4"}.uk-icon-tencent-weibo:before{content:"\f1d5"}.uk-icon-qq:before{content:"\f1d6"}.uk-icon-wechat:before,.uk-icon-weixin:before{content:"\f1d7"}.uk-icon-paper-plane:before,.uk-icon-send:before{content:"\f1d8"}.uk-icon-paper-plane-o:before,.uk-icon-send-o:before{content:"\f1d9"}.uk-icon-history:before{content:"\f1da"}.uk-icon-circle-thin:before,.uk-icon-genderless:before{content:"\f1db"}.uk-icon-header:before{content:"\f1dc"}.uk-icon-paragraph:before{content:"\f1dd"}.uk-icon-sliders:before{content:"\f1de"}.uk-icon-share-alt:before{content:"\f1e0"}.uk-icon-share-alt-square:before{content:"\f1e1"}.uk-icon-bomb:before{content:"\f1e2"}.uk-icon-futbol-o:before,.uk-icon-soccer-ball-o:before{content:"\f1e3"}.uk-icon-tty:before{content:"\f1e4"}.uk-icon-binoculars:before{content:"\f1e5"}.uk-icon-plug:before{content:"\f1e6"}.uk-icon-slideshare:before{content:"\f1e7"}.uk-icon-twitch:before{content:"\f1e8"}.uk-icon-yelp:before{content:"\f1e9"}.uk-icon-newspaper-o:before{content:"\f1ea"}.uk-icon-wifi:before{content:"\f1eb"}.uk-icon-calculator:before{content:"\f1ec"}.uk-icon-paypal:before{content:"\f1ed"}.uk-icon-google-wallet:before{content:"\f1ee"}.uk-icon-cc-visa:before{content:"\f1f0"}.uk-icon-cc-mastercard:before{content:"\f1f1"}.uk-icon-cc-discover:before{content:"\f1f2"}.uk-icon-cc-amex:before{content:"\f1f3"}.uk-icon-cc-paypal:before{content:"\f1f4"}.uk-icon-cc-stripe:before{content:"\f1f5"}.uk-icon-bell-slash:before{content:"\f1f6"}.uk-icon-bell-slash-o:before{content:"\f1f7"}.uk-icon-trash:before{content:"\f1f8"}.uk-icon-copyright:before{content:"\f1f9"}.uk-icon-at:before{content:"\f1fa"}.uk-icon-eyedropper:before{content:"\f1fb"}.uk-icon-paint-brush:before{content:"\f1fc"}.uk-icon-birthday-cake:before{content:"\f1fd"}.uk-icon-area-chart:before{content:"\f1fe"}.uk-icon-pie-chart:before{content:"\f200"}.uk-icon-line-chart:before{content:"\f201"}.uk-icon-lastfm:before{content:"\f202"}.uk-icon-lastfm-square:before{content:"\f203"}.uk-icon-toggle-off:before{content:"\f204"}.uk-icon-toggle-on:before{content:"\f205"}.uk-icon-bicycle:before{content:"\f206"}.uk-icon-bus:before{content:"\f207"}.uk-icon-ioxhost:before{content:"\f208"}.uk-icon-angellist:before{content:"\f209"}.uk-icon-cc:before{content:"\f20a"}.uk-icon-ils:before,.uk-icon-shekel:before,.uk-icon-sheqel:before{content:"\f20b"}.uk-icon-meanpath:before{content:"\f20c"}.uk-icon-buysellads:before{content:"\f20d"}.uk-icon-connectdevelop:before{content:"\f20e"}.uk-icon-dashcube:before{content:"\f210"}.uk-icon-forumbee:before{content:"\f211"}.uk-icon-leanpub:before{content:"\f212"}.uk-icon-sellsy:before{content:"\f213"}.uk-icon-shirtsinbulk:before{content:"\f214"}.uk-icon-simplybuilt:before{content:"\f215"}.uk-icon-skyatlas:before{content:"\f216"}.uk-icon-cart-plus:before{content:"\f217"}.uk-icon-cart-arrow-down:before{content:"\f218"}.uk-icon-diamond:before{content:"\f219"}.uk-icon-ship:before{content:"\f21a"}.uk-icon-user-secret:before{content:"\f21b"}.uk-icon-motorcycle:before{content:"\f21c"}.uk-icon-street-view:before{content:"\f21d"}.uk-icon-heartbeat:before{content:"\f21e"}.uk-icon-venus:before{content:"\f221"}.uk-icon-mars:before{content:"\f222"}.uk-icon-mercury:before{content:"\f223"}.uk-icon-transgender:before{content:"\f224"}.uk-icon-transgender-alt:before{content:"\f225"}.uk-icon-venus-double:before{content:"\f226"}.uk-icon-mars-double:before{content:"\f227"}.uk-icon-venus-mars:before{content:"\f228"}.uk-icon-mars-stroke:before{content:"\f229"}.uk-icon-mars-stroke-v:before{content:"\f22a"}.uk-icon-mars-stroke-h:before{content:"\f22b"}.uk-icon-neuter:before{content:"\f22c"}.uk-icon-facebook-official:before{content:"\f230"}.uk-icon-pinterest-p:before{content:"\f231"}.uk-icon-whatsapp:before{content:"\f232"}.uk-icon-server:before{content:"\f233"}.uk-icon-user-plus:before{content:"\f234"}.uk-icon-user-times:before{content:"\f235"}.uk-icon-bed:before,.uk-icon-hotel:before{content:"\f236"}.uk-icon-viacoin:before{content:"\f237"}.uk-icon-train:before{content:"\f238"}.uk-icon-subway:before{content:"\f239"}.uk-icon-medium-logo:before{content:"\f23a"}.uk-icon-500px:before{content:"\f26e"}.uk-icon-amazon:before{content:"\f270"}.uk-icon-balance-scale:before{content:"\f24e"}.uk-icon-battery-0:before,.uk-icon-battery-empty:before{content:"\f244"}.uk-icon-battery-1:before,.uk-icon-battery-quarter:before{content:"\f243"}.uk-icon-battery-2:before,.uk-icon-battery-half:before{content:"\f242"}.uk-icon-battery-3:before,.uk-icon-battery-three-quarters:before{content:"\f241"}.uk-icon-battery-4:before,.uk-icon-battery-full:before{content:"\f240"}.uk-icon-black-tie:before{content:"\f27e"}.uk-icon-calendar-check-o:before{content:"\f274"}.uk-icon-calendar-minus-o:before{content:"\f272"}.uk-icon-calendar-plus-o:before{content:"\f271"}.uk-icon-calendar-times-o:before{content:"\f273"}.uk-icon-cc-diners-club:before{content:"\f24c"}.uk-icon-cc-jcb:before{content:"\f24b"}.uk-icon-chrome:before{content:"\f268"}.uk-icon-clone:before{content:"\f24d"}.uk-icon-commenting:before{content:"\f27a"}.uk-icon-commenting-o:before{content:"\f27b"}.uk-icon-contao:before{content:"\f26d"}.uk-icon-creative-commons:before{content:"\f25e"}.uk-icon-expeditedssl:before{content:"\f23e"}.uk-icon-firefox:before{content:"\f269"}.uk-icon-fonticons:before{content:"\f280"}.uk-icon-get-pocket:before{content:"\f265"}.uk-icon-gg:before{content:"\f260"}.uk-icon-gg-circle:before{content:"\f261"}.uk-icon-hand-lizard-o:before{content:"\f258"}.uk-icon-hand-paper-o:before,.uk-icon-hand-stop-o:before{content:"\f256"}.uk-icon-hand-peace-o:before{content:"\f25b"}.uk-icon-hand-pointer-o:before{content:"\f25a"}.uk-icon-hand-grab-o:before,.uk-icon-hand-rock-o:before{content:"\f255"}.uk-icon-hand-scissors-o:before{content:"\f257"}.uk-icon-hand-spock-o:before{content:"\f259"}.uk-icon-hourglass:before{content:"\f254"}.uk-icon-hourglass-o:before{content:"\f250"}.uk-icon-hourglass-1:before,.uk-icon-hourglass-start:before{content:"\f251"}.uk-icon-hourglass-2:before,.uk-icon-hourglass-half:before{content:"\f252"}.uk-icon-hourglass-3:before,.uk-icon-hourglass-end:before{content:"\f253"}.uk-icon-houzz:before{content:"\f27c"}.uk-icon-i-cursor:before{content:"\f246"}.uk-icon-industry:before{content:"\f275"}.uk-icon-internet-explorer:before{content:"\f26b"}.uk-icon-map:before{content:"\f279"}.uk-icon-map-o:before{content:"\f278"}.uk-icon-map-pin:before{content:"\f276"}.uk-icon-map-signs:before{content:"\f277"}.uk-icon-mouse-pointer:before{content:"\f245"}.uk-icon-object-group:before{content:"\f247"}.uk-icon-object-ungroup:before{content:"\f248"}.uk-icon-odnoklassniki:before{content:"\f263"}.uk-icon-odnoklassniki-square:before{content:"\f264"}.uk-icon-opencart:before{content:"\f23d"}.uk-icon-opera:before{content:"\f26a"}.uk-icon-optin-monster:before{content:"\f23c"}.uk-icon-registered:before{content:"\f25d"}.uk-icon-safari:before{content:"\f267"}.uk-icon-sticky-note:before{content:"\f249"}.uk-icon-sticky-note-o:before{content:"\f24a"}.uk-icon-television:before,.uk-icon-tv:before{content:"\f26c"}.uk-icon-trademark:before{content:"\f25c"}.uk-icon-tripadvisor:before{content:"\f262"}.uk-icon-vimeo:before{content:"\f27d"}.uk-icon-wikipedia-w:before{content:"\f266"}.uk-icon-y-combinator:before,.uk-icon-yc:before{content:"\f23b"}.uk-icon-y-combinator-square:before,.uk-icon-yc-square:before{content:"\f1d4"}.uk-icon-bluetooth:before{content:"\f293"}.uk-icon-bluetooth-b:before{content:"\f294"}.uk-icon-codiepie:before{content:"\f284"}.uk-icon-credit-card-alt:before{content:"\f283"}.uk-icon-edge:before{content:"\f282"}.uk-icon-fort-awesome:before{content:"\f286"}.uk-icon-hashtag:before{content:"\f292"}.uk-icon-mixcloud:before{content:"\f289"}.uk-icon-modx:before{content:"\f285"}.uk-icon-pause-circle:before{content:"\f28b"}.uk-icon-pause-circle-o:before{content:"\f28c"}.uk-icon-percent:before{content:"\f295"}.uk-icon-product-hunt:before{content:"\f288"}.uk-icon-reddit-alien:before{content:"\f281"}.uk-icon-scribd:before{content:"\f28a"}.uk-icon-shopping-bag:before{content:"\f290"}.uk-icon-shopping-basket:before{content:"\f291"}.uk-icon-stop-circle:before{content:"\f28d"}.uk-icon-stop-circle-o:before{content:"\f28e"}.uk-icon-usb:before{content:"\f287"}.uk-icon-american-sign-language-interpreting:before,.uk-icon-asl-interpreting:before{content:"\f2a3"}.uk-icon-assistive-listening-systems:before{content:"\f2a2"}.uk-icon-audio-description:before{content:"\f29e"}.uk-icon-blind:before{content:"\f29d"}.uk-icon-braille:before{content:"\f2a1"}.uk-icon-deaf:before,.uk-icon-deafness:before{content:"\f2a4"}.uk-icon-envira:before{content:"\f299"}.uk-icon-fa:before,.uk-icon-font-awesome:before{content:"\f2b4"}.uk-icon-first-order:before{content:"\f2b0"}.uk-icon-gitlab:before{content:"\f296"}.uk-icon-glide:before{content:"\f2a5"}.uk-icon-glide-g:before{content:"\f2a6"}.uk-icon-hard-of-hearing:before{content:"\f2a4"}.uk-icon-low-vision:before{content:"\f2a8"}.uk-icon-question-circle-o:before{content:"\f29c"}.uk-icon-sign-language:before,.uk-icon-signing:before{content:"\f2a7"}.uk-icon-snapchat:before{content:"\f2ab"}.uk-icon-snapchat-ghost:before{content:"\f2ac"}.uk-icon-snapchat-square:before{content:"\f2ad"}.uk-icon-themeisle:before{content:"\f2b2"}.uk-icon-universal-access:before{content:"\f29a"}.uk-icon-viadeo:before{content:"\f2a9"}.uk-icon-viadeo-square:before{content:"\f2aa"}.uk-icon-volume-control-phone:before{content:"\f2a0"}.uk-icon-wheelchair-alt:before{content:"\f29b"}.uk-icon-wpbeginner:before{content:"\f297"}.uk-icon-wpforms:before{content:"\f298"}.uk-icon-yoast:before{content:"\f2b1"}.uk-icon-adress-book:before{content:"\f2b9"}.uk-icon-adress-book-o:before{content:"\f2ba"}.uk-icon-adress-card:before{content:"\f2bb"}.uk-icon-adress-card-o:before{content:"\f2bc"}.uk-icon-bandcamp:before{content:"\f2d5"}.uk-icon-bath:before{content:"\f2cd"}.uk-icon-bathub:before{content:"\f2cd"}.uk-icon-drivers-license:before{content:"\f2c2"}.uk-icon-drivers-license-o:before{content:"\f2c3"}.uk-icon-eercast:before{content:"\f2da"}.uk-icon-envelope-open:before{content:"\f2b6"}.uk-icon-envelope-open-o:before{content:"\f2b7"}.uk-icon-etsy:before{content:"\f2d7"}.uk-icon-free-code-camp:before{content:"\f2c5"}.uk-icon-grav:before{content:"\f2d6"}.uk-icon-handshake-o:before{content:"\f2b5"}.uk-icon-id-badge:before{content:"\f2c1"}.uk-icon-id-card:before{content:"\f2c2"}.uk-icon-id-card-o:before{content:"\f2c3"}.uk-icon-imdb:before{content:"\f2d8"}.uk-icon-linode:before{content:"\f2b8"}.uk-icon-meetup:before{content:"\f2e0"}.uk-icon-microchip:before{content:"\f2db"}.uk-icon-podcast:before{content:"\f2ce"}.uk-icon-quora:before{content:"\f2c4"}.uk-icon-ravelry:before{content:"\f2d9"}.uk-icon-s15:before{content:"\f2cd"}.uk-icon-shower:before{content:"\f2cc"}.uk-icon-snowflake-o:before{content:"\f2dc"}.uk-icon-superpowers:before{content:"\f2dd"}.uk-icon-telegram:before{content:"\f2c6"}.uk-icon-thermometer:before{content:"\f2c7"}.uk-icon-thermometer-0:before{content:"\f2cb"}.uk-icon-thermometer-1:before{content:"\f2ca"}.uk-icon-thermometer-2:before{content:"\f2c9"}.uk-icon-thermometer-3:before{content:"\f2c8"}.uk-icon-thermometer-4:before{content:"\f2c7"}.uk-icon-thermometer-empty:before{content:"\f2cb"}.uk-icon-thermometer-full:before{content:"\f2c7"}.uk-icon-thermometer-half:before{content:"\f2c9"}.uk-icon-thermometer-quarter:before{content:"\f2ca"}.uk-icon-thermometer-three-quarters:before{content:"\f2c8"}.uk-icon-times-rectangle:before{content:"\f2d3"}.uk-icon-times-rectangle-o:before{content:"\f2d4"}.uk-icon-user-circle:before{content:"\f2bd"}.uk-icon-user-circle-o:before{content:"\f2be"}.uk-icon-user-o:before{content:"\f2c0"}.uk-icon-vcard:before{content:"\f2bb"}.uk-icon-vcard-o:before{content:"\f2bc"}.uk-icon-widow-close:before{content:"\f2d3"}.uk-icon-widow-close-o:before{content:"\f2d4"}.uk-icon-window-maximize:before{content:"\f2d0"}.uk-icon-window-minimize:before{content:"\f2d1"}.uk-icon-window-restore:before{content:"\f2d2"}.uk-icon-wpexplorer:before{content:"\f2de"}.uk-close::-moz-focus-inner{border:0;padding:0}.uk-close{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background:0 0;display:inline-block;box-sizing:content-box;width:20px;line-height:20px;text-align:center;vertical-align:middle;opacity:.3}.uk-close:after{display:block;content:"\f00d";font-family:FontAwesome}.uk-close:focus,.uk-close:hover{opacity:.5;outline:0;color:inherit;text-decoration:none;cursor:pointer}.uk-close-alt{padding:2px;border-radius:50%;background:#fff;opacity:1;box-shadow:0 0 0 1px rgba(0,0,0,.1),0 0 6px rgba(0,0,0,.3)}.uk-close-alt:focus,.uk-close-alt:hover{opacity:1}.uk-close-alt:after{opacity:.5}.uk-close-alt:focus:after,.uk-close-alt:hover:after{opacity:.8}.uk-badge{display:inline-block;padding:0 5px;background:#009dd8;font-size:10px;font-weight:700;line-height:14px;color:#fff;text-align:center;vertical-align:middle;text-transform:none;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);background-origin:border-box;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);border-radius:2px;text-shadow:0 -1px 0 rgba(0,0,0,.2)}a.uk-badge:hover{color:#fff}.uk-badge-notification{box-sizing:border-box;min-width:18px;border-radius:500px;font-size:12px;line-height:18px}.uk-badge-success{background-color:#82bb42;background-image:-webkit-linear-gradient(top,#9fd256,#6fac34);background-image:linear-gradient(to bottom,#9fd256,#6fac34)}.uk-badge-warning{background-color:#f9a124;background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406)}.uk-badge-danger{background-color:#d32c46;background-image:-webkit-linear-gradient(top,#ee465a,#c11a39);background-image:linear-gradient(to bottom,#ee465a,#c11a39)}.uk-alert{margin-bottom:15px;padding:10px;background:#ebf7fd;color:#2d7091;border:1px solid rgba(45,112,145,.3);border-radius:4px;text-shadow:0 1px 0 #fff}*+.uk-alert{margin-top:15px}.uk-alert>:last-child{margin-bottom:0}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert>.uk-close:first-child{float:right}.uk-alert>.uk-close:first-child+*{margin-top:0}.uk-alert-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-alert-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-alert-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)}.uk-alert-large{padding:20px}.uk-alert-large>.uk-close:first-child{margin:-10px -10px 0 0}.uk-thumbnail{display:inline-block;max-width:100%;box-sizing:border-box;margin:0;padding:4px;border:1px solid #ddd;background:#fff;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.05)}a.uk-thumbnail:focus,a.uk-thumbnail:hover{border-color:#aaa;background-color:#fff;text-decoration:none;outline:0;box-shadow:0 1px 4px rgba(0,0,0,.3)}.uk-thumbnail-caption{padding-top:4px;text-align:center;color:#444}.uk-thumbnail-mini{width:150px}.uk-thumbnail-small{width:200px}.uk-thumbnail-medium{width:300px}.uk-thumbnail-large{width:400px}.uk-thumbnail-expand,.uk-thumbnail-expand>img{width:100%}.uk-overlay{display:inline-block;position:relative;max-width:100%;vertical-align:middle;overflow:hidden;-webkit-transform:translateZ(0);margin:0}.uk-overlay.uk-border-circle{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.uk-overlay>:first-child{margin-bottom:0}.uk-overlay-panel{position:absolute;top:0;bottom:0;left:0;right:0;padding:20px;color:#fff}.uk-overlay-panel.uk-flex>*>:last-child,.uk-overlay-panel>:last-child{margin-bottom:0}.uk-overlay-panel h1,.uk-overlay-panel h2,.uk-overlay-panel h3,.uk-overlay-panel h4,.uk-overlay-panel h5,.uk-overlay-panel h6{color:inherit}.uk-overlay-panel a:not([class]){color:inherit;text-decoration:underline}.uk-overlay-panel a[class*=uk-icon-]:not(.uk-icon-button){color:inherit}.uk-overlay-hover:not(:hover):not(.uk-hover) .uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-active :not(.uk-active)>.uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-background{background:rgba(0,0,0,.5)}.uk-overlay-image{padding:0}.uk-overlay-top{bottom:auto}.uk-overlay-bottom{top:auto}.uk-overlay-left{right:auto}.uk-overlay-right{left:auto}.uk-overlay-icon:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-blur,.uk-overlay-fade,.uk-overlay-grayscale,.uk-overlay-scale,.uk-overlay-spin,[class*=uk-overlay-slide]{transition-duration:.3s;transition-timing-function:ease-out;transition-property:opacity,transform,filter}.uk-overlay-active .uk-overlay-fade,.uk-overlay-active .uk-overlay-scale,.uk-overlay-active .uk-overlay-spin,.uk-overlay-active [class*=uk-overlay-slide]{transition-duration:.8s}.uk-overlay-fade{opacity:.7}.uk-overlay-active .uk-active>.uk-overlay-fade,.uk-overlay-hover.uk-hover .uk-overlay-fade,.uk-overlay-hover:hover .uk-overlay-fade{opacity:1}.uk-overlay-scale{-webkit-transform:scale(1);transform:scale(1)}.uk-overlay-active .uk-active>.uk-overlay-scale,.uk-overlay-hover.uk-hover .uk-overlay-scale,.uk-overlay-hover:hover .uk-overlay-scale{-webkit-transform:scale(1.1);transform:scale(1.1)}.uk-overlay-spin{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}.uk-overlay-active .uk-active>.uk-overlay-spin,.uk-overlay-hover.uk-hover .uk-overlay-spin,.uk-overlay-hover:hover .uk-overlay-spin{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}.uk-overlay-grayscale{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.uk-overlay-active .uk-active>.uk-overlay-grayscale,.uk-overlay-hover.uk-hover .uk-overlay-grayscale,.uk-overlay-hover:hover .uk-overlay-grayscale{-webkit-filter:grayscale(0);filter:grayscale(0)}[class*=uk-overlay-slide]{opacity:0}.uk-overlay-slide-top{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.uk-overlay-slide-bottom{-webkit-transform:translateY(100%);transform:translateY(100%)}.uk-overlay-slide-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.uk-overlay-slide-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-overlay-active .uk-active>[class*=uk-overlay-slide],.uk-overlay-hover.uk-hover [class*=uk-overlay-slide],.uk-overlay-hover:hover [class*=uk-overlay-slide]{opacity:1;-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.uk-overlay-area{position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.3);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-area,.uk-overlay-toggle:hover .uk-overlay-area,.uk-overlay.uk-hover .uk-overlay-area,.uk-overlay:hover .uk-overlay-area{opacity:1}.uk-overlay-area:empty:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-area:not(:empty){font-size:0}.uk-overlay-area:not(:empty):before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-overlay-area-content{display:inline-block;box-sizing:border-box;width:100%;vertical-align:middle;font-size:1rem;text-align:center;padding:0 15px;color:#fff}.uk-overlay-area-content>:last-child{margin-bottom:0}.uk-overlay-area-content a:not([class]),.uk-overlay-area-content a:not([class]):hover{color:inherit}.uk-overlay-caption{position:absolute;bottom:0;left:0;right:0;padding:15px;background:rgba(0,0,0,.5);color:#fff;opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-caption,.uk-overlay-toggle:hover .uk-overlay-caption,.uk-overlay.uk-hover .uk-overlay-caption,.uk-overlay:hover .uk-overlay-caption{opacity:1}[class*=uk-column-]{-webkit-column-gap:25px;-moz-column-gap:25px;column-gap:25px}.uk-column-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}@media (min-width:480px){.uk-column-small-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-small-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-small-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-small-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-small-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:768px){.uk-column-medium-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-medium-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-medium-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-medium-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-medium-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:960px){.uk-column-large-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-large-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-large-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-large-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-large-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:1220px){.uk-column-xlarge-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-xlarge-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-xlarge-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-xlarge-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-xlarge-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}[class*=uk-animation-]{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media screen{[data-uk-scrollspy*=uk-animation-]:not([data-uk-scrollspy*=target]){opacity:0}}.uk-animation-fade{-webkit-animation-name:uk-fade;animation-name:uk-fade;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-timing-function:linear!important;animation-timing-function:linear!important}.uk-animation-scale-up{-webkit-animation-name:uk-fade-scale-02;animation-name:uk-fade-scale-02}.uk-animation-scale-down{-webkit-animation-name:uk-fade-scale-18;animation-name:uk-fade-scale-18}.uk-animation-slide-top{-webkit-animation-name:uk-fade-top;animation-name:uk-fade-top}.uk-animation-slide-bottom{-webkit-animation-name:uk-fade-bottom;animation-name:uk-fade-bottom}.uk-animation-slide-left{-webkit-animation-name:uk-fade-left;animation-name:uk-fade-left}.uk-animation-slide-right{-webkit-animation-name:uk-fade-right;animation-name:uk-fade-right}.uk-animation-scale{-webkit-animation-name:uk-scale-12;animation-name:uk-scale-12}.uk-animation-shake{-webkit-animation-name:uk-shake;animation-name:uk-shake}.uk-animation-reverse{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}.uk-animation-15{-webkit-animation-duration:15s;animation-duration:15s}.uk-animation-top-left{-webkit-transform-origin:0 0;transform-origin:0 0}.uk-animation-top-center{-webkit-transform-origin:50% 0;transform-origin:50% 0}.uk-animation-top-right{-webkit-transform-origin:100% 0;transform-origin:100% 0}.uk-animation-middle-left{-webkit-transform-origin:0 50%;transform-origin:0 50%}.uk-animation-middle-right{-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.uk-animation-bottom-left{-webkit-transform-origin:0 100%;transform-origin:0 100%}.uk-animation-bottom-center{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.uk-animation-bottom-right{-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.uk-animation-hover:not(:hover),.uk-animation-hover:not(:hover) [class*=uk-animation-],.uk-touch .uk-animation-hover:not(.uk-hover),.uk-touch .uk-animation-hover:not(.uk-hover) [class*=uk-animation-]{-webkit-animation-name:none;animation-name:none}@-webkit-keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes uk-fade-top{0%{opacity:0;-webkit-transform:translateY(-100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom{0%{opacity:0;-webkit-transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left{0%{opacity:0;-webkit-transform:translateX(-100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right{0%{opacity:0;-webkit-transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-scale-02{0%{opacity:0;-webkit-transform:scale(.2)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-15{0%{opacity:0;-webkit-transform:scale(1.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-15{0%{opacity:0;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-18{0%{opacity:0;-webkit-transform:scale(1.8)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-slide-left{0%{-webkit-transform:translateX(-100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right{0%{-webkit-transform:translateX(100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-left-33{0%{-webkit-transform:translateX(33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left-33{0%{transform:translateX(33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right-33{0%{-webkit-transform:translateX(-33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right-33{0%{transform:translateX(-33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-scale-12{0%{-webkit-transform:scale(1.2)}100%{-webkit-transform:scale(1)}}@keyframes uk-scale-12{0%{transform:scale(1.2)}100%{transform:scale(1)}}@-webkit-keyframes uk-rotate{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes uk-rotate{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}@-webkit-keyframes uk-shake{0%,100%{-webkit-transform:translateX(0)}10%{-webkit-transform:translateX(-9px)}20%{-webkit-transform:translateX(8px)}30%{-webkit-transform:translateX(-7px)}40%{-webkit-transform:translateX(6px)}50%{-webkit-transform:translateX(-5px)}60%{-webkit-transform:translateX(4px)}70%{-webkit-transform:translateX(-3px)}80%{-webkit-transform:translateX(2px)}90%{-webkit-transform:translateX(-1px)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@-webkit-keyframes uk-slide-top-fixed{0%{opacity:0;-webkit-transform:translateY(-10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-top-fixed{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-slide-bottom-fixed{0%{opacity:0;-webkit-transform:translateY(10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-bottom-fixed{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}.uk-dropdown,.uk-dropdown-blank{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:200px}.uk-dropdown{padding:15px;background:#fff;color:#444;font-size:1rem;vertical-align:top;border:1px solid #cbcbcb;border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.1)}.uk-dropdown:focus{outline:0}.uk-open>.uk-dropdown,.uk-open>.uk-dropdown-blank{display:block;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-dropdown-top{margin-top:-5px}.uk-dropdown-bottom{margin-top:5px}.uk-dropdown-left{margin-left:-5px}.uk-dropdown-right{margin-left:5px}.uk-dropdown .uk-nav{margin:0 -15px}.uk-grid .uk-dropdown-grid+.uk-dropdown-grid{margin-top:15px}.uk-dropdown-grid>[class*=uk-width-]>.uk-panel+.uk-panel{margin-top:15px}@media (min-width:768px){.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid{margin-left:-15px;margin-right:-15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]{padding-left:15px;padding-right:15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){border-left:1px solid #ddd}.uk-dropdown-width-2:not(.uk-dropdown-stack){width:400px}.uk-dropdown-width-3:not(.uk-dropdown-stack){width:600px}.uk-dropdown-width-4:not(.uk-dropdown-stack){width:800px}.uk-dropdown-width-5:not(.uk-dropdown-stack){width:1000px}}@media (max-width:767px){.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}.uk-dropdown-small{min-width:150px;width:auto;padding:5px;white-space:nowrap}.uk-dropdown-small .uk-nav{margin:0 -5px}.uk-dropdown-navbar{margin-top:6px;background:#fff;color:#444;left:-1px;box-shadow:0 2px 5px rgba(0,0,0,.1)}.uk-open>.uk-dropdown-navbar{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-dropdown-scrollable{overflow-y:auto;max-height:200px}.uk-dropdown-navbar.uk-dropdown-flip{left:auto}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;background:rgba(0,0,0,.6);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;touch-action:cross-slide-y pinch-zoom double-tap-zoom;-webkit-transform:translateZ(0);transform:translateZ(0)}.uk-modal.uk-open{opacity:1}.uk-modal-page,.uk-modal-page body{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:50px auto;padding:20px;width:600px;max-width:100%;max-width:calc(100% - 20px);background:#fff;opacity:0;-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-transition:opacity .3s linear,-webkit-transform .3s ease-out;transition:opacity .3s linear,transform .3s ease-out;border-radius:4px;box-shadow:0 0 10px rgba(0,0,0,.3)}@media (max-width:767px){.uk-modal-dialog{width:auto;margin:10px auto}}.uk-open .uk-modal-dialog{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.uk-modal-dialog>:not([class*=uk-modal-]):last-child{margin-bottom:0}.uk-modal-dialog>.uk-close:first-child{margin:-10px -10px 0 0;float:right}.uk-modal-dialog>.uk-close:first-child+:not([class*=uk-modal-]){margin-top:0}.uk-modal-dialog-lightbox{margin:15px auto;padding:0;max-width:95%;max-width:calc(100% - 30px);min-height:50px;border-radius:0}.uk-modal-dialog-lightbox>.uk-close:first-child{position:absolute;top:-12px;right:-12px;margin:0;float:none}@media (max-width:767px){.uk-modal-dialog-lightbox>.uk-close:first-child{top:-7px;right:-7px}}.uk-modal-dialog-blank{margin:0;padding:0;width:100%;max-width:100%;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.uk-modal-dialog-blank>.uk-close:first-child{position:absolute;top:20px;right:20px;z-index:1;margin:0;float:none}@media (min-width:768px){.uk-modal-dialog-large{width:930px}}@media (min-width:1220px){.uk-modal-dialog-large{width:1130px}}.uk-modal-header{margin-bottom:15px;margin:-20px -20px 15px -20px;padding:20px;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0;background:#fafafa}.uk-modal-footer{margin-top:15px;margin:15px -20px -20px -20px;padding:20px;border-top:1px solid #ddd;border-radius:0 0 4px 4px;background:#fafafa}.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-caption{position:absolute;left:0;right:0;bottom:-20px;margin-bottom:-10px;color:#fff;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-modal-spinner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:25px;color:#ddd}.uk-modal-spinner:after{content:"\f110";display:block;font-family:FontAwesome;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-offcanvas{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;touch-action:none;background:rgba(0,0,0,.1)}.uk-offcanvas.uk-active{display:block}.uk-offcanvas-page{position:fixed;-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-left:0}.uk-offcanvas-bar{position:fixed;top:0;bottom:0;left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:1001;width:270px;max-width:100%;background:#333;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;-ms-scroll-chaining:none}.uk-offcanvas.uk-active .uk-offcanvas-bar.uk-offcanvas-bar-show{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas-bar-flip{left:auto;right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas-bar[mode=none]{-webkit-transition:none;transition:none}.uk-offcanvas-bar[mode=reveal]{-webkit-transform:translateX(0);transform:translateX(0);clip:rect(0,0,100vh,0);-webkit-transition:-webkit-transform .3s ease-in-out,clip .3s ease-in-out;transition:transform .3s ease-in-out,clip .3s ease-in-out}.uk-offcanvas-bar-flip[mode=reveal]{clip:none;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas-bar-flip[mode=reveal]>*{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out}.uk-offcanvas.uk-active .uk-offcanvas-bar-flip[mode=reveal].uk-offcanvas-bar-show>*{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas .uk-panel{margin:20px 15px;color:#777;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-offcanvas .uk-panel-title{color:#ccc}.uk-offcanvas .uk-panel a:not([class]){color:#ccc}.uk-offcanvas .uk-panel a:not([class]):hover{color:#fff}.uk-offcanvas-bar:after{content:"";display:block;position:absolute;top:0;bottom:0;right:0;width:1px;background:rgba(0,0,0,.6);box-shadow:0 0 5px 2px rgba(0,0,0,.6)}.uk-offcanvas-bar-flip:after{right:auto;left:0;width:1px;background:rgba(0,0,0,.6);box-shadow:0 0 5px 2px rgba(0,0,0,.6)}.uk-switcher{margin:0;padding:0;list-style:none;touch-action:cross-slide-y pinch-zoom double-tap-zoom}.uk-switcher>:not(.uk-active){display:none}.uk-text-small{font-size:11px;line-height:16px}.uk-text-large{font-size:18px;line-height:24px;font-weight:400}.uk-text-bold{font-weight:700}.uk-text-muted{color:#999!important}.uk-text-primary{color:#2d7091!important}.uk-text-success{color:#659f13!important}.uk-text-warning{color:#e28327!important}.uk-text-danger{color:#d85030!important}.uk-text-contrast{color:#fff!important}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}@media (max-width:959px){.uk-text-center-medium{text-align:center!important}.uk-text-left-medium{text-align:left!important}}@media (max-width:767px){.uk-text-center-small{text-align:center!important}.uk-text-left-small{text-align:left!important}}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-text-break{word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;-moz-hyphens:auto;hyphens:auto}.uk-text-capitalize{text-transform:capitalize!important}.uk-text-lowercase{text-transform:lowercase!important}.uk-text-uppercase{text-transform:uppercase!important}.uk-container{box-sizing:border-box;max-width:980px;padding:0 25px}@media (min-width:1220px){.uk-container{max-width:1200px;padding:0 35px}}.uk-container:after,.uk-container:before{content:"";display:table}.uk-container:after{clear:both}.uk-container-center{margin-left:auto;margin-right:auto}.uk-clearfix:before{content:"";display:table-cell}.uk-clearfix:after{content:"";display:table;clear:both}.uk-nbfc{overflow:hidden}.uk-nbfc-alt{display:table-cell;width:10000px}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}[class*=uk-align-]{display:block;margin-bottom:15px}.uk-align-left{margin-right:15px;float:left}.uk-align-right{margin-left:15px;float:right}@media (min-width:768px){.uk-align-medium-left{margin-right:15px;float:left}.uk-align-medium-right{margin-left:15px;float:right}}.uk-align-center{margin-left:auto;margin-right:auto}.uk-vertical-align{font-size:0}.uk-vertical-align:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-vertical-align-bottom,.uk-vertical-align-middle{display:inline-block;max-width:100%;font-size:1rem}.uk-vertical-align-middle{vertical-align:middle}.uk-vertical-align-bottom{vertical-align:bottom}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{height:100vh;min-height:600px}.uk-responsive-height,.uk-responsive-width{box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto}.uk-margin{margin-bottom:15px}*+.uk-margin{margin-top:15px}.uk-margin-top{margin-top:15px!important}.uk-margin-bottom{margin-bottom:15px!important}.uk-margin-left{margin-left:15px!important}.uk-margin-right{margin-right:15px!important}.uk-margin-large{margin-bottom:50px}*+.uk-margin-large{margin-top:50px}.uk-margin-large-top{margin-top:50px!important}.uk-margin-large-bottom{margin-bottom:50px!important}.uk-margin-large-left{margin-left:50px!important}.uk-margin-large-right{margin-right:50px!important}.uk-margin-small{margin-bottom:5px}*+.uk-margin-small{margin-top:5px}.uk-margin-small-top{margin-top:5px!important}.uk-margin-small-bottom{margin-bottom:5px!important}.uk-margin-small-left{margin-left:5px!important}.uk-margin-small-right{margin-right:5px!important}.uk-margin-remove{margin:0!important}.uk-margin-top-remove{margin-top:0!important}.uk-margin-bottom-remove{margin-bottom:0!important}.uk-padding-remove{padding:0!important}.uk-padding-top-remove{padding-top:0!important}.uk-padding-bottom-remove{padding-bottom:0!important}.uk-padding-vertical-remove{padding-top:0!important;padding-bottom:0!important}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-heading-large{font-size:36px;line-height:42px}@media (min-width:768px){.uk-heading-large{font-size:52px;line-height:64px}}.uk-link-muted,.uk-link-muted a{color:#444}.uk-link-muted a:hover,.uk-link-muted:hover{color:#444}.uk-link-reset,.uk-link-reset a,.uk-link-reset a:focus,.uk-link-reset a:hover,.uk-link-reset:focus,.uk-link-reset:hover{color:inherit;text-decoration:none}.uk-scrollable-text{height:300px;overflow-y:scroll;-webkit-overflow-scrolling:touch;resize:both}.uk-scrollable-box{box-sizing:border-box;height:170px;padding:10px;border:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch;resize:both;border-radius:3px}.uk-scrollable-box>:last-child{margin-bottom:0}.uk-overflow-hidden{overflow:hidden}.uk-overflow-container{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-container>:last-child{margin-bottom:0}.uk-position-absolute,[class*=uk-position-top],[class*=uk-position-bottom]{position:absolute!important}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative!important}.uk-position-z-index{z-index:1}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important;max-width:100%}@media (min-width:960px){.uk-visible-small{display:none!important}.uk-visible-medium{display:none!important}.uk-hidden-large{display:none!important}}@media (min-width:768px) and (max-width:959px){.uk-visible-small{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-medium{display:none!important}}@media (max-width:767px){.uk-visible-medium{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-small{display:none!important}}.uk-hidden{display:none!important;visibility:hidden!important}.uk-invisible{visibility:hidden!important}.uk-visible-hover:hover .uk-hidden,.uk-visible-hover:hover .uk-invisible{display:block!important;visibility:visible!important}.uk-visible-hover-inline:hover .uk-hidden,.uk-visible-hover-inline:hover .uk-invisible{display:inline-block!important;visibility:visible!important}.uk-notouch .uk-hidden-notouch,.uk-touch .uk-hidden-touch{display:none!important}.uk-flex{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-flex-inline{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex}.uk-flex-inline>*,.uk-flex>*{-ms-flex-negative:1}.uk-flex-top{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start}.uk-flex-middle{-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-flex-bottom{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end}.uk-flex-center{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-space-between{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-space-around{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}.uk-flex-row-reverse{-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.uk-flex-column{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-flex-column-reverse{-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.uk-flex-nowrap{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.uk-flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.uk-flex-wrap-top{-ms-flex-line-pack:start;-webkit-align-content:flex-start;align-content:flex-start}.uk-flex-wrap-middle{-ms-flex-line-pack:center;-webkit-align-content:center;align-content:center}.uk-flex-wrap-bottom{-ms-flex-line-pack:end;-webkit-align-content:flex-end;align-content:flex-end}.uk-flex-wrap-space-between{-ms-flex-line-pack:justify;-webkit-align-content:space-between;align-content:space-between}.uk-flex-wrap-space-around{-ms-flex-line-pack:distribute;-webkit-align-content:space-around;align-content:space-around}.uk-flex-order-first{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last{-ms-flex-order:99;-webkit-order:99;order:99}@media (min-width:480px){.uk-flex-order-first-small{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-small{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:768px){.uk-flex-order-first-medium{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-medium{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:960px){.uk-flex-order-first-large{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-large{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:1220px){.uk-flex-order-first-xlarge{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-xlarge{-ms-flex-order:99;-webkit-order:99;order:99}}.uk-flex-item-none{-ms-flex:none;-webkit-flex:none;flex:none}.uk-flex-item-auto{-ms-flex:auto;-webkit-flex:auto;flex:auto;-ms-flex-negative:1}.uk-flex-item-1{-ms-flex:1;-webkit-flex:1;flex:1}.uk-contrast{color:#fff}.uk-contrast .uk-link,.uk-contrast a:not([class]){color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-link:hover,.uk-contrast a:not([class]):hover{color:#fff;text-decoration:underline}.uk-contrast :not(pre)>code,.uk-contrast :not(pre)>kbd,.uk-contrast :not(pre)>samp{color:#fff;border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.1)}.uk-contrast em{color:#fff}.uk-contrast h1,.uk-contrast h2,.uk-contrast h3,.uk-contrast h4,.uk-contrast h5,.uk-contrast h6{color:#fff}.uk-contrast hr{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav li>a,.uk-contrast .uk-nav li>a:hover{text-decoration:none}.uk-contrast .uk-nav-side>li>a{color:#fff}.uk-contrast .uk-nav-side>li>a:focus,.uk-contrast .uk-nav-side>li>a:hover{background:rgba(255,255,255,.1);color:#fff;text-shadow:none}.uk-contrast .uk-nav-side>li.uk-active>a{background:#fff;color:#444;text-shadow:none}.uk-contrast .uk-nav-side .uk-nav-header{color:#fff}.uk-contrast .uk-nav-side .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav-side ul a{color:rgba(255,255,255,.7)}.uk-contrast .uk-nav-side ul a:hover{color:#fff}.uk-contrast .uk-subnav>*>a{color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-subnav>*>a:focus,.uk-contrast .uk-subnav>*>a:hover{color:#fff;text-decoration:none}.uk-contrast .uk-subnav>.uk-active>a{color:#fff}.uk-contrast .uk-subnav-line>:nth-child(n+2):before{border-left-color:rgba(255,255,255,.2)}.uk-contrast .uk-subnav-pill>*>a:focus,.uk-contrast .uk-subnav-pill>*>a:hover{background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-subnav-pill>.uk-active>a{background:#fff;color:#444}.uk-contrast .uk-tab{border-bottom-color:rgba(255,255,255,.2)}.uk-contrast .uk-tab>li>a{border-color:transparent;color:rgba(255,255,255,.7);text-shadow:none}.uk-contrast .uk-tab>li.uk-open>a,.uk-contrast .uk-tab>li>a:focus,.uk-contrast .uk-tab>li>a:hover{border-color:rgba(255,255,255,.7);background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-tab>li.uk-active>a{border-color:rgba(255,255,255,.2);border-bottom-color:transparent;background:#fff;color:#444}.uk-contrast .uk-tab-center{border-bottom-color:rgba(255,255,255,.2)}.uk-contrast .uk-tab-grid:before{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-list-line>li:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-form input:not([type]),.uk-contrast .uk-form input[type=text],.uk-contrast .uk-form input[type=password],.uk-contrast .uk-form input[type=email],.uk-contrast .uk-form input[type=url],.uk-contrast .uk-form input[type=search],.uk-contrast .uk-form input[type=tel],.uk-contrast .uk-form input[type=number],.uk-contrast .uk-form input[type=datetime],.uk-contrast .uk-form input[type=datetime-local],.uk-contrast .uk-form input[type=date],.uk-contrast .uk-form input[type=month],.uk-contrast .uk-form input[type=time],.uk-contrast .uk-form input[type=week],.uk-contrast .uk-form input[type=color],.uk-contrast .uk-form select,.uk-contrast .uk-form textarea{border-color:rgba(255,255,255,.8);background:rgba(255,255,255,.8);color:#444;background-clip:padding-box}.uk-contrast .uk-form input:not([type]):focus,.uk-contrast .uk-form input[type=text]:focus,.uk-contrast .uk-form input[type=password]:focus,.uk-contrast .uk-form input[type=email]:focus,.uk-contrast .uk-form input[type=url]:focus,.uk-contrast .uk-form input[type=search]:focus,.uk-contrast .uk-form input[type=tel]:focus,.uk-contrast .uk-form input[type=number]:focus,.uk-contrast .uk-form input[type=datetime]:focus,.uk-contrast .uk-form input[type=datetime-local]:focus,.uk-contrast .uk-form input[type=date]:focus,.uk-contrast .uk-form input[type=month]:focus,.uk-contrast .uk-form input[type=time]:focus,.uk-contrast .uk-form input[type=week]:focus,.uk-contrast .uk-form input[type=color]:focus,.uk-contrast .uk-form select:focus,.uk-contrast .uk-form textarea:focus{border-color:#fff;background:#fff;color:#444}.uk-contrast .uk-form :-ms-input-placeholder{color:rgba(68,68,68,.7)!important}.uk-contrast .uk-form ::-moz-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-form ::-webkit-input-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-button{color:#444;background:#fff;border-color:transparent}.uk-contrast .uk-button:focus,.uk-contrast .uk-button:hover{background-color:rgba(255,255,255,.8);color:#444;border-color:transparent}.uk-contrast .uk-button.uk-active,.uk-contrast .uk-button:active{background-color:rgba(255,255,255,.7);color:#444;box-shadow:none}.uk-contrast .uk-button-primary{background-color:#009dd8;color:#fff}.uk-contrast .uk-button-primary:focus,.uk-contrast .uk-button-primary:hover{background-color:#00aff2;color:#fff}.uk-contrast .uk-button-primary.uk-active,.uk-contrast .uk-button-primary:active{background-color:#008abf;color:#fff}.uk-contrast .uk-icon-hover{color:rgba(255,255,255,.7)}.uk-contrast .uk-icon-hover:hover{color:#fff}.uk-contrast .uk-icon-button{background:#fff;color:#444;border-color:transparent}.uk-contrast .uk-icon-button:focus,.uk-contrast .uk-icon-button:hover{background-color:rgba(255,255,255,.8);color:#444;border-color:transparent}.uk-contrast .uk-icon-button:active{background-color:rgba(255,255,255,.7);color:#444;box-shadow:none}.uk-contrast .uk-text-muted{color:rgba(255,255,255,.6)!important}.uk-contrast .uk-text-primary{color:#2d7091!important}@media print{*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/media/uikit-v2/css/uikit.min.css b/media/uikit-v2/css/uikit.min.css new file mode 100644 index 0000000..40632d1 --- /dev/null +++ b/media/uikit-v2/css/uikit.min.css @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +html{font:400 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;background:#fff;color:#444}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}.uk-link,a{color:#07D;text-decoration:none;cursor:pointer}.uk-link:hover,a:hover{color:#059;text-decoration:underline}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-size:12px;font-family:Consolas,monospace,serif;color:#D05;white-space:nowrap}em{color:#D05}ins{background:#ffa;color:#444;text-decoration:none}mark{background:#ffa;color:#444}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}.uk-img-preserve,.uk-img-preserve audio,.uk-img-preserve canvas,.uk-img-preserve img,.uk-img-preserve svg,.uk-img-preserve video{max-width:none}img{border:0}svg:not(:root){overflow:hidden}blockquote,figure{margin:0}address,blockquote,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 15px 0}*+address,*+blockquote,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:15px}h1,h2,h3,h4,h5,h6{margin:0 0 15px 0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;color:#444;text-transform:none}*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:25px}.uk-h1,h1{font-size:36px;line-height:42px}.uk-h2,h2{font-size:24px;line-height:30px}.uk-h3,h3{font-size:18px;line-height:24px}.uk-h4,h4{font-size:16px;line-height:22px}.uk-h5,h5{font-size:14px;line-height:20px}.uk-h6,h6{font-size:12px;line-height:18px}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}hr{box-sizing:content-box;height:0;margin:15px 0;border:0;border-top:1px solid #ddd}address{font-style:normal}blockquote{padding-left:15px;border-left:5px solid #ddd;font-size:16px;line-height:22px;font-style:italic}pre{padding:10px;background:#f5f5f5;font:12px/18px Consolas,monospace,serif;color:#444;-moz-tab-size:4;tab-size:4;overflow:auto}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}article,aside,details,figcaption,figure,footer,header,main,nav,section,summary{display:block}progress{vertical-align:baseline}audio:not([controls]){display:none}[hidden],template{display:none}iframe{border:0}@media screen and (max-width:400px){@-ms-viewport{width:device-width}}.uk-grid{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid:after,.uk-grid:before{content:"";display:block;overflow:hidden}.uk-grid:after{clear:both}.uk-grid>*{-ms-flex:none;-webkit-flex:none;flex:none;margin:0;float:left}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-25px}.uk-grid>*{padding-left:25px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:25px}@media (min-width:1220px){.uk-grid{margin-left:-35px}.uk-grid>*{padding-left:35px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:35px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid-collapse+.uk-grid-collapse,.uk-grid-collapse>*>.uk-panel+.uk-panel,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-small{margin-left:-10px}.uk-grid-small>*{padding-left:10px}.uk-grid-small+.uk-grid-small,.uk-grid-small>*>.uk-panel+.uk-panel,.uk-grid-small>.uk-grid-margin{margin-top:10px}.uk-grid-medium{margin-left:-25px}.uk-grid-medium>*{padding-left:25px}.uk-grid-medium+.uk-grid-medium,.uk-grid-medium>*>.uk-panel+.uk-panel,.uk-grid-medium>.uk-grid-margin{margin-top:25px}@media (min-width:960px){.uk-grid-large{margin-left:-35px}.uk-grid-large>*{padding-left:35px}.uk-grid-large+.uk-grid-large,.uk-grid-large-margin,.uk-grid-large>*>.uk-panel+.uk-panel{margin-top:35px}}@media (min-width:1220px){.uk-grid-large{margin-left:-50px}.uk-grid-large>*{padding-left:50px}.uk-grid-large+.uk-grid-large,.uk-grid-large-margin,.uk-grid-large>*>.uk-panel+.uk-panel{margin-top:50px}}.uk-grid-divider:not(:empty){margin-left:-25px;margin-right:-25px}.uk-grid-divider>*{padding-left:25px;padding-right:25px}.uk-grid-divider>[class*=uk-width-9-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-1-]:not(.uk-width-1-1):nth-child(n+2),.uk-grid-divider>[class*=uk-width-2-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-3-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-4-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-5-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-6-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-7-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-8-]:nth-child(n+2){border-left:1px solid #ddd}@media (min-width:768px){.uk-grid-divider>[class*=uk-width-medium-]:not(.uk-width-medium-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:960px){.uk-grid-divider>[class*=uk-width-large-]:not(.uk-width-large-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:1220px){.uk-grid-divider:not(:empty){margin-left:-35px;margin-right:-35px}.uk-grid-divider>*{padding-left:35px;padding-right:35px}.uk-grid-divider:empty{margin-top:35px;margin-bottom:35px}}.uk-grid-divider:empty{margin-top:25px;margin-bottom:25px;border-top:1px solid #ddd}.uk-grid-match>*{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-grid-match>*>*{-ms-flex:none;-webkit-flex:none;flex:none;box-sizing:border-box;width:100%}[class*=uk-grid-width]>*{box-sizing:border-box;width:100%}.uk-grid-width-1-2>*{width:50%}.uk-grid-width-1-3>*{width:33.333%}.uk-grid-width-1-4>*{width:25%}.uk-grid-width-1-5>*{width:20%}.uk-grid-width-1-6>*{width:16.666%}.uk-grid-width-1-10>*{width:10%}.uk-grid-width-auto>*{width:auto}@media (min-width:480px){.uk-grid-width-small-1-1>*{width:100%}.uk-grid-width-small-1-2>*{width:50%}.uk-grid-width-small-1-3>*{width:33.333%}.uk-grid-width-small-1-4>*{width:25%}.uk-grid-width-small-1-5>*{width:20%}.uk-grid-width-small-1-6>*{width:16.666%}.uk-grid-width-small-1-10>*{width:10%}}@media (min-width:768px){.uk-grid-width-medium-1-1>*{width:100%}.uk-grid-width-medium-1-2>*{width:50%}.uk-grid-width-medium-1-3>*{width:33.333%}.uk-grid-width-medium-1-4>*{width:25%}.uk-grid-width-medium-1-5>*{width:20%}.uk-grid-width-medium-1-6>*{width:16.666%}.uk-grid-width-medium-1-10>*{width:10%}}@media (min-width:960px){.uk-grid-width-large-1-1>*{width:100%}.uk-grid-width-large-1-2>*{width:50%}.uk-grid-width-large-1-3>*{width:33.333%}.uk-grid-width-large-1-4>*{width:25%}.uk-grid-width-large-1-5>*{width:20%}.uk-grid-width-large-1-6>*{width:16.666%}.uk-grid-width-large-1-10>*{width:10%}}@media (min-width:1220px){.uk-grid-width-xlarge-1-1>*{width:100%}.uk-grid-width-xlarge-1-2>*{width:50%}.uk-grid-width-xlarge-1-3>*{width:33.333%}.uk-grid-width-xlarge-1-4>*{width:25%}.uk-grid-width-xlarge-1-5>*{width:20%}.uk-grid-width-xlarge-1-6>*{width:16.666%}.uk-grid-width-xlarge-1-10>*{width:10%}}[class*=uk-width]{box-sizing:border-box;width:100%}.uk-width-1-1{width:100%}.uk-width-1-2,.uk-width-2-4,.uk-width-3-6,.uk-width-5-10{width:50%}.uk-width-1-3,.uk-width-2-6{width:33.333%}.uk-width-2-3,.uk-width-4-6{width:66.666%}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5,.uk-width-2-10{width:20%}.uk-width-2-5,.uk-width-4-10{width:40%}.uk-width-3-5,.uk-width-6-10{width:60%}.uk-width-4-5,.uk-width-8-10{width:80%}.uk-width-1-6{width:16.666%}.uk-width-5-6{width:83.333%}.uk-width-1-10{width:10%}.uk-width-3-10{width:30%}.uk-width-7-10{width:70%}.uk-width-9-10{width:90%}@media (min-width:480px){.uk-width-small-1-1{width:100%}.uk-width-small-1-2,.uk-width-small-2-4,.uk-width-small-3-6,.uk-width-small-5-10{width:50%}.uk-width-small-1-3,.uk-width-small-2-6{width:33.333%}.uk-width-small-2-3,.uk-width-small-4-6{width:66.666%}.uk-width-small-1-4{width:25%}.uk-width-small-3-4{width:75%}.uk-width-small-1-5,.uk-width-small-2-10{width:20%}.uk-width-small-2-5,.uk-width-small-4-10{width:40%}.uk-width-small-3-5,.uk-width-small-6-10{width:60%}.uk-width-small-4-5,.uk-width-small-8-10{width:80%}.uk-width-small-1-6{width:16.666%}.uk-width-small-5-6{width:83.333%}.uk-width-small-1-10{width:10%}.uk-width-small-3-10{width:30%}.uk-width-small-7-10{width:70%}.uk-width-small-9-10{width:90%}}@media (min-width:768px){.uk-width-medium-1-1{width:100%}.uk-width-medium-1-2,.uk-width-medium-2-4,.uk-width-medium-3-6,.uk-width-medium-5-10{width:50%}.uk-width-medium-1-3,.uk-width-medium-2-6{width:33.333%}.uk-width-medium-2-3,.uk-width-medium-4-6{width:66.666%}.uk-width-medium-1-4{width:25%}.uk-width-medium-3-4{width:75%}.uk-width-medium-1-5,.uk-width-medium-2-10{width:20%}.uk-width-medium-2-5,.uk-width-medium-4-10{width:40%}.uk-width-medium-3-5,.uk-width-medium-6-10{width:60%}.uk-width-medium-4-5,.uk-width-medium-8-10{width:80%}.uk-width-medium-1-6{width:16.666%}.uk-width-medium-5-6{width:83.333%}.uk-width-medium-1-10{width:10%}.uk-width-medium-3-10{width:30%}.uk-width-medium-7-10{width:70%}.uk-width-medium-9-10{width:90%}}@media (min-width:960px){.uk-width-large-1-1{width:100%}.uk-width-large-1-2,.uk-width-large-2-4,.uk-width-large-3-6,.uk-width-large-5-10{width:50%}.uk-width-large-1-3,.uk-width-large-2-6{width:33.333%}.uk-width-large-2-3,.uk-width-large-4-6{width:66.666%}.uk-width-large-1-4{width:25%}.uk-width-large-3-4{width:75%}.uk-width-large-1-5,.uk-width-large-2-10{width:20%}.uk-width-large-2-5,.uk-width-large-4-10{width:40%}.uk-width-large-3-5,.uk-width-large-6-10{width:60%}.uk-width-large-4-5,.uk-width-large-8-10{width:80%}.uk-width-large-1-6{width:16.666%}.uk-width-large-5-6{width:83.333%}.uk-width-large-1-10{width:10%}.uk-width-large-3-10{width:30%}.uk-width-large-7-10{width:70%}.uk-width-large-9-10{width:90%}}@media (min-width:1220px){.uk-width-xlarge-1-1{width:100%}.uk-width-xlarge-1-2,.uk-width-xlarge-2-4,.uk-width-xlarge-3-6,.uk-width-xlarge-5-10{width:50%}.uk-width-xlarge-1-3,.uk-width-xlarge-2-6{width:33.333%}.uk-width-xlarge-2-3,.uk-width-xlarge-4-6{width:66.666%}.uk-width-xlarge-1-4{width:25%}.uk-width-xlarge-3-4{width:75%}.uk-width-xlarge-1-5,.uk-width-xlarge-2-10{width:20%}.uk-width-xlarge-2-5,.uk-width-xlarge-4-10{width:40%}.uk-width-xlarge-3-5,.uk-width-xlarge-6-10{width:60%}.uk-width-xlarge-4-5,.uk-width-xlarge-8-10{width:80%}.uk-width-xlarge-1-6{width:16.666%}.uk-width-xlarge-5-6{width:83.333%}.uk-width-xlarge-1-10{width:10%}.uk-width-xlarge-3-10{width:30%}.uk-width-xlarge-7-10{width:70%}.uk-width-xlarge-9-10{width:90%}}@media (min-width:768px){[class*=uk-push-],[class*=uk-pull-]{position:relative}.uk-push-1-2,.uk-push-2-4,.uk-push-3-6,.uk-push-5-10{left:50%}.uk-push-1-3,.uk-push-2-6{left:33.333%}.uk-push-2-3,.uk-push-4-6{left:66.666%}.uk-push-1-4{left:25%}.uk-push-3-4{left:75%}.uk-push-1-5,.uk-push-2-10{left:20%}.uk-push-2-5,.uk-push-4-10{left:40%}.uk-push-3-5,.uk-push-6-10{left:60%}.uk-push-4-5,.uk-push-8-10{left:80%}.uk-push-1-6{left:16.666%}.uk-push-5-6{left:83.333%}.uk-push-1-10{left:10%}.uk-push-3-10{left:30%}.uk-push-7-10{left:70%}.uk-push-9-10{left:90%}.uk-pull-1-2,.uk-pull-2-4,.uk-pull-3-6,.uk-pull-5-10{left:-50%}.uk-pull-1-3,.uk-pull-2-6{left:-33.333%}.uk-pull-2-3,.uk-pull-4-6{left:-66.666%}.uk-pull-1-4{left:-25%}.uk-pull-3-4{left:-75%}.uk-pull-1-5,.uk-pull-2-10{left:-20%}.uk-pull-2-5,.uk-pull-4-10{left:-40%}.uk-pull-3-5,.uk-pull-6-10{left:-60%}.uk-pull-4-5,.uk-pull-8-10{left:-80%}.uk-pull-1-6{left:-16.666%}.uk-pull-5-6{left:-83.333%}.uk-pull-1-10{left:-10%}.uk-pull-3-10{left:-30%}.uk-pull-7-10{left:-70%}.uk-pull-9-10{left:-90%}}.uk-panel{display:block;position:relative}.uk-panel,.uk-panel:hover{text-decoration:none}.uk-panel:after,.uk-panel:before{content:"";display:table}.uk-panel:after{clear:both}.uk-panel>:not(.uk-panel-title):last-child{margin-bottom:0}.uk-panel-title{margin-top:0;margin-bottom:15px;font-size:18px;line-height:24px;font-weight:400;text-transform:none;color:#444}.uk-panel-badge{position:absolute;top:0;right:0;z-index:1}.uk-panel-teaser{margin-bottom:15px}.uk-panel-body{padding:15px}.uk-panel-box{padding:15px;background:#f5f5f5;color:#444}.uk-panel-box-hover:hover{color:#444}.uk-panel-box .uk-panel-title{color:#444}.uk-panel-box .uk-panel-badge{top:10px;right:10px}.uk-panel-box>.uk-panel-teaser{margin-top:-15px;margin-left:-15px;margin-right:-15px}.uk-panel-box>.uk-nav-side{margin:0 -15px}.uk-panel-box-primary{background-color:#ebf7fd;color:#2d7091}.uk-panel-box-primary-hover:hover{color:#2d7091}.uk-panel-box-primary .uk-panel-title{color:#2d7091}.uk-panel-box-secondary{background-color:#eee;color:#444}.uk-panel-box-secondary-hover:hover{color:#444}.uk-panel-box-secondary .uk-panel-title{color:#444}.uk-panel-hover{padding:15px;color:#444}.uk-panel-hover:hover{background:#f5f5f5;color:#444}.uk-panel-hover .uk-panel-badge{top:10px;right:10px}.uk-panel-hover>.uk-panel-teaser{margin-top:-15px;margin-left:-15px;margin-right:-15px}.uk-panel-header .uk-panel-title{padding-bottom:10px;border-bottom:1px solid #ddd;color:#444}.uk-panel-space{padding:30px}.uk-panel-space .uk-panel-badge{top:30px;right:30px}.uk-panel+.uk-panel-divider{margin-top:50px!important}.uk-panel+.uk-panel-divider:before{content:"";display:block;position:absolute;top:-25px;left:0;right:0;border-top:1px solid #ddd}@media (min-width:1220px){.uk-panel+.uk-panel-divider{margin-top:70px!important}.uk-panel+.uk-panel-divider:before{top:-35px}}.uk-block{position:relative;box-sizing:border-box;padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block{padding-top:50px;padding-bottom:50px}}.uk-block:after,.uk-block:before{content:"";display:table}.uk-block:after{clear:both}.uk-block>:last-child{margin-bottom:0}.uk-block-large{padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block-large{padding-top:50px;padding-bottom:50px}}@media (min-width:960px){.uk-block-large{padding-top:100px;padding-bottom:100px}}.uk-block-default{background:#fff}.uk-block-muted{background:#f9f9f9}.uk-block-primary{background:#00a8e6}.uk-block-secondary{background:#222}.uk-block-default+.uk-block-default,.uk-block-muted+.uk-block-muted,.uk-block-primary+.uk-block-primary,.uk-block-secondary+.uk-block-secondary{padding-top:0}.uk-article:after,.uk-article:before{content:"";display:table}.uk-article:after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:25px}.uk-article-title{font-size:36px;line-height:42px;font-weight:400;text-transform:none}.uk-article-title a{color:inherit;text-decoration:none}.uk-article-meta{font-size:12px;line-height:18px;color:#999}.uk-article-lead{color:#444;font-size:18px;line-height:24px;font-weight:400}.uk-article-divider{margin-bottom:25px;border-color:#ddd}*+.uk-article-divider{margin-top:25px}.uk-comment-header{margin-bottom:15px}.uk-comment-header:after,.uk-comment-header:before{content:"";display:table}.uk-comment-header:after{clear:both}.uk-comment-avatar{margin-right:15px;float:left}.uk-comment-title{margin:5px 0 0 0;font-size:16px;line-height:22px}.uk-comment-meta{margin:2px 0 0 0;font-size:11px;line-height:16px;color:#999}.uk-comment-body>:last-child{margin-bottom:0}.uk-comment-list{padding:0;list-style:none}.uk-comment-list .uk-comment+ul{margin:15px 0 0 0;list-style:none}.uk-comment-list .uk-comment+ul>li:nth-child(n+2),.uk-comment-list>li:nth-child(n+2){margin-top:15px}@media (min-width:768px){.uk-comment-list .uk-comment+ul{padding-left:100px}}.uk-cover-background{background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.uk-cover{overflow:hidden}.uk-cover-object{width:auto;height:auto;min-width:100%;min-height:100%;max-width:none;position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}[data-uk-cover]{position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav>li>a{padding:5px 15px}.uk-nav ul{padding-left:15px}.uk-nav ul a{padding:2px 0}.uk-nav li>a>div{font-size:12px;line-height:18px}.uk-nav-header{padding:5px 15px;text-transform:uppercase;font-weight:700;font-size:12px}.uk-nav-header:not(:first-child){margin-top:15px}.uk-nav-divider{margin:9px 15px}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-parent-icon>.uk-parent>a:after{content:"\f104";width:20px;margin-right:-10px;float:right;font-family:FontAwesome;text-align:center}.uk-nav-parent-icon>.uk-parent.uk-open>a:after{content:"\f107"}.uk-nav-side>li>a{color:#444}.uk-nav-side>li>a:focus,.uk-nav-side>li>a:hover{background:rgba(0,0,0,.05);color:#444;outline:0}.uk-nav-side>li.uk-active>a{background:#00a8e6;color:#fff}.uk-nav-side .uk-nav-header{color:#444}.uk-nav-side .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-side ul a{color:#07D}.uk-nav-side ul a:hover{color:#059}.uk-nav-dropdown>li>a{color:#444}.uk-nav-dropdown>li>a:focus,.uk-nav-dropdown>li>a:hover{background:#00a8e6;color:#fff;outline:0}.uk-nav-dropdown .uk-nav-header{color:#999}.uk-nav-dropdown .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-dropdown ul a{color:#07D}.uk-nav-dropdown ul a:hover{color:#059}.uk-nav-navbar>li>a{color:#444}.uk-nav-navbar>li>a:focus,.uk-nav-navbar>li>a:hover{background:#00a8e6;color:#fff;outline:0}.uk-nav-navbar .uk-nav-header{color:#999}.uk-nav-navbar .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-navbar ul a{color:#07D}.uk-nav-navbar ul a:hover{color:#059}.uk-nav-offcanvas>li>a{color:#ccc;padding:10px 15px}.uk-nav-offcanvas>.uk-open>a,html:not(.uk-touch) .uk-nav-offcanvas>li>a:focus,html:not(.uk-touch) .uk-nav-offcanvas>li>a:hover{background:#404040;color:#fff;outline:0}html .uk-nav.uk-nav-offcanvas>li.uk-active>a{background:#1a1a1a;color:#fff}.uk-nav-offcanvas .uk-nav-header{color:#777}.uk-nav-offcanvas .uk-nav-divider{border-top:1px solid #1a1a1a}.uk-nav-offcanvas ul a{color:#ccc}html:not(.uk-touch) .uk-nav-offcanvas ul a:hover{color:#fff}.uk-navbar{background:#eee;color:#444}.uk-navbar:after,.uk-navbar:before{content:"";display:table}.uk-navbar:after{clear:both}.uk-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-navbar-nav>li{float:left;position:relative}.uk-navbar-nav>li>a{display:block;box-sizing:border-box;text-decoration:none;height:40px;padding:0 15px;line-height:40px;color:#444;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400}.uk-navbar-nav>li>a[href='#']{cursor:text}.uk-navbar-nav>li.uk-open>a,.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus{background-color:#f5f5f5;color:#444;outline:0}.uk-navbar-nav>li>a:active{background-color:#ddd;color:#444}.uk-navbar-nav>li.uk-active>a{background-color:#f5f5f5;color:#444}.uk-navbar-nav .uk-navbar-nav-subtitle{line-height:28px}.uk-navbar-nav-subtitle>div{margin-top:-6px;font-size:10px;line-height:12px}.uk-navbar-brand,.uk-navbar-content,.uk-navbar-toggle{box-sizing:border-box;display:block;height:40px;padding:0 15px;float:left}.uk-navbar-brand:before,.uk-navbar-content:before,.uk-navbar-toggle:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-navbar-content+.uk-navbar-content:not(.uk-navbar-center){padding-left:0}.uk-navbar-content>a:not([class]){color:#07D}.uk-navbar-content>a:not([class]):hover{color:#059}.uk-navbar-brand{font-size:18px;color:#444;text-decoration:none}.uk-navbar-brand:focus,.uk-navbar-brand:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle{font-size:18px;color:#444;text-decoration:none}.uk-navbar-toggle:focus,.uk-navbar-toggle:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle:after{content:"\f0c9";font-family:FontAwesome;vertical-align:middle}.uk-navbar-toggle-alt:after{content:"\f002"}.uk-navbar-center{float:none;text-align:center;max-width:50%;margin-left:auto;margin-right:auto}.uk-navbar-flip{float:right}.uk-subnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-subnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px;position:relative}.uk-subnav:after,.uk-subnav:before{content:"";display:block;overflow:hidden}.uk-subnav:after{clear:both}.uk-subnav>*{float:left}.uk-subnav>*>*{display:inline-block;color:#444}.uk-subnav>*>:focus,.uk-subnav>*>:hover{color:#07D;text-decoration:none}.uk-subnav>.uk-active>*{color:#07D}.uk-subnav-line>:before{content:"";display:inline-block;height:10px;vertical-align:middle}.uk-subnav-line>:nth-child(n+2):before{margin-right:10px;border-left:1px solid #ddd}.uk-subnav-pill>*>*{padding:3px 9px}.uk-subnav-pill>*>:focus,.uk-subnav-pill>*>:hover{background:#eee;color:#444;text-decoration:none;outline:0}.uk-subnav-pill>.uk-active>*{background:#00a8e6;color:#fff}.uk-subnav>.uk-disabled>*{background:0 0;color:#999;text-decoration:none;cursor:text}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>li{font-size:1rem;vertical-align:top}.uk-breadcrumb>li,.uk-breadcrumb>li>a,.uk-breadcrumb>li>span{display:inline-block}.uk-breadcrumb>li:nth-child(n+2):before{content:"/";display:inline-block;margin:0 8px}.uk-breadcrumb>li:not(.uk-active)>span{color:#999}.uk-pagination{padding:0;list-style:none;text-align:center;font-size:0}.uk-pagination:after,.uk-pagination:before{content:"";display:table}.uk-pagination:after{clear:both}.uk-pagination>li{display:inline-block;font-size:1rem;vertical-align:top}.uk-pagination>li:nth-child(n+2){margin-left:5px}.uk-pagination>li>a,.uk-pagination>li>span{display:inline-block;min-width:16px;padding:3px 5px;line-height:20px;text-decoration:none;box-sizing:content-box;text-align:center}.uk-pagination>li>a{background:#eee;color:#444}.uk-pagination>li>a:focus,.uk-pagination>li>a:hover{background-color:#f5f5f5;color:#444;outline:0}.uk-pagination>li>a:active{background-color:#ddd;color:#444}.uk-pagination>.uk-active>span{background:#00a8e6;color:#fff}.uk-pagination>.uk-disabled>span{background-color:#f5f5f5;color:#999}.uk-pagination-previous{float:left}.uk-pagination-next{float:right}.uk-pagination-left{text-align:left}.uk-pagination-right{text-align:right}.uk-tab{margin:0;padding:0;list-style:none;border-bottom:1px solid #ddd}.uk-tab:after,.uk-tab:before{content:"";display:table}.uk-tab:after{clear:both}.uk-tab>li{margin-bottom:-1px;float:left;position:relative}.uk-tab>li>a{display:block;padding:8px 12px 8px 12px;border:1px solid transparent;border-bottom-width:0;color:#07D;text-decoration:none}.uk-tab>li:nth-child(n+2)>a{margin-left:5px}.uk-tab>li.uk-open>a,.uk-tab>li>a:focus,.uk-tab>li>a:hover{border-color:#f5f5f5;background:#f5f5f5;color:#059;outline:0}.uk-tab>li.uk-open:not(.uk-active)>a,.uk-tab>li:not(.uk-active)>a:focus,.uk-tab>li:not(.uk-active)>a:hover{margin-bottom:1px;padding-bottom:7px}.uk-tab>li.uk-active>a{border-color:#ddd;border-bottom-color:transparent;background:#fff;color:#444}.uk-tab>li.uk-disabled>a{color:#999;cursor:text}.uk-tab>li.uk-disabled.uk-active>a,.uk-tab>li.uk-disabled>a:focus,.uk-tab>li.uk-disabled>a:hover{background:0 0;border-color:transparent}.uk-tab-flip>li{float:right}.uk-tab-flip>li:nth-child(n+2)>a{margin-left:0;margin-right:5px}.uk-tab>li.uk-tab-responsive>a{margin-left:0;margin-right:0}.uk-tab-responsive>a:before{content:"\f0c9\00a0";font-family:FontAwesome}.uk-tab-center{border-bottom:1px solid #ddd}.uk-tab-center-bottom{border-bottom:none;border-top:1px solid #ddd}.uk-tab-center:after,.uk-tab-center:before{content:"";display:table}.uk-tab-center:after{clear:both}.uk-tab-center .uk-tab{position:relative;right:50%;border:none;float:right}.uk-tab-center .uk-tab>li{position:relative;right:-50%}.uk-tab-center .uk-tab>li>a{text-align:center}.uk-tab-bottom{border-top:1px solid #ddd;border-bottom:none}.uk-tab-bottom>li{margin-top:-1px;margin-bottom:0}.uk-tab-bottom>li>a{padding-top:8px;padding-bottom:8px;border-bottom-width:1px;border-top-width:0}.uk-tab-bottom>li.uk-open:not(.uk-active)>a,.uk-tab-bottom>li:not(.uk-active)>a:focus,.uk-tab-bottom>li:not(.uk-active)>a:hover{margin-bottom:0;margin-top:1px;padding-bottom:8px;padding-top:7px}.uk-tab-bottom>li.uk-active>a{border-top-color:transparent;border-bottom-color:#ddd}.uk-tab-grid{margin-left:-5px;border-bottom:none;position:relative;z-index:0}.uk-tab-grid:before{display:block;position:absolute;left:5px;right:0;bottom:-1px;border-top:1px solid #ddd;z-index:-1}.uk-tab-grid>li:first-child>a{margin-left:5px}.uk-tab-grid>li>a{text-align:center}.uk-tab-grid.uk-tab-bottom{border-top:none}.uk-tab-grid.uk-tab-bottom:before{top:-1px;bottom:auto}@media (min-width:768px){.uk-tab-left,.uk-tab-right{border-bottom:none}.uk-tab-left>li,.uk-tab-right>li{margin-bottom:0;float:none}.uk-tab-left>li>a,.uk-tab-right>li>a{padding-top:8px;padding-bottom:8px}.uk-tab-left>li:nth-child(n+2)>a,.uk-tab-right>li:nth-child(n+2)>a{margin-left:0;margin-top:5px}.uk-tab-left>li.uk-active>a,.uk-tab-right>li.uk-active>a{border-color:#ddd}.uk-tab-left{border-right:1px solid #ddd}.uk-tab-left>li{margin-right:-1px}.uk-tab-left>li>a{border-bottom-width:1px;border-right-width:0}.uk-tab-left>li:not(.uk-active)>a:focus,.uk-tab-left>li:not(.uk-active)>a:hover{margin-bottom:0;margin-right:1px;padding-bottom:8px;padding-right:11px}.uk-tab-left>li.uk-active>a{border-right-color:transparent}.uk-tab-right{border-left:1px solid #ddd}.uk-tab-right>li{margin-left:-1px}.uk-tab-right>li>a{border-bottom-width:1px;border-left-width:0}.uk-tab-right>li:not(.uk-active)>a:focus,.uk-tab-right>li:not(.uk-active)>a:hover{margin-bottom:0;margin-left:1px;padding-bottom:8px;padding-left:11px}.uk-tab-right>li.uk-active>a{border-left-color:transparent}}.uk-thumbnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-thumbnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px}.uk-thumbnav:after,.uk-thumbnav:before{content:"";display:block;overflow:hidden}.uk-thumbnav:after{clear:both}.uk-thumbnav>*{float:left}.uk-thumbnav>*>*{display:block;background:#fff}.uk-thumbnav>*>*>img{opacity:.7;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.uk-thumbnav>*>:focus>img,.uk-thumbnav>*>:hover>img{opacity:1}.uk-thumbnav>.uk-active>*>img{opacity:1}.uk-list{padding:0;list-style:none}.uk-list>li:after,.uk-list>li:before{content:"";display:table}.uk-list>li:after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:20px;list-style:none}.uk-list-line>li:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-list-striped>li{padding:5px 5px}.uk-list-striped>li:nth-of-type(odd){background:#f5f5f5}.uk-list-space>li:nth-child(n+2){margin-top:10px}@media (min-width:768px){.uk-description-list-horizontal{overflow:hidden}.uk-description-list-horizontal>dt{width:160px;float:left;clear:both;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-description-list-horizontal>dd{margin-left:180px}}.uk-description-list-line>dt{font-weight:400}.uk-description-list-line>dt:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-description-list-line>dd{color:#999}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:15px}*+.uk-table{margin-top:15px}.uk-table td,.uk-table th{padding:8px 8px}.uk-table th{text-align:left}.uk-table td{vertical-align:top}.uk-table thead th{vertical-align:bottom}.uk-table caption,.uk-table tfoot{font-size:12px;font-style:italic}.uk-table caption{text-align:left;color:#999}.uk-table tbody tr.uk-active{background:#EEE}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-striped tbody tr:nth-of-type(odd){background:#f5f5f5}.uk-table-condensed td{padding:4px 8px}.uk-table-hover tbody tr:hover{background:#EEE}.uk-form input,.uk-form select,.uk-form textarea{box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:inherit}.uk-form select{text-transform:none}.uk-form optgroup{font:inherit;font-weight:700}.uk-form input::-moz-focus-inner{border:0;padding:0}.uk-form input[type=checkbox],.uk-form input[type=radio]{padding:0}.uk-form input[type=checkbox]:not(:disabled),.uk-form input[type=radio]:not(:disabled){cursor:pointer}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form textarea{-webkit-appearance:none}.uk-form input[type=search]::-webkit-search-cancel-button,.uk-form input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-form input[type=number]::-webkit-inner-spin-button,.uk-form input[type=number]::-webkit-outer-spin-button{height:auto}.uk-form fieldset{border:none;margin:0;padding:0}.uk-form textarea{overflow:auto;vertical-align:top}.uk-form ::-moz-placeholder{opacity:1}.uk-form :invalid{box-shadow:none}.uk-form input:not([type=radio]):not([type=checkbox]),.uk-form select{vertical-align:middle}.uk-form>:last-child{margin-bottom:0}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form input[type=datetime-local],.uk-form input[type=date],.uk-form input[type=month],.uk-form input[type=time],.uk-form input[type=week],.uk-form input[type=color],.uk-form select,.uk-form textarea{height:30px;max-width:100%;padding:4px 6px;border:1px solid #ddd;background:#fff;color:#444;-webkit-transition:all .2s linear;-webkit-transition-property:border,background,color,box-shadow,padding;transition:all .2s linear;transition-property:border,background,color,box-shadow,padding}.uk-form input:not([type]):focus,.uk-form input[type=text]:focus,.uk-form input[type=password]:focus,.uk-form input[type=email]:focus,.uk-form input[type=url]:focus,.uk-form input[type=search]:focus,.uk-form input[type=tel]:focus,.uk-form input[type=number]:focus,.uk-form input[type=datetime]:focus,.uk-form input[type=datetime-local]:focus,.uk-form input[type=date]:focus,.uk-form input[type=month]:focus,.uk-form input[type=time]:focus,.uk-form input[type=week]:focus,.uk-form input[type=color]:focus,.uk-form select:focus,.uk-form textarea:focus{border-color:#99baca;outline:0;background:#f5fbfe;color:#444}.uk-form input:not([type]):disabled,.uk-form input[type=text]:disabled,.uk-form input[type=password]:disabled,.uk-form input[type=email]:disabled,.uk-form input[type=url]:disabled,.uk-form input[type=search]:disabled,.uk-form input[type=tel]:disabled,.uk-form input[type=number]:disabled,.uk-form input[type=datetime]:disabled,.uk-form input[type=datetime-local]:disabled,.uk-form input[type=date]:disabled,.uk-form input[type=month]:disabled,.uk-form input[type=time]:disabled,.uk-form input[type=week]:disabled,.uk-form input[type=color]:disabled,.uk-form select:disabled,.uk-form textarea:disabled{border-color:#ddd;background-color:#f5f5f5;color:#999}.uk-form :-ms-input-placeholder{color:#999!important}.uk-form ::-moz-placeholder{color:#999}.uk-form ::-webkit-input-placeholder{color:#999}.uk-form :disabled:-ms-input-placeholder{color:#999!important}.uk-form :disabled::-moz-placeholder{color:#999}.uk-form :disabled::-webkit-input-placeholder{color:#999}.uk-form legend{width:100%;border:0;padding:0;padding-bottom:15px;font-size:18px;line-height:30px}.uk-form legend:after{content:"";display:block;border-bottom:1px solid #ddd;width:100%}input:not([type]).uk-form-small,input[type].uk-form-small,select.uk-form-small,textarea.uk-form-small{height:25px;padding:3px 3px;font-size:12px}input:not([type]).uk-form-large,input[type].uk-form-large,select.uk-form-large,textarea.uk-form-large{height:40px;padding:8px 6px;font-size:16px}.uk-form select[multiple],.uk-form select[size],.uk-form textarea{height:auto}.uk-form-danger{border-color:#dc8d99!important;background:#fff7f8!important;color:#d85030!important}.uk-form-success{border-color:#8ec73b!important;background:#fafff2!important;color:#659f13!important}.uk-form-blank{border-color:transparent!important;border-style:dashed!important;background:0 0!important}.uk-form-blank:focus{border-color:#ddd!important}input.uk-form-width-mini{width:40px}select.uk-form-width-mini{width:65px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-form-row:after,.uk-form-row:before{content:"";display:table}.uk-form-row:after{clear:both}.uk-form-row+.uk-form-row{margin-top:15px}.uk-form-help-inline{display:inline-block;margin:0 0 0 10px}.uk-form-help-block{margin:5px 0 0 0}.uk-form-controls>:first-child{margin-top:0}.uk-form-controls>:last-child{margin-bottom:0}.uk-form-controls-condensed{margin:5px 0}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px;font-weight:700}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px;font-weight:700}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:5px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:5px}}.uk-form-icon{display:inline-block;position:relative;max-width:100%}.uk-form-icon>[class*=uk-icon-]{position:absolute;top:50%;width:30px;margin-top:-7px;font-size:14px;color:#999;text-align:center;pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)>input{padding-left:30px!important}.uk-form-icon-flip>[class*=uk-icon-]{right:0}.uk-form-icon-flip>input{padding-right:30px!important}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:#444;text-transform:none;display:inline-block;box-sizing:border-box;padding:0 12px;background:#eee;vertical-align:middle;line-height:30px;min-height:30px;font-size:1rem;text-decoration:none;text-align:center}.uk-button:not(:disabled){cursor:pointer}.uk-button:focus,.uk-button:hover{background-color:#f5f5f5;color:#444;outline:0;text-decoration:none}.uk-button.uk-active,.uk-button:active{background-color:#ddd;color:#444}.uk-button-primary{background-color:#00a8e6;color:#fff}.uk-button-primary:focus,.uk-button-primary:hover{background-color:#35b3ee;color:#fff}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#0091ca;color:#fff}.uk-button-success{background-color:#8cc14c;color:#fff}.uk-button-success:focus,.uk-button-success:hover{background-color:#8ec73b;color:#fff}.uk-button-success.uk-active,.uk-button-success:active{background-color:#72ae41;color:#fff}.uk-button-danger{background-color:#da314b;color:#fff}.uk-button-danger:focus,.uk-button-danger:hover{background-color:#e4354f;color:#fff}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#c91032;color:#fff}.uk-button:disabled{background-color:#f5f5f5;color:#999}.uk-button-link,.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:disabled,.uk-button-link:focus,.uk-button-link:hover{border-color:transparent;background:0 0}.uk-button-link{color:#07D}.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:focus,.uk-button-link:hover{color:#059;text-decoration:underline}.uk-button-link:disabled{color:#999}.uk-button-link:focus{outline:1px dotted}.uk-button-mini{min-height:20px;padding:0 6px;line-height:20px;font-size:11px}.uk-button-small{min-height:25px;padding:0 10px;line-height:25px;font-size:12px}.uk-button-large{min-height:40px;padding:0 15px;line-height:40px;font-size:16px}.uk-button-group{display:inline-block;vertical-align:middle;position:relative;font-size:0;white-space:nowrap}.uk-button-group>*{display:inline-block}.uk-button-group .uk-button{vertical-align:top}.uk-button-dropdown{display:inline-block;vertical-align:middle;position:relative}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.woff2) format('woff2'),url(../fonts/fontawesome-webfont.woff) format("woff"),url(../fonts/fontawesome-webfont.ttf) format("truetype");font-weight:400;font-style:normal}[class*=uk-icon-]{font-family:FontAwesome;display:inline-block;font-weight:400;font-style:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=uk-icon-],[class*=uk-icon-]:focus,[class*=uk-icon-]:hover{text-decoration:none}.uk-icon-small{font-size:150%;vertical-align:-10%}.uk-icon-medium{font-size:200%;vertical-align:-16%}.uk-icon-large{font-size:250%;vertical-align:-22%}.uk-icon-justify{width:1em;text-align:center}.uk-icon-spin{display:inline-block;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-icon-hover{color:#999}.uk-icon-hover:hover{color:#444}.uk-icon-button{box-sizing:border-box;display:inline-block;width:35px;height:35px;border-radius:100%;background:#eee;line-height:35px;color:#444;font-size:18px;text-align:center}.uk-icon-button:focus,.uk-icon-button:hover{background-color:#f5f5f5;color:#444;outline:0}.uk-icon-button:active{background-color:#ddd;color:#444}.uk-icon-glass:before{content:"\f000"}.uk-icon-music:before{content:"\f001"}.uk-icon-search:before{content:"\f002"}.uk-icon-envelope-o:before{content:"\f003"}.uk-icon-heart:before{content:"\f004"}.uk-icon-star:before{content:"\f005"}.uk-icon-star-o:before{content:"\f006"}.uk-icon-user:before{content:"\f007"}.uk-icon-film:before{content:"\f008"}.uk-icon-th-large:before{content:"\f009"}.uk-icon-th:before{content:"\f00a"}.uk-icon-th-list:before{content:"\f00b"}.uk-icon-check:before{content:"\f00c"}.uk-icon-close:before,.uk-icon-remove:before,.uk-icon-times:before{content:"\f00d"}.uk-icon-search-plus:before{content:"\f00e"}.uk-icon-search-minus:before{content:"\f010"}.uk-icon-power-off:before{content:"\f011"}.uk-icon-signal:before{content:"\f012"}.uk-icon-cog:before,.uk-icon-gear:before{content:"\f013"}.uk-icon-trash-o:before{content:"\f014"}.uk-icon-home:before{content:"\f015"}.uk-icon-file-o:before{content:"\f016"}.uk-icon-clock-o:before{content:"\f017"}.uk-icon-road:before{content:"\f018"}.uk-icon-download:before{content:"\f019"}.uk-icon-arrow-circle-o-down:before{content:"\f01a"}.uk-icon-arrow-circle-o-up:before{content:"\f01b"}.uk-icon-inbox:before{content:"\f01c"}.uk-icon-play-circle-o:before{content:"\f01d"}.uk-icon-repeat:before,.uk-icon-rotate-right:before{content:"\f01e"}.uk-icon-refresh:before{content:"\f021"}.uk-icon-list-alt:before{content:"\f022"}.uk-icon-lock:before{content:"\f023"}.uk-icon-flag:before{content:"\f024"}.uk-icon-headphones:before{content:"\f025"}.uk-icon-volume-off:before{content:"\f026"}.uk-icon-volume-down:before{content:"\f027"}.uk-icon-volume-up:before{content:"\f028"}.uk-icon-qrcode:before{content:"\f029"}.uk-icon-barcode:before{content:"\f02a"}.uk-icon-tag:before{content:"\f02b"}.uk-icon-tags:before{content:"\f02c"}.uk-icon-book:before{content:"\f02d"}.uk-icon-bookmark:before{content:"\f02e"}.uk-icon-print:before{content:"\f02f"}.uk-icon-camera:before{content:"\f030"}.uk-icon-font:before{content:"\f031"}.uk-icon-bold:before{content:"\f032"}.uk-icon-italic:before{content:"\f033"}.uk-icon-text-height:before{content:"\f034"}.uk-icon-text-width:before{content:"\f035"}.uk-icon-align-left:before{content:"\f036"}.uk-icon-align-center:before{content:"\f037"}.uk-icon-align-right:before{content:"\f038"}.uk-icon-align-justify:before{content:"\f039"}.uk-icon-list:before{content:"\f03a"}.uk-icon-dedent:before,.uk-icon-outdent:before{content:"\f03b"}.uk-icon-indent:before{content:"\f03c"}.uk-icon-video-camera:before{content:"\f03d"}.uk-icon-image:before,.uk-icon-photo:before,.uk-icon-picture-o:before{content:"\f03e"}.uk-icon-pencil:before{content:"\f040"}.uk-icon-map-marker:before{content:"\f041"}.uk-icon-adjust:before{content:"\f042"}.uk-icon-tint:before{content:"\f043"}.uk-icon-edit:before,.uk-icon-pencil-square-o:before{content:"\f044"}.uk-icon-share-square-o:before{content:"\f045"}.uk-icon-check-square-o:before{content:"\f046"}.uk-icon-arrows:before{content:"\f047"}.uk-icon-step-backward:before{content:"\f048"}.uk-icon-fast-backward:before{content:"\f049"}.uk-icon-backward:before{content:"\f04a"}.uk-icon-play:before{content:"\f04b"}.uk-icon-pause:before{content:"\f04c"}.uk-icon-stop:before{content:"\f04d"}.uk-icon-forward:before{content:"\f04e"}.uk-icon-fast-forward:before{content:"\f050"}.uk-icon-step-forward:before{content:"\f051"}.uk-icon-eject:before{content:"\f052"}.uk-icon-chevron-left:before{content:"\f053"}.uk-icon-chevron-right:before{content:"\f054"}.uk-icon-plus-circle:before{content:"\f055"}.uk-icon-minus-circle:before{content:"\f056"}.uk-icon-times-circle:before{content:"\f057"}.uk-icon-check-circle:before{content:"\f058"}.uk-icon-question-circle:before{content:"\f059"}.uk-icon-info-circle:before{content:"\f05a"}.uk-icon-crosshairs:before{content:"\f05b"}.uk-icon-times-circle-o:before{content:"\f05c"}.uk-icon-check-circle-o:before{content:"\f05d"}.uk-icon-ban:before{content:"\f05e"}.uk-icon-arrow-left:before{content:"\f060"}.uk-icon-arrow-right:before{content:"\f061"}.uk-icon-arrow-up:before{content:"\f062"}.uk-icon-arrow-down:before{content:"\f063"}.uk-icon-mail-forward:before,.uk-icon-share:before{content:"\f064"}.uk-icon-expand:before{content:"\f065"}.uk-icon-compress:before{content:"\f066"}.uk-icon-plus:before{content:"\f067"}.uk-icon-minus:before{content:"\f068"}.uk-icon-asterisk:before{content:"\f069"}.uk-icon-exclamation-circle:before{content:"\f06a"}.uk-icon-gift:before{content:"\f06b"}.uk-icon-leaf:before{content:"\f06c"}.uk-icon-fire:before{content:"\f06d"}.uk-icon-eye:before{content:"\f06e"}.uk-icon-eye-slash:before{content:"\f070"}.uk-icon-exclamation-triangle:before,.uk-icon-warning:before{content:"\f071"}.uk-icon-plane:before{content:"\f072"}.uk-icon-calendar:before{content:"\f073"}.uk-icon-random:before{content:"\f074"}.uk-icon-comment:before{content:"\f075"}.uk-icon-magnet:before{content:"\f076"}.uk-icon-chevron-up:before{content:"\f077"}.uk-icon-chevron-down:before{content:"\f078"}.uk-icon-retweet:before{content:"\f079"}.uk-icon-shopping-cart:before{content:"\f07a"}.uk-icon-folder:before{content:"\f07b"}.uk-icon-folder-open:before{content:"\f07c"}.uk-icon-arrows-v:before{content:"\f07d"}.uk-icon-arrows-h:before{content:"\f07e"}.uk-icon-bar-chart-o:before,.uk-icon-bar-chart:before{content:"\f080"}.uk-icon-twitter-square:before{content:"\f081"}.uk-icon-facebook-square:before{content:"\f082"}.uk-icon-camera-retro:before{content:"\f083"}.uk-icon-key:before{content:"\f084"}.uk-icon-cogs:before,.uk-icon-gears:before{content:"\f085"}.uk-icon-comments:before{content:"\f086"}.uk-icon-thumbs-o-up:before{content:"\f087"}.uk-icon-thumbs-o-down:before{content:"\f088"}.uk-icon-star-half:before{content:"\f089"}.uk-icon-heart-o:before{content:"\f08a"}.uk-icon-sign-out:before{content:"\f08b"}.uk-icon-linkedin-square:before{content:"\f08c"}.uk-icon-thumb-tack:before{content:"\f08d"}.uk-icon-external-link:before{content:"\f08e"}.uk-icon-sign-in:before{content:"\f090"}.uk-icon-trophy:before{content:"\f091"}.uk-icon-github-square:before{content:"\f092"}.uk-icon-upload:before{content:"\f093"}.uk-icon-lemon-o:before{content:"\f094"}.uk-icon-phone:before{content:"\f095"}.uk-icon-square-o:before{content:"\f096"}.uk-icon-bookmark-o:before{content:"\f097"}.uk-icon-phone-square:before{content:"\f098"}.uk-icon-twitter:before{content:"\f099"}.uk-icon-facebook-f:before,.uk-icon-facebook:before{content:"\f09a"}.uk-icon-github:before{content:"\f09b"}.uk-icon-unlock:before{content:"\f09c"}.uk-icon-credit-card:before{content:"\f09d"}.uk-icon-rss:before{content:"\f09e"}.uk-icon-hdd-o:before{content:"\f0a0"}.uk-icon-bullhorn:before{content:"\f0a1"}.uk-icon-bell:before{content:"\f0f3"}.uk-icon-certificate:before{content:"\f0a3"}.uk-icon-hand-o-right:before{content:"\f0a4"}.uk-icon-hand-o-left:before{content:"\f0a5"}.uk-icon-hand-o-up:before{content:"\f0a6"}.uk-icon-hand-o-down:before{content:"\f0a7"}.uk-icon-arrow-circle-left:before{content:"\f0a8"}.uk-icon-arrow-circle-right:before{content:"\f0a9"}.uk-icon-arrow-circle-up:before{content:"\f0aa"}.uk-icon-arrow-circle-down:before{content:"\f0ab"}.uk-icon-globe:before{content:"\f0ac"}.uk-icon-wrench:before{content:"\f0ad"}.uk-icon-tasks:before{content:"\f0ae"}.uk-icon-filter:before{content:"\f0b0"}.uk-icon-briefcase:before{content:"\f0b1"}.uk-icon-arrows-alt:before{content:"\f0b2"}.uk-icon-group:before,.uk-icon-users:before{content:"\f0c0"}.uk-icon-chain:before,.uk-icon-link:before{content:"\f0c1"}.uk-icon-cloud:before{content:"\f0c2"}.uk-icon-flask:before{content:"\f0c3"}.uk-icon-cut:before,.uk-icon-scissors:before{content:"\f0c4"}.uk-icon-copy:before,.uk-icon-files-o:before{content:"\f0c5"}.uk-icon-paperclip:before{content:"\f0c6"}.uk-icon-floppy-o:before,.uk-icon-save:before{content:"\f0c7"}.uk-icon-square:before{content:"\f0c8"}.uk-icon-bars:before,.uk-icon-navicon:before,.uk-icon-reorder:before{content:"\f0c9"}.uk-icon-list-ul:before{content:"\f0ca"}.uk-icon-list-ol:before{content:"\f0cb"}.uk-icon-strikethrough:before{content:"\f0cc"}.uk-icon-underline:before{content:"\f0cd"}.uk-icon-table:before{content:"\f0ce"}.uk-icon-magic:before{content:"\f0d0"}.uk-icon-truck:before{content:"\f0d1"}.uk-icon-pinterest:before{content:"\f0d2"}.uk-icon-pinterest-square:before{content:"\f0d3"}.uk-icon-google-plus-square:before{content:"\f0d4"}.uk-icon-google-plus:before{content:"\f0d5"}.uk-icon-money:before{content:"\f0d6"}.uk-icon-caret-down:before{content:"\f0d7"}.uk-icon-caret-up:before{content:"\f0d8"}.uk-icon-caret-left:before{content:"\f0d9"}.uk-icon-caret-right:before{content:"\f0da"}.uk-icon-columns:before{content:"\f0db"}.uk-icon-sort:before,.uk-icon-unsorted:before{content:"\f0dc"}.uk-icon-sort-desc:before,.uk-icon-sort-down:before{content:"\f0dd"}.uk-icon-sort-asc:before,.uk-icon-sort-up:before{content:"\f0de"}.uk-icon-envelope:before{content:"\f0e0"}.uk-icon-linkedin:before{content:"\f0e1"}.uk-icon-rotate-left:before,.uk-icon-undo:before{content:"\f0e2"}.uk-icon-gavel:before,.uk-icon-legal:before{content:"\f0e3"}.uk-icon-dashboard:before,.uk-icon-tachometer:before{content:"\f0e4"}.uk-icon-comment-o:before{content:"\f0e5"}.uk-icon-comments-o:before{content:"\f0e6"}.uk-icon-bolt:before,.uk-icon-flash:before{content:"\f0e7"}.uk-icon-sitemap:before{content:"\f0e8"}.uk-icon-umbrella:before{content:"\f0e9"}.uk-icon-clipboard:before,.uk-icon-paste:before{content:"\f0ea"}.uk-icon-lightbulb-o:before{content:"\f0eb"}.uk-icon-exchange:before{content:"\f0ec"}.uk-icon-cloud-download:before{content:"\f0ed"}.uk-icon-cloud-upload:before{content:"\f0ee"}.uk-icon-user-md:before{content:"\f0f0"}.uk-icon-stethoscope:before{content:"\f0f1"}.uk-icon-suitcase:before{content:"\f0f2"}.uk-icon-bell-o:before{content:"\f0a2"}.uk-icon-coffee:before{content:"\f0f4"}.uk-icon-cutlery:before{content:"\f0f5"}.uk-icon-file-text-o:before{content:"\f0f6"}.uk-icon-building-o:before{content:"\f0f7"}.uk-icon-hospital-o:before{content:"\f0f8"}.uk-icon-ambulance:before{content:"\f0f9"}.uk-icon-medkit:before{content:"\f0fa"}.uk-icon-fighter-jet:before{content:"\f0fb"}.uk-icon-beer:before{content:"\f0fc"}.uk-icon-h-square:before{content:"\f0fd"}.uk-icon-plus-square:before{content:"\f0fe"}.uk-icon-angle-double-left:before{content:"\f100"}.uk-icon-angle-double-right:before{content:"\f101"}.uk-icon-angle-double-up:before{content:"\f102"}.uk-icon-angle-double-down:before{content:"\f103"}.uk-icon-angle-left:before{content:"\f104"}.uk-icon-angle-right:before{content:"\f105"}.uk-icon-angle-up:before{content:"\f106"}.uk-icon-angle-down:before{content:"\f107"}.uk-icon-desktop:before{content:"\f108"}.uk-icon-laptop:before{content:"\f109"}.uk-icon-tablet:before{content:"\f10a"}.uk-icon-mobile-phone:before,.uk-icon-mobile:before{content:"\f10b"}.uk-icon-circle-o:before{content:"\f10c"}.uk-icon-quote-left:before{content:"\f10d"}.uk-icon-quote-right:before{content:"\f10e"}.uk-icon-spinner:before{content:"\f110"}.uk-icon-circle:before{content:"\f111"}.uk-icon-mail-reply:before,.uk-icon-reply:before{content:"\f112"}.uk-icon-github-alt:before{content:"\f113"}.uk-icon-folder-o:before{content:"\f114"}.uk-icon-folder-open-o:before{content:"\f115"}.uk-icon-smile-o:before{content:"\f118"}.uk-icon-frown-o:before{content:"\f119"}.uk-icon-meh-o:before{content:"\f11a"}.uk-icon-gamepad:before{content:"\f11b"}.uk-icon-keyboard-o:before{content:"\f11c"}.uk-icon-flag-o:before{content:"\f11d"}.uk-icon-flag-checkered:before{content:"\f11e"}.uk-icon-terminal:before{content:"\f120"}.uk-icon-code:before{content:"\f121"}.uk-icon-mail-reply-all:before,.uk-icon-reply-all:before{content:"\f122"}.uk-icon-star-half-empty:before,.uk-icon-star-half-full:before,.uk-icon-star-half-o:before{content:"\f123"}.uk-icon-location-arrow:before{content:"\f124"}.uk-icon-crop:before{content:"\f125"}.uk-icon-code-fork:before{content:"\f126"}.uk-icon-chain-broken:before,.uk-icon-unlink:before{content:"\f127"}.uk-icon-question:before{content:"\f128"}.uk-icon-info:before{content:"\f129"}.uk-icon-exclamation:before{content:"\f12a"}.uk-icon-superscript:before{content:"\f12b"}.uk-icon-subscript:before{content:"\f12c"}.uk-icon-eraser:before{content:"\f12d"}.uk-icon-puzzle-piece:before{content:"\f12e"}.uk-icon-microphone:before{content:"\f130"}.uk-icon-microphone-slash:before{content:"\f131"}.uk-icon-shield:before{content:"\f132"}.uk-icon-calendar-o:before{content:"\f133"}.uk-icon-fire-extinguisher:before{content:"\f134"}.uk-icon-rocket:before{content:"\f135"}.uk-icon-maxcdn:before{content:"\f136"}.uk-icon-chevron-circle-left:before{content:"\f137"}.uk-icon-chevron-circle-right:before{content:"\f138"}.uk-icon-chevron-circle-up:before{content:"\f139"}.uk-icon-chevron-circle-down:before{content:"\f13a"}.uk-icon-html5:before{content:"\f13b"}.uk-icon-css3:before{content:"\f13c"}.uk-icon-anchor:before{content:"\f13d"}.uk-icon-unlock-alt:before{content:"\f13e"}.uk-icon-bullseye:before{content:"\f140"}.uk-icon-ellipsis-h:before{content:"\f141"}.uk-icon-ellipsis-v:before{content:"\f142"}.uk-icon-rss-square:before{content:"\f143"}.uk-icon-play-circle:before{content:"\f144"}.uk-icon-ticket:before{content:"\f145"}.uk-icon-minus-square:before{content:"\f146"}.uk-icon-minus-square-o:before{content:"\f147"}.uk-icon-level-up:before{content:"\f148"}.uk-icon-level-down:before{content:"\f149"}.uk-icon-check-square:before{content:"\f14a"}.uk-icon-pencil-square:before{content:"\f14b"}.uk-icon-external-link-square:before{content:"\f14c"}.uk-icon-share-square:before{content:"\f14d"}.uk-icon-compass:before{content:"\f14e"}.uk-icon-caret-square-o-down:before,.uk-icon-toggle-down:before{content:"\f150"}.uk-icon-caret-square-o-up:before,.uk-icon-toggle-up:before{content:"\f151"}.uk-icon-caret-square-o-right:before,.uk-icon-toggle-right:before{content:"\f152"}.uk-icon-eur:before,.uk-icon-euro:before{content:"\f153"}.uk-icon-gbp:before{content:"\f154"}.uk-icon-dollar:before,.uk-icon-usd:before{content:"\f155"}.uk-icon-inr:before,.uk-icon-rupee:before{content:"\f156"}.uk-icon-cny:before,.uk-icon-jpy:before,.uk-icon-rmb:before,.uk-icon-yen:before{content:"\f157"}.uk-icon-rouble:before,.uk-icon-rub:before,.uk-icon-ruble:before{content:"\f158"}.uk-icon-krw:before,.uk-icon-won:before{content:"\f159"}.uk-icon-bitcoin:before,.uk-icon-btc:before{content:"\f15a"}.uk-icon-file:before{content:"\f15b"}.uk-icon-file-text:before{content:"\f15c"}.uk-icon-sort-alpha-asc:before{content:"\f15d"}.uk-icon-sort-alpha-desc:before{content:"\f15e"}.uk-icon-sort-amount-asc:before{content:"\f160"}.uk-icon-sort-amount-desc:before{content:"\f161"}.uk-icon-sort-numeric-asc:before{content:"\f162"}.uk-icon-sort-numeric-desc:before{content:"\f163"}.uk-icon-thumbs-up:before{content:"\f164"}.uk-icon-thumbs-down:before{content:"\f165"}.uk-icon-youtube-square:before{content:"\f166"}.uk-icon-youtube:before{content:"\f167"}.uk-icon-xing:before{content:"\f168"}.uk-icon-xing-square:before{content:"\f169"}.uk-icon-youtube-play:before{content:"\f16a"}.uk-icon-dropbox:before{content:"\f16b"}.uk-icon-stack-overflow:before{content:"\f16c"}.uk-icon-instagram:before{content:"\f16d"}.uk-icon-flickr:before{content:"\f16e"}.uk-icon-adn:before{content:"\f170"}.uk-icon-bitbucket:before{content:"\f171"}.uk-icon-bitbucket-square:before{content:"\f172"}.uk-icon-tumblr:before{content:"\f173"}.uk-icon-tumblr-square:before{content:"\f174"}.uk-icon-long-arrow-down:before{content:"\f175"}.uk-icon-long-arrow-up:before{content:"\f176"}.uk-icon-long-arrow-left:before{content:"\f177"}.uk-icon-long-arrow-right:before{content:"\f178"}.uk-icon-apple:before{content:"\f179"}.uk-icon-windows:before{content:"\f17a"}.uk-icon-android:before{content:"\f17b"}.uk-icon-linux:before{content:"\f17c"}.uk-icon-dribbble:before{content:"\f17d"}.uk-icon-skype:before{content:"\f17e"}.uk-icon-foursquare:before{content:"\f180"}.uk-icon-trello:before{content:"\f181"}.uk-icon-female:before{content:"\f182"}.uk-icon-male:before{content:"\f183"}.uk-icon-gittip:before,.uk-icon-gratipay:before{content:"\f184"}.uk-icon-sun-o:before{content:"\f185"}.uk-icon-moon-o:before{content:"\f186"}.uk-icon-archive:before{content:"\f187"}.uk-icon-bug:before{content:"\f188"}.uk-icon-vk:before{content:"\f189"}.uk-icon-weibo:before{content:"\f18a"}.uk-icon-renren:before{content:"\f18b"}.uk-icon-pagelines:before{content:"\f18c"}.uk-icon-stack-exchange:before{content:"\f18d"}.uk-icon-arrow-circle-o-right:before{content:"\f18e"}.uk-icon-arrow-circle-o-left:before{content:"\f190"}.uk-icon-caret-square-o-left:before,.uk-icon-toggle-left:before{content:"\f191"}.uk-icon-dot-circle-o:before{content:"\f192"}.uk-icon-wheelchair:before{content:"\f193"}.uk-icon-vimeo-square:before{content:"\f194"}.uk-icon-try:before,.uk-icon-turkish-lira:before{content:"\f195"}.uk-icon-plus-square-o:before{content:"\f196"}.uk-icon-space-shuttle:before{content:"\f197"}.uk-icon-slack:before{content:"\f198"}.uk-icon-envelope-square:before{content:"\f199"}.uk-icon-wordpress:before{content:"\f19a"}.uk-icon-openid:before{content:"\f19b"}.uk-icon-bank:before,.uk-icon-institution:before,.uk-icon-university:before{content:"\f19c"}.uk-icon-graduation-cap:before,.uk-icon-mortar-board:before{content:"\f19d"}.uk-icon-yahoo:before{content:"\f19e"}.uk-icon-google:before{content:"\f1a0"}.uk-icon-reddit:before{content:"\f1a1"}.uk-icon-reddit-square:before{content:"\f1a2"}.uk-icon-stumbleupon-circle:before{content:"\f1a3"}.uk-icon-stumbleupon:before{content:"\f1a4"}.uk-icon-delicious:before{content:"\f1a5"}.uk-icon-digg:before{content:"\f1a6"}.uk-icon-pied-piper:before{content:"\f1a7"}.uk-icon-pied-piper-alt:before{content:"\f1a8"}.uk-icon-drupal:before{content:"\f1a9"}.uk-icon-joomla:before{content:"\f1aa"}.uk-icon-language:before{content:"\f1ab"}.uk-icon-fax:before{content:"\f1ac"}.uk-icon-building:before{content:"\f1ad"}.uk-icon-child:before{content:"\f1ae"}.uk-icon-paw:before{content:"\f1b0"}.uk-icon-spoon:before{content:"\f1b1"}.uk-icon-cube:before{content:"\f1b2"}.uk-icon-cubes:before{content:"\f1b3"}.uk-icon-behance:before{content:"\f1b4"}.uk-icon-behance-square:before{content:"\f1b5"}.uk-icon-steam:before{content:"\f1b6"}.uk-icon-steam-square:before{content:"\f1b7"}.uk-icon-recycle:before{content:"\f1b8"}.uk-icon-automobile:before,.uk-icon-car:before{content:"\f1b9"}.uk-icon-cab:before,.uk-icon-taxi:before{content:"\f1ba"}.uk-icon-tree:before{content:"\f1bb"}.uk-icon-spotify:before{content:"\f1bc"}.uk-icon-deviantart:before{content:"\f1bd"}.uk-icon-soundcloud:before{content:"\f1be"}.uk-icon-database:before{content:"\f1c0"}.uk-icon-file-pdf-o:before{content:"\f1c1"}.uk-icon-file-word-o:before{content:"\f1c2"}.uk-icon-file-excel-o:before{content:"\f1c3"}.uk-icon-file-powerpoint-o:before{content:"\f1c4"}.uk-icon-file-image-o:before,.uk-icon-file-photo-o:before,.uk-icon-file-picture-o:before{content:"\f1c5"}.uk-icon-file-archive-o:before,.uk-icon-file-zip-o:before{content:"\f1c6"}.uk-icon-file-audio-o:before,.uk-icon-file-sound-o:before{content:"\f1c7"}.uk-icon-file-movie-o:before,.uk-icon-file-video-o:before{content:"\f1c8"}.uk-icon-file-code-o:before{content:"\f1c9"}.uk-icon-vine:before{content:"\f1ca"}.uk-icon-codepen:before{content:"\f1cb"}.uk-icon-jsfiddle:before{content:"\f1cc"}.uk-icon-life-bouy:before,.uk-icon-life-buoy:before,.uk-icon-life-ring:before,.uk-icon-life-saver:before,.uk-icon-support:before{content:"\f1cd"}.uk-icon-circle-o-notch:before{content:"\f1ce"}.uk-icon-ra:before,.uk-icon-rebel:before{content:"\f1d0"}.uk-icon-empire:before,.uk-icon-ge:before{content:"\f1d1"}.uk-icon-git-square:before{content:"\f1d2"}.uk-icon-git:before{content:"\f1d3"}.uk-icon-hacker-news:before{content:"\f1d4"}.uk-icon-tencent-weibo:before{content:"\f1d5"}.uk-icon-qq:before{content:"\f1d6"}.uk-icon-wechat:before,.uk-icon-weixin:before{content:"\f1d7"}.uk-icon-paper-plane:before,.uk-icon-send:before{content:"\f1d8"}.uk-icon-paper-plane-o:before,.uk-icon-send-o:before{content:"\f1d9"}.uk-icon-history:before{content:"\f1da"}.uk-icon-circle-thin:before,.uk-icon-genderless:before{content:"\f1db"}.uk-icon-header:before{content:"\f1dc"}.uk-icon-paragraph:before{content:"\f1dd"}.uk-icon-sliders:before{content:"\f1de"}.uk-icon-share-alt:before{content:"\f1e0"}.uk-icon-share-alt-square:before{content:"\f1e1"}.uk-icon-bomb:before{content:"\f1e2"}.uk-icon-futbol-o:before,.uk-icon-soccer-ball-o:before{content:"\f1e3"}.uk-icon-tty:before{content:"\f1e4"}.uk-icon-binoculars:before{content:"\f1e5"}.uk-icon-plug:before{content:"\f1e6"}.uk-icon-slideshare:before{content:"\f1e7"}.uk-icon-twitch:before{content:"\f1e8"}.uk-icon-yelp:before{content:"\f1e9"}.uk-icon-newspaper-o:before{content:"\f1ea"}.uk-icon-wifi:before{content:"\f1eb"}.uk-icon-calculator:before{content:"\f1ec"}.uk-icon-paypal:before{content:"\f1ed"}.uk-icon-google-wallet:before{content:"\f1ee"}.uk-icon-cc-visa:before{content:"\f1f0"}.uk-icon-cc-mastercard:before{content:"\f1f1"}.uk-icon-cc-discover:before{content:"\f1f2"}.uk-icon-cc-amex:before{content:"\f1f3"}.uk-icon-cc-paypal:before{content:"\f1f4"}.uk-icon-cc-stripe:before{content:"\f1f5"}.uk-icon-bell-slash:before{content:"\f1f6"}.uk-icon-bell-slash-o:before{content:"\f1f7"}.uk-icon-trash:before{content:"\f1f8"}.uk-icon-copyright:before{content:"\f1f9"}.uk-icon-at:before{content:"\f1fa"}.uk-icon-eyedropper:before{content:"\f1fb"}.uk-icon-paint-brush:before{content:"\f1fc"}.uk-icon-birthday-cake:before{content:"\f1fd"}.uk-icon-area-chart:before{content:"\f1fe"}.uk-icon-pie-chart:before{content:"\f200"}.uk-icon-line-chart:before{content:"\f201"}.uk-icon-lastfm:before{content:"\f202"}.uk-icon-lastfm-square:before{content:"\f203"}.uk-icon-toggle-off:before{content:"\f204"}.uk-icon-toggle-on:before{content:"\f205"}.uk-icon-bicycle:before{content:"\f206"}.uk-icon-bus:before{content:"\f207"}.uk-icon-ioxhost:before{content:"\f208"}.uk-icon-angellist:before{content:"\f209"}.uk-icon-cc:before{content:"\f20a"}.uk-icon-ils:before,.uk-icon-shekel:before,.uk-icon-sheqel:before{content:"\f20b"}.uk-icon-meanpath:before{content:"\f20c"}.uk-icon-buysellads:before{content:"\f20d"}.uk-icon-connectdevelop:before{content:"\f20e"}.uk-icon-dashcube:before{content:"\f210"}.uk-icon-forumbee:before{content:"\f211"}.uk-icon-leanpub:before{content:"\f212"}.uk-icon-sellsy:before{content:"\f213"}.uk-icon-shirtsinbulk:before{content:"\f214"}.uk-icon-simplybuilt:before{content:"\f215"}.uk-icon-skyatlas:before{content:"\f216"}.uk-icon-cart-plus:before{content:"\f217"}.uk-icon-cart-arrow-down:before{content:"\f218"}.uk-icon-diamond:before{content:"\f219"}.uk-icon-ship:before{content:"\f21a"}.uk-icon-user-secret:before{content:"\f21b"}.uk-icon-motorcycle:before{content:"\f21c"}.uk-icon-street-view:before{content:"\f21d"}.uk-icon-heartbeat:before{content:"\f21e"}.uk-icon-venus:before{content:"\f221"}.uk-icon-mars:before{content:"\f222"}.uk-icon-mercury:before{content:"\f223"}.uk-icon-transgender:before{content:"\f224"}.uk-icon-transgender-alt:before{content:"\f225"}.uk-icon-venus-double:before{content:"\f226"}.uk-icon-mars-double:before{content:"\f227"}.uk-icon-venus-mars:before{content:"\f228"}.uk-icon-mars-stroke:before{content:"\f229"}.uk-icon-mars-stroke-v:before{content:"\f22a"}.uk-icon-mars-stroke-h:before{content:"\f22b"}.uk-icon-neuter:before{content:"\f22c"}.uk-icon-facebook-official:before{content:"\f230"}.uk-icon-pinterest-p:before{content:"\f231"}.uk-icon-whatsapp:before{content:"\f232"}.uk-icon-server:before{content:"\f233"}.uk-icon-user-plus:before{content:"\f234"}.uk-icon-user-times:before{content:"\f235"}.uk-icon-bed:before,.uk-icon-hotel:before{content:"\f236"}.uk-icon-viacoin:before{content:"\f237"}.uk-icon-train:before{content:"\f238"}.uk-icon-subway:before{content:"\f239"}.uk-icon-medium-logo:before{content:"\f23a"}.uk-icon-500px:before{content:"\f26e"}.uk-icon-amazon:before{content:"\f270"}.uk-icon-balance-scale:before{content:"\f24e"}.uk-icon-battery-0:before,.uk-icon-battery-empty:before{content:"\f244"}.uk-icon-battery-1:before,.uk-icon-battery-quarter:before{content:"\f243"}.uk-icon-battery-2:before,.uk-icon-battery-half:before{content:"\f242"}.uk-icon-battery-3:before,.uk-icon-battery-three-quarters:before{content:"\f241"}.uk-icon-battery-4:before,.uk-icon-battery-full:before{content:"\f240"}.uk-icon-black-tie:before{content:"\f27e"}.uk-icon-calendar-check-o:before{content:"\f274"}.uk-icon-calendar-minus-o:before{content:"\f272"}.uk-icon-calendar-plus-o:before{content:"\f271"}.uk-icon-calendar-times-o:before{content:"\f273"}.uk-icon-cc-diners-club:before{content:"\f24c"}.uk-icon-cc-jcb:before{content:"\f24b"}.uk-icon-chrome:before{content:"\f268"}.uk-icon-clone:before{content:"\f24d"}.uk-icon-commenting:before{content:"\f27a"}.uk-icon-commenting-o:before{content:"\f27b"}.uk-icon-contao:before{content:"\f26d"}.uk-icon-creative-commons:before{content:"\f25e"}.uk-icon-expeditedssl:before{content:"\f23e"}.uk-icon-firefox:before{content:"\f269"}.uk-icon-fonticons:before{content:"\f280"}.uk-icon-get-pocket:before{content:"\f265"}.uk-icon-gg:before{content:"\f260"}.uk-icon-gg-circle:before{content:"\f261"}.uk-icon-hand-lizard-o:before{content:"\f258"}.uk-icon-hand-paper-o:before,.uk-icon-hand-stop-o:before{content:"\f256"}.uk-icon-hand-peace-o:before{content:"\f25b"}.uk-icon-hand-pointer-o:before{content:"\f25a"}.uk-icon-hand-grab-o:before,.uk-icon-hand-rock-o:before{content:"\f255"}.uk-icon-hand-scissors-o:before{content:"\f257"}.uk-icon-hand-spock-o:before{content:"\f259"}.uk-icon-hourglass:before{content:"\f254"}.uk-icon-hourglass-o:before{content:"\f250"}.uk-icon-hourglass-1:before,.uk-icon-hourglass-start:before{content:"\f251"}.uk-icon-hourglass-2:before,.uk-icon-hourglass-half:before{content:"\f252"}.uk-icon-hourglass-3:before,.uk-icon-hourglass-end:before{content:"\f253"}.uk-icon-houzz:before{content:"\f27c"}.uk-icon-i-cursor:before{content:"\f246"}.uk-icon-industry:before{content:"\f275"}.uk-icon-internet-explorer:before{content:"\f26b"}.uk-icon-map:before{content:"\f279"}.uk-icon-map-o:before{content:"\f278"}.uk-icon-map-pin:before{content:"\f276"}.uk-icon-map-signs:before{content:"\f277"}.uk-icon-mouse-pointer:before{content:"\f245"}.uk-icon-object-group:before{content:"\f247"}.uk-icon-object-ungroup:before{content:"\f248"}.uk-icon-odnoklassniki:before{content:"\f263"}.uk-icon-odnoklassniki-square:before{content:"\f264"}.uk-icon-opencart:before{content:"\f23d"}.uk-icon-opera:before{content:"\f26a"}.uk-icon-optin-monster:before{content:"\f23c"}.uk-icon-registered:before{content:"\f25d"}.uk-icon-safari:before{content:"\f267"}.uk-icon-sticky-note:before{content:"\f249"}.uk-icon-sticky-note-o:before{content:"\f24a"}.uk-icon-television:before,.uk-icon-tv:before{content:"\f26c"}.uk-icon-trademark:before{content:"\f25c"}.uk-icon-tripadvisor:before{content:"\f262"}.uk-icon-vimeo:before{content:"\f27d"}.uk-icon-wikipedia-w:before{content:"\f266"}.uk-icon-y-combinator:before,.uk-icon-yc:before{content:"\f23b"}.uk-icon-y-combinator-square:before,.uk-icon-yc-square:before{content:"\f1d4"}.uk-icon-bluetooth:before{content:"\f293"}.uk-icon-bluetooth-b:before{content:"\f294"}.uk-icon-codiepie:before{content:"\f284"}.uk-icon-credit-card-alt:before{content:"\f283"}.uk-icon-edge:before{content:"\f282"}.uk-icon-fort-awesome:before{content:"\f286"}.uk-icon-hashtag:before{content:"\f292"}.uk-icon-mixcloud:before{content:"\f289"}.uk-icon-modx:before{content:"\f285"}.uk-icon-pause-circle:before{content:"\f28b"}.uk-icon-pause-circle-o:before{content:"\f28c"}.uk-icon-percent:before{content:"\f295"}.uk-icon-product-hunt:before{content:"\f288"}.uk-icon-reddit-alien:before{content:"\f281"}.uk-icon-scribd:before{content:"\f28a"}.uk-icon-shopping-bag:before{content:"\f290"}.uk-icon-shopping-basket:before{content:"\f291"}.uk-icon-stop-circle:before{content:"\f28d"}.uk-icon-stop-circle-o:before{content:"\f28e"}.uk-icon-usb:before{content:"\f287"}.uk-icon-american-sign-language-interpreting:before,.uk-icon-asl-interpreting:before{content:"\f2a3"}.uk-icon-assistive-listening-systems:before{content:"\f2a2"}.uk-icon-audio-description:before{content:"\f29e"}.uk-icon-blind:before{content:"\f29d"}.uk-icon-braille:before{content:"\f2a1"}.uk-icon-deaf:before,.uk-icon-deafness:before{content:"\f2a4"}.uk-icon-envira:before{content:"\f299"}.uk-icon-fa:before,.uk-icon-font-awesome:before{content:"\f2b4"}.uk-icon-first-order:before{content:"\f2b0"}.uk-icon-gitlab:before{content:"\f296"}.uk-icon-glide:before{content:"\f2a5"}.uk-icon-glide-g:before{content:"\f2a6"}.uk-icon-hard-of-hearing:before{content:"\f2a4"}.uk-icon-low-vision:before{content:"\f2a8"}.uk-icon-question-circle-o:before{content:"\f29c"}.uk-icon-sign-language:before,.uk-icon-signing:before{content:"\f2a7"}.uk-icon-snapchat:before{content:"\f2ab"}.uk-icon-snapchat-ghost:before{content:"\f2ac"}.uk-icon-snapchat-square:before{content:"\f2ad"}.uk-icon-themeisle:before{content:"\f2b2"}.uk-icon-universal-access:before{content:"\f29a"}.uk-icon-viadeo:before{content:"\f2a9"}.uk-icon-viadeo-square:before{content:"\f2aa"}.uk-icon-volume-control-phone:before{content:"\f2a0"}.uk-icon-wheelchair-alt:before{content:"\f29b"}.uk-icon-wpbeginner:before{content:"\f297"}.uk-icon-wpforms:before{content:"\f298"}.uk-icon-yoast:before{content:"\f2b1"}.uk-icon-adress-book:before{content:"\f2b9"}.uk-icon-adress-book-o:before{content:"\f2ba"}.uk-icon-adress-card:before{content:"\f2bb"}.uk-icon-adress-card-o:before{content:"\f2bc"}.uk-icon-bandcamp:before{content:"\f2d5"}.uk-icon-bath:before{content:"\f2cd"}.uk-icon-bathub:before{content:"\f2cd"}.uk-icon-drivers-license:before{content:"\f2c2"}.uk-icon-drivers-license-o:before{content:"\f2c3"}.uk-icon-eercast:before{content:"\f2da"}.uk-icon-envelope-open:before{content:"\f2b6"}.uk-icon-envelope-open-o:before{content:"\f2b7"}.uk-icon-etsy:before{content:"\f2d7"}.uk-icon-free-code-camp:before{content:"\f2c5"}.uk-icon-grav:before{content:"\f2d6"}.uk-icon-handshake-o:before{content:"\f2b5"}.uk-icon-id-badge:before{content:"\f2c1"}.uk-icon-id-card:before{content:"\f2c2"}.uk-icon-id-card-o:before{content:"\f2c3"}.uk-icon-imdb:before{content:"\f2d8"}.uk-icon-linode:before{content:"\f2b8"}.uk-icon-meetup:before{content:"\f2e0"}.uk-icon-microchip:before{content:"\f2db"}.uk-icon-podcast:before{content:"\f2ce"}.uk-icon-quora:before{content:"\f2c4"}.uk-icon-ravelry:before{content:"\f2d9"}.uk-icon-s15:before{content:"\f2cd"}.uk-icon-shower:before{content:"\f2cc"}.uk-icon-snowflake-o:before{content:"\f2dc"}.uk-icon-superpowers:before{content:"\f2dd"}.uk-icon-telegram:before{content:"\f2c6"}.uk-icon-thermometer:before{content:"\f2c7"}.uk-icon-thermometer-0:before{content:"\f2cb"}.uk-icon-thermometer-1:before{content:"\f2ca"}.uk-icon-thermometer-2:before{content:"\f2c9"}.uk-icon-thermometer-3:before{content:"\f2c8"}.uk-icon-thermometer-4:before{content:"\f2c7"}.uk-icon-thermometer-empty:before{content:"\f2cb"}.uk-icon-thermometer-full:before{content:"\f2c7"}.uk-icon-thermometer-half:before{content:"\f2c9"}.uk-icon-thermometer-quarter:before{content:"\f2ca"}.uk-icon-thermometer-three-quarters:before{content:"\f2c8"}.uk-icon-times-rectangle:before{content:"\f2d3"}.uk-icon-times-rectangle-o:before{content:"\f2d4"}.uk-icon-user-circle:before{content:"\f2bd"}.uk-icon-user-circle-o:before{content:"\f2be"}.uk-icon-user-o:before{content:"\f2c0"}.uk-icon-vcard:before{content:"\f2bb"}.uk-icon-vcard-o:before{content:"\f2bc"}.uk-icon-widow-close:before{content:"\f2d3"}.uk-icon-widow-close-o:before{content:"\f2d4"}.uk-icon-window-maximize:before{content:"\f2d0"}.uk-icon-window-minimize:before{content:"\f2d1"}.uk-icon-window-restore:before{content:"\f2d2"}.uk-icon-wpexplorer:before{content:"\f2de"}.uk-close::-moz-focus-inner{border:0;padding:0}.uk-close{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background:0 0;display:inline-block;box-sizing:content-box;width:20px;line-height:20px;text-align:center;vertical-align:middle;opacity:.3}.uk-close:after{display:block;content:"\f00d";font-family:FontAwesome}.uk-close:focus,.uk-close:hover{opacity:.5;outline:0;color:inherit;text-decoration:none;cursor:pointer}.uk-close-alt{padding:2px;border-radius:50%;background:#eee;opacity:1}.uk-close-alt:focus,.uk-close-alt:hover{opacity:1}.uk-close-alt:after{opacity:.5}.uk-close-alt:focus:after,.uk-close-alt:hover:after{opacity:.8}.uk-badge{display:inline-block;padding:0 5px;background:#00a8e6;font-size:10px;font-weight:700;line-height:14px;color:#fff;text-align:center;vertical-align:middle;text-transform:none}a.uk-badge:hover{color:#fff}.uk-badge-notification{box-sizing:border-box;min-width:18px;border-radius:500px;font-size:12px;line-height:18px}.uk-badge-success{background-color:#8cc14c}.uk-badge-warning{background-color:#faa732}.uk-badge-danger{background-color:#da314b}.uk-alert{margin-bottom:15px;padding:10px;background:#ebf7fd;color:#2d7091}*+.uk-alert{margin-top:15px}.uk-alert>:last-child{margin-bottom:0}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert>.uk-close:first-child{float:right}.uk-alert>.uk-close:first-child+*{margin-top:0}.uk-alert-success{background:#f2fae3;color:#659f13}.uk-alert-warning{background:#fffceb;color:#e28327}.uk-alert-danger{background:#fff1f0;color:#d85030}.uk-alert-large{padding:20px}.uk-alert-large>.uk-close:first-child{margin:-10px -10px 0 0}.uk-thumbnail{display:inline-block;max-width:100%;box-sizing:border-box;margin:0;padding:4px;border:1px solid #ddd;background:#fff}a.uk-thumbnail:focus,a.uk-thumbnail:hover{border-color:#aaa;background-color:#fff;text-decoration:none;outline:0}.uk-thumbnail-caption{padding-top:4px;text-align:center;color:#444}.uk-thumbnail-mini{width:150px}.uk-thumbnail-small{width:200px}.uk-thumbnail-medium{width:300px}.uk-thumbnail-large{width:400px}.uk-thumbnail-expand,.uk-thumbnail-expand>img{width:100%}.uk-overlay{display:inline-block;position:relative;max-width:100%;vertical-align:middle;overflow:hidden;-webkit-transform:translateZ(0);margin:0}.uk-overlay.uk-border-circle{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.uk-overlay>:first-child{margin-bottom:0}.uk-overlay-panel{position:absolute;top:0;bottom:0;left:0;right:0;padding:20px;color:#fff}.uk-overlay-panel.uk-flex>*>:last-child,.uk-overlay-panel>:last-child{margin-bottom:0}.uk-overlay-panel h1,.uk-overlay-panel h2,.uk-overlay-panel h3,.uk-overlay-panel h4,.uk-overlay-panel h5,.uk-overlay-panel h6{color:inherit}.uk-overlay-panel a:not([class]){color:inherit;text-decoration:underline}.uk-overlay-panel a[class*=uk-icon-]:not(.uk-icon-button){color:inherit}.uk-overlay-hover:not(:hover):not(.uk-hover) .uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-active :not(.uk-active)>.uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-background{background:rgba(0,0,0,.5)}.uk-overlay-image{padding:0}.uk-overlay-top{bottom:auto}.uk-overlay-bottom{top:auto}.uk-overlay-left{right:auto}.uk-overlay-right{left:auto}.uk-overlay-icon:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-blur,.uk-overlay-fade,.uk-overlay-grayscale,.uk-overlay-scale,.uk-overlay-spin,[class*=uk-overlay-slide]{transition-duration:.3s;transition-timing-function:ease-out;transition-property:opacity,transform,filter}.uk-overlay-active .uk-overlay-fade,.uk-overlay-active .uk-overlay-scale,.uk-overlay-active .uk-overlay-spin,.uk-overlay-active [class*=uk-overlay-slide]{transition-duration:.8s}.uk-overlay-fade{opacity:.7}.uk-overlay-active .uk-active>.uk-overlay-fade,.uk-overlay-hover.uk-hover .uk-overlay-fade,.uk-overlay-hover:hover .uk-overlay-fade{opacity:1}.uk-overlay-scale{-webkit-transform:scale(1);transform:scale(1)}.uk-overlay-active .uk-active>.uk-overlay-scale,.uk-overlay-hover.uk-hover .uk-overlay-scale,.uk-overlay-hover:hover .uk-overlay-scale{-webkit-transform:scale(1.1);transform:scale(1.1)}.uk-overlay-spin{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}.uk-overlay-active .uk-active>.uk-overlay-spin,.uk-overlay-hover.uk-hover .uk-overlay-spin,.uk-overlay-hover:hover .uk-overlay-spin{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}.uk-overlay-grayscale{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.uk-overlay-active .uk-active>.uk-overlay-grayscale,.uk-overlay-hover.uk-hover .uk-overlay-grayscale,.uk-overlay-hover:hover .uk-overlay-grayscale{-webkit-filter:grayscale(0);filter:grayscale(0)}[class*=uk-overlay-slide]{opacity:0}.uk-overlay-slide-top{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.uk-overlay-slide-bottom{-webkit-transform:translateY(100%);transform:translateY(100%)}.uk-overlay-slide-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.uk-overlay-slide-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-overlay-active .uk-active>[class*=uk-overlay-slide],.uk-overlay-hover.uk-hover [class*=uk-overlay-slide],.uk-overlay-hover:hover [class*=uk-overlay-slide]{opacity:1;-webkit-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.uk-overlay-area{position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.3);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-area,.uk-overlay-toggle:hover .uk-overlay-area,.uk-overlay.uk-hover .uk-overlay-area,.uk-overlay:hover .uk-overlay-area{opacity:1}.uk-overlay-area:empty:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-area:not(:empty){font-size:0}.uk-overlay-area:not(:empty):before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-overlay-area-content{display:inline-block;box-sizing:border-box;width:100%;vertical-align:middle;font-size:1rem;text-align:center;padding:0 15px;color:#fff}.uk-overlay-area-content>:last-child{margin-bottom:0}.uk-overlay-area-content a:not([class]),.uk-overlay-area-content a:not([class]):hover{color:inherit}.uk-overlay-caption{position:absolute;bottom:0;left:0;right:0;padding:15px;background:rgba(0,0,0,.5);color:#fff;opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-caption,.uk-overlay-toggle:hover .uk-overlay-caption,.uk-overlay.uk-hover .uk-overlay-caption,.uk-overlay:hover .uk-overlay-caption{opacity:1}[class*=uk-column-]{-webkit-column-gap:25px;-moz-column-gap:25px;column-gap:25px}.uk-column-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}@media (min-width:480px){.uk-column-small-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-small-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-small-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-small-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-small-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:768px){.uk-column-medium-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-medium-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-medium-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-medium-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-medium-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:960px){.uk-column-large-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-large-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-large-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-large-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-large-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}@media (min-width:1220px){.uk-column-xlarge-1-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.uk-column-xlarge-1-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}.uk-column-xlarge-1-4{-webkit-column-count:4;-moz-column-count:4;column-count:4}.uk-column-xlarge-1-5{-webkit-column-count:5;-moz-column-count:5;column-count:5}.uk-column-xlarge-1-6{-webkit-column-count:6;-moz-column-count:6;column-count:6}}[class*=uk-animation-]{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media screen{[data-uk-scrollspy*=uk-animation-]:not([data-uk-scrollspy*=target]){opacity:0}}.uk-animation-fade{-webkit-animation-name:uk-fade;animation-name:uk-fade;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-timing-function:linear!important;animation-timing-function:linear!important}.uk-animation-scale-up{-webkit-animation-name:uk-fade-scale-02;animation-name:uk-fade-scale-02}.uk-animation-scale-down{-webkit-animation-name:uk-fade-scale-18;animation-name:uk-fade-scale-18}.uk-animation-slide-top{-webkit-animation-name:uk-fade-top;animation-name:uk-fade-top}.uk-animation-slide-bottom{-webkit-animation-name:uk-fade-bottom;animation-name:uk-fade-bottom}.uk-animation-slide-left{-webkit-animation-name:uk-fade-left;animation-name:uk-fade-left}.uk-animation-slide-right{-webkit-animation-name:uk-fade-right;animation-name:uk-fade-right}.uk-animation-scale{-webkit-animation-name:uk-scale-12;animation-name:uk-scale-12}.uk-animation-shake{-webkit-animation-name:uk-shake;animation-name:uk-shake}.uk-animation-reverse{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}.uk-animation-15{-webkit-animation-duration:15s;animation-duration:15s}.uk-animation-top-left{-webkit-transform-origin:0 0;transform-origin:0 0}.uk-animation-top-center{-webkit-transform-origin:50% 0;transform-origin:50% 0}.uk-animation-top-right{-webkit-transform-origin:100% 0;transform-origin:100% 0}.uk-animation-middle-left{-webkit-transform-origin:0 50%;transform-origin:0 50%}.uk-animation-middle-right{-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.uk-animation-bottom-left{-webkit-transform-origin:0 100%;transform-origin:0 100%}.uk-animation-bottom-center{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.uk-animation-bottom-right{-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.uk-animation-hover:not(:hover),.uk-animation-hover:not(:hover) [class*=uk-animation-],.uk-touch .uk-animation-hover:not(.uk-hover),.uk-touch .uk-animation-hover:not(.uk-hover) [class*=uk-animation-]{-webkit-animation-name:none;animation-name:none}@-webkit-keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes uk-fade-top{0%{opacity:0;-webkit-transform:translateY(-100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom{0%{opacity:0;-webkit-transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left{0%{opacity:0;-webkit-transform:translateX(-100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right{0%{opacity:0;-webkit-transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-scale-02{0%{opacity:0;-webkit-transform:scale(.2)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-15{0%{opacity:0;-webkit-transform:scale(1.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-15{0%{opacity:0;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-18{0%{opacity:0;-webkit-transform:scale(1.8)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-slide-left{0%{-webkit-transform:translateX(-100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right{0%{-webkit-transform:translateX(100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-left-33{0%{-webkit-transform:translateX(33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left-33{0%{transform:translateX(33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right-33{0%{-webkit-transform:translateX(-33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right-33{0%{transform:translateX(-33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-scale-12{0%{-webkit-transform:scale(1.2)}100%{-webkit-transform:scale(1)}}@keyframes uk-scale-12{0%{transform:scale(1.2)}100%{transform:scale(1)}}@-webkit-keyframes uk-rotate{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes uk-rotate{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}@-webkit-keyframes uk-shake{0%,100%{-webkit-transform:translateX(0)}10%{-webkit-transform:translateX(-9px)}20%{-webkit-transform:translateX(8px)}30%{-webkit-transform:translateX(-7px)}40%{-webkit-transform:translateX(6px)}50%{-webkit-transform:translateX(-5px)}60%{-webkit-transform:translateX(4px)}70%{-webkit-transform:translateX(-3px)}80%{-webkit-transform:translateX(2px)}90%{-webkit-transform:translateX(-1px)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@-webkit-keyframes uk-slide-top-fixed{0%{opacity:0;-webkit-transform:translateY(-10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-top-fixed{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-slide-bottom-fixed{0%{opacity:0;-webkit-transform:translateY(10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-bottom-fixed{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}.uk-dropdown,.uk-dropdown-blank{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:200px}.uk-dropdown{padding:15px;background:#f5f5f5;color:#444;font-size:1rem;vertical-align:top}.uk-dropdown:focus{outline:0}.uk-open>.uk-dropdown,.uk-open>.uk-dropdown-blank{display:block;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-dropdown-top{margin-top:-5px}.uk-dropdown-bottom{margin-top:5px}.uk-dropdown-left{margin-left:-5px}.uk-dropdown-right{margin-left:5px}.uk-dropdown .uk-nav{margin:0 -15px}.uk-grid .uk-dropdown-grid+.uk-dropdown-grid{margin-top:15px}.uk-dropdown-grid>[class*=uk-width-]>.uk-panel+.uk-panel{margin-top:15px}@media (min-width:768px){.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid{margin-left:-15px;margin-right:-15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]{padding-left:15px;padding-right:15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){border-left:1px solid #ddd}.uk-dropdown-width-2:not(.uk-dropdown-stack){width:400px}.uk-dropdown-width-3:not(.uk-dropdown-stack){width:600px}.uk-dropdown-width-4:not(.uk-dropdown-stack){width:800px}.uk-dropdown-width-5:not(.uk-dropdown-stack){width:1000px}}@media (max-width:767px){.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}.uk-dropdown-small{min-width:150px;width:auto;padding:5px;white-space:nowrap}.uk-dropdown-small .uk-nav{margin:0 -5px}.uk-dropdown-navbar{margin-top:0;background:#f5f5f5;color:#444}.uk-open>.uk-dropdown-navbar{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-dropdown-scrollable{overflow-y:auto;max-height:200px}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;background:rgba(0,0,0,.6);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;touch-action:cross-slide-y pinch-zoom double-tap-zoom;-webkit-transform:translateZ(0);transform:translateZ(0)}.uk-modal.uk-open{opacity:1}.uk-modal-page,.uk-modal-page body{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:50px auto;padding:20px;width:600px;max-width:100%;max-width:calc(100% - 20px);background:#fff;opacity:0;-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-transition:opacity .3s linear,-webkit-transform .3s ease-out;transition:opacity .3s linear,transform .3s ease-out}@media (max-width:767px){.uk-modal-dialog{width:auto;margin:10px auto}}.uk-open .uk-modal-dialog{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.uk-modal-dialog>:not([class*=uk-modal-]):last-child{margin-bottom:0}.uk-modal-dialog>.uk-close:first-child{margin:-10px -10px 0 0;float:right}.uk-modal-dialog>.uk-close:first-child+:not([class*=uk-modal-]){margin-top:0}.uk-modal-dialog-lightbox{margin:15px auto;padding:0;max-width:95%;max-width:calc(100% - 30px);min-height:50px}.uk-modal-dialog-lightbox>.uk-close:first-child{position:absolute;top:-12px;right:-12px;margin:0;float:none}@media (max-width:767px){.uk-modal-dialog-lightbox>.uk-close:first-child{top:-7px;right:-7px}}.uk-modal-dialog-blank{margin:0;padding:0;width:100%;max-width:100%;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.uk-modal-dialog-blank>.uk-close:first-child{position:absolute;top:20px;right:20px;z-index:1;margin:0;float:none}@media (min-width:768px){.uk-modal-dialog-large{width:930px}}@media (min-width:1220px){.uk-modal-dialog-large{width:1130px}}.uk-modal-header{margin-bottom:15px}.uk-modal-footer{margin-top:15px}.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-caption{position:absolute;left:0;right:0;bottom:-20px;margin-bottom:-10px;color:#fff;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-modal-spinner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:25px;color:#ddd}.uk-modal-spinner:after{content:"\f110";display:block;font-family:FontAwesome;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-offcanvas{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;touch-action:none;background:rgba(0,0,0,.1)}.uk-offcanvas.uk-active{display:block}.uk-offcanvas-page{position:fixed;-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-left:0}.uk-offcanvas-bar{position:fixed;top:0;bottom:0;left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:1001;width:270px;max-width:100%;background:#333;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;-ms-scroll-chaining:none}.uk-offcanvas.uk-active .uk-offcanvas-bar.uk-offcanvas-bar-show{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas-bar-flip{left:auto;right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas-bar[mode=none]{-webkit-transition:none;transition:none}.uk-offcanvas-bar[mode=reveal]{-webkit-transform:translateX(0);transform:translateX(0);clip:rect(0,0,100vh,0);-webkit-transition:-webkit-transform .3s ease-in-out,clip .3s ease-in-out;transition:transform .3s ease-in-out,clip .3s ease-in-out}.uk-offcanvas-bar-flip[mode=reveal]{clip:none;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas-bar-flip[mode=reveal]>*{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out}.uk-offcanvas.uk-active .uk-offcanvas-bar-flip[mode=reveal].uk-offcanvas-bar-show>*{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas .uk-panel{margin:20px 15px;color:#777}.uk-offcanvas .uk-panel-title{color:#ccc}.uk-offcanvas .uk-panel a:not([class]){color:#ccc}.uk-offcanvas .uk-panel a:not([class]):hover{color:#fff}.uk-switcher{margin:0;padding:0;list-style:none;touch-action:cross-slide-y pinch-zoom double-tap-zoom}.uk-switcher>:not(.uk-active){display:none}.uk-text-small{font-size:11px;line-height:16px}.uk-text-large{font-size:18px;line-height:24px;font-weight:400}.uk-text-bold{font-weight:700}.uk-text-muted{color:#999!important}.uk-text-primary{color:#2d7091!important}.uk-text-success{color:#659f13!important}.uk-text-warning{color:#e28327!important}.uk-text-danger{color:#d85030!important}.uk-text-contrast{color:#fff!important}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}@media (max-width:959px){.uk-text-center-medium{text-align:center!important}.uk-text-left-medium{text-align:left!important}}@media (max-width:767px){.uk-text-center-small{text-align:center!important}.uk-text-left-small{text-align:left!important}}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-text-break{word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;-moz-hyphens:auto;hyphens:auto}.uk-text-capitalize{text-transform:capitalize!important}.uk-text-lowercase{text-transform:lowercase!important}.uk-text-uppercase{text-transform:uppercase!important}.uk-container{box-sizing:border-box;max-width:980px;padding:0 25px}@media (min-width:1220px){.uk-container{max-width:1200px;padding:0 35px}}.uk-container:after,.uk-container:before{content:"";display:table}.uk-container:after{clear:both}.uk-container-center{margin-left:auto;margin-right:auto}.uk-clearfix:before{content:"";display:table-cell}.uk-clearfix:after{content:"";display:table;clear:both}.uk-nbfc{overflow:hidden}.uk-nbfc-alt{display:table-cell;width:10000px}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}[class*=uk-align-]{display:block;margin-bottom:15px}.uk-align-left{margin-right:15px;float:left}.uk-align-right{margin-left:15px;float:right}@media (min-width:768px){.uk-align-medium-left{margin-right:15px;float:left}.uk-align-medium-right{margin-left:15px;float:right}}.uk-align-center{margin-left:auto;margin-right:auto}.uk-vertical-align{font-size:0}.uk-vertical-align:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-vertical-align-bottom,.uk-vertical-align-middle{display:inline-block;max-width:100%;font-size:1rem}.uk-vertical-align-middle{vertical-align:middle}.uk-vertical-align-bottom{vertical-align:bottom}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{height:100vh;min-height:600px}.uk-responsive-height,.uk-responsive-width{box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto}.uk-margin{margin-bottom:15px}*+.uk-margin{margin-top:15px}.uk-margin-top{margin-top:15px!important}.uk-margin-bottom{margin-bottom:15px!important}.uk-margin-left{margin-left:15px!important}.uk-margin-right{margin-right:15px!important}.uk-margin-large{margin-bottom:50px}*+.uk-margin-large{margin-top:50px}.uk-margin-large-top{margin-top:50px!important}.uk-margin-large-bottom{margin-bottom:50px!important}.uk-margin-large-left{margin-left:50px!important}.uk-margin-large-right{margin-right:50px!important}.uk-margin-small{margin-bottom:5px}*+.uk-margin-small{margin-top:5px}.uk-margin-small-top{margin-top:5px!important}.uk-margin-small-bottom{margin-bottom:5px!important}.uk-margin-small-left{margin-left:5px!important}.uk-margin-small-right{margin-right:5px!important}.uk-margin-remove{margin:0!important}.uk-margin-top-remove{margin-top:0!important}.uk-margin-bottom-remove{margin-bottom:0!important}.uk-padding-remove{padding:0!important}.uk-padding-top-remove{padding-top:0!important}.uk-padding-bottom-remove{padding-bottom:0!important}.uk-padding-vertical-remove{padding-top:0!important;padding-bottom:0!important}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-heading-large{font-size:36px;line-height:42px}@media (min-width:768px){.uk-heading-large{font-size:52px;line-height:64px}}.uk-link-muted,.uk-link-muted a{color:#444}.uk-link-muted a:hover,.uk-link-muted:hover{color:#444}.uk-link-reset,.uk-link-reset a,.uk-link-reset a:focus,.uk-link-reset a:hover,.uk-link-reset:focus,.uk-link-reset:hover{color:inherit;text-decoration:none}.uk-scrollable-text{height:300px;overflow-y:scroll;-webkit-overflow-scrolling:touch;resize:both}.uk-scrollable-box{box-sizing:border-box;height:170px;padding:10px;border:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-scrollable-box>:last-child{margin-bottom:0}.uk-overflow-hidden{overflow:hidden}.uk-overflow-container{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-container>:last-child{margin-bottom:0}.uk-position-absolute,[class*=uk-position-top],[class*=uk-position-bottom]{position:absolute!important}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative!important}.uk-position-z-index{z-index:1}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important;max-width:100%}@media (min-width:960px){.uk-visible-small{display:none!important}.uk-visible-medium{display:none!important}.uk-hidden-large{display:none!important}}@media (min-width:768px) and (max-width:959px){.uk-visible-small{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-medium{display:none!important}}@media (max-width:767px){.uk-visible-medium{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-small{display:none!important}}.uk-hidden{display:none!important;visibility:hidden!important}.uk-invisible{visibility:hidden!important}.uk-visible-hover:hover .uk-hidden,.uk-visible-hover:hover .uk-invisible{display:block!important;visibility:visible!important}.uk-visible-hover-inline:hover .uk-hidden,.uk-visible-hover-inline:hover .uk-invisible{display:inline-block!important;visibility:visible!important}.uk-notouch .uk-hidden-notouch,.uk-touch .uk-hidden-touch{display:none!important}.uk-flex{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-flex-inline{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex}.uk-flex-inline>*,.uk-flex>*{-ms-flex-negative:1}.uk-flex-top{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start}.uk-flex-middle{-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-flex-bottom{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end}.uk-flex-center{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-space-between{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-space-around{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}.uk-flex-row-reverse{-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.uk-flex-column{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-flex-column-reverse{-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.uk-flex-nowrap{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.uk-flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.uk-flex-wrap-top{-ms-flex-line-pack:start;-webkit-align-content:flex-start;align-content:flex-start}.uk-flex-wrap-middle{-ms-flex-line-pack:center;-webkit-align-content:center;align-content:center}.uk-flex-wrap-bottom{-ms-flex-line-pack:end;-webkit-align-content:flex-end;align-content:flex-end}.uk-flex-wrap-space-between{-ms-flex-line-pack:justify;-webkit-align-content:space-between;align-content:space-between}.uk-flex-wrap-space-around{-ms-flex-line-pack:distribute;-webkit-align-content:space-around;align-content:space-around}.uk-flex-order-first{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last{-ms-flex-order:99;-webkit-order:99;order:99}@media (min-width:480px){.uk-flex-order-first-small{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-small{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:768px){.uk-flex-order-first-medium{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-medium{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:960px){.uk-flex-order-first-large{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-large{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:1220px){.uk-flex-order-first-xlarge{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-xlarge{-ms-flex-order:99;-webkit-order:99;order:99}}.uk-flex-item-none{-ms-flex:none;-webkit-flex:none;flex:none}.uk-flex-item-auto{-ms-flex:auto;-webkit-flex:auto;flex:auto;-ms-flex-negative:1}.uk-flex-item-1{-ms-flex:1;-webkit-flex:1;flex:1}.uk-contrast{color:#fff}.uk-contrast .uk-link,.uk-contrast a:not([class]){color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-link:hover,.uk-contrast a:not([class]):hover{color:#fff;text-decoration:underline}.uk-contrast :not(pre)>code,.uk-contrast :not(pre)>kbd,.uk-contrast :not(pre)>samp{color:#fff}.uk-contrast em{color:#fff}.uk-contrast h1,.uk-contrast h2,.uk-contrast h3,.uk-contrast h4,.uk-contrast h5,.uk-contrast h6{color:#fff}.uk-contrast hr{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav li>a,.uk-contrast .uk-nav li>a:hover{text-decoration:none}.uk-contrast .uk-nav-side>li>a{color:#fff}.uk-contrast .uk-nav-side>li>a:focus,.uk-contrast .uk-nav-side>li>a:hover{background:rgba(255,255,255,.1);color:#fff}.uk-contrast .uk-nav-side>li.uk-active>a{background:#fff;color:#444}.uk-contrast .uk-nav-side .uk-nav-header{color:#fff}.uk-contrast .uk-nav-side .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav-side ul a{color:rgba(255,255,255,.7)}.uk-contrast .uk-nav-side ul a:hover{color:#fff}.uk-contrast .uk-subnav>*>a{color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-subnav>*>a:focus,.uk-contrast .uk-subnav>*>a:hover{color:#fff;text-decoration:none}.uk-contrast .uk-subnav>.uk-active>a{color:#fff}.uk-contrast .uk-subnav-line>:nth-child(n+2):before{border-left-color:rgba(255,255,255,.2)}.uk-contrast .uk-subnav-pill>*>a:focus,.uk-contrast .uk-subnav-pill>*>a:hover{background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-subnav-pill>.uk-active>a{background:#fff;color:#444}.uk-contrast .uk-tab{border-bottom-color:rgba(255,255,255,.2)}.uk-contrast .uk-tab>li>a{border-color:transparent;color:rgba(255,255,255,.7)}.uk-contrast .uk-tab>li.uk-open>a,.uk-contrast .uk-tab>li>a:focus,.uk-contrast .uk-tab>li>a:hover{border-color:rgba(255,255,255,.7);background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-tab>li.uk-active>a{border-color:rgba(255,255,255,.2);border-bottom-color:transparent;background:#fff;color:#444}.uk-contrast .uk-tab-center{border-bottom-color:rgba(255,255,255,.2)}.uk-contrast .uk-tab-grid:before{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-list-line>li:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-form input:not([type]),.uk-contrast .uk-form input[type=text],.uk-contrast .uk-form input[type=password],.uk-contrast .uk-form input[type=email],.uk-contrast .uk-form input[type=url],.uk-contrast .uk-form input[type=search],.uk-contrast .uk-form input[type=tel],.uk-contrast .uk-form input[type=number],.uk-contrast .uk-form input[type=datetime],.uk-contrast .uk-form input[type=datetime-local],.uk-contrast .uk-form input[type=date],.uk-contrast .uk-form input[type=month],.uk-contrast .uk-form input[type=time],.uk-contrast .uk-form input[type=week],.uk-contrast .uk-form input[type=color],.uk-contrast .uk-form select,.uk-contrast .uk-form textarea{border-color:rgba(255,255,255,.8);background:rgba(255,255,255,.8);color:#444;background-clip:padding-box}.uk-contrast .uk-form input:not([type]):focus,.uk-contrast .uk-form input[type=text]:focus,.uk-contrast .uk-form input[type=password]:focus,.uk-contrast .uk-form input[type=email]:focus,.uk-contrast .uk-form input[type=url]:focus,.uk-contrast .uk-form input[type=search]:focus,.uk-contrast .uk-form input[type=tel]:focus,.uk-contrast .uk-form input[type=number]:focus,.uk-contrast .uk-form input[type=datetime]:focus,.uk-contrast .uk-form input[type=datetime-local]:focus,.uk-contrast .uk-form input[type=date]:focus,.uk-contrast .uk-form input[type=month]:focus,.uk-contrast .uk-form input[type=time]:focus,.uk-contrast .uk-form input[type=week]:focus,.uk-contrast .uk-form input[type=color]:focus,.uk-contrast .uk-form select:focus,.uk-contrast .uk-form textarea:focus{border-color:#fff;background:#fff;color:#444}.uk-contrast .uk-form :-ms-input-placeholder{color:rgba(68,68,68,.7)!important}.uk-contrast .uk-form ::-moz-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-form ::-webkit-input-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-button{color:#444;background:#fff}.uk-contrast .uk-button:focus,.uk-contrast .uk-button:hover{background-color:rgba(255,255,255,.8);color:#444}.uk-contrast .uk-button.uk-active,.uk-contrast .uk-button:active{background-color:rgba(255,255,255,.7);color:#444}.uk-contrast .uk-button-primary{background-color:#00a8e6;color:#fff}.uk-contrast .uk-button-primary:focus,.uk-contrast .uk-button-primary:hover{background-color:#35b3ee;color:#fff}.uk-contrast .uk-button-primary.uk-active,.uk-contrast .uk-button-primary:active{background-color:#0091ca;color:#fff}.uk-contrast .uk-icon-hover{color:rgba(255,255,255,.7)}.uk-contrast .uk-icon-hover:hover{color:#fff}.uk-contrast .uk-icon-button{background:#fff;color:#444}.uk-contrast .uk-icon-button:focus,.uk-contrast .uk-icon-button:hover{background-color:rgba(255,255,255,.8);color:#444}.uk-contrast .uk-icon-button:active{background-color:rgba(255,255,255,.7);color:#444}.uk-contrast .uk-text-muted{color:rgba(255,255,255,.6)!important}.uk-contrast .uk-text-primary{color:#2d7091!important}@media print{*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/media/uikit-v2/fonts/FontAwesome.otf b/media/uikit-v2/fonts/FontAwesome.otf new file mode 100644 index 0000000..401ec0f Binary files /dev/null and b/media/uikit-v2/fonts/FontAwesome.otf differ diff --git a/media/uikit/fonts/fontawesome-webfont.ttf b/media/uikit-v2/fonts/fontawesome-webfont.ttf similarity index 50% rename from media/uikit/fonts/fontawesome-webfont.ttf rename to media/uikit-v2/fonts/fontawesome-webfont.ttf index ed9372f..35acda2 100644 Binary files a/media/uikit/fonts/fontawesome-webfont.ttf and b/media/uikit-v2/fonts/fontawesome-webfont.ttf differ diff --git a/media/uikit-v2/fonts/fontawesome-webfont.woff b/media/uikit-v2/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/media/uikit-v2/fonts/fontawesome-webfont.woff differ diff --git a/media/uikit-v2/fonts/fontawesome-webfont.woff2 b/media/uikit-v2/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/media/uikit-v2/fonts/fontawesome-webfont.woff2 differ diff --git a/media/uikit-v2/fonts/index.html b/media/uikit-v2/fonts/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/uikit-v2/fonts/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/uikit-v2/index.html b/media/uikit-v2/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/uikit-v2/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/uikit/js/components/accordion.js b/media/uikit-v2/js/components/accordion.js similarity index 75% rename from media/uikit/js/components/accordion.js rename to media/uikit-v2/js/components/accordion.js index d8a62c6..c64deba 100644 --- a/media/uikit/js/components/accordion.js +++ b/media/uikit-v2/js/components/accordion.js @@ -1,14 +1,14 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-accordion", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-accordion', ['uikit'], function(){ + return component || addon(UIkit2); }); } })(function(UI){ @@ -35,11 +35,11 @@ setTimeout(function(){ - UI.$("[data-uk-accordion]", context).each(function(){ + UI.$('[data-uk-accordion]', context).each(function(){ var ele = UI.$(this); - if(!ele.data("accordion")) { + if (!ele.data('accordion')) { UI.accordion(ele, UI.Utils.options(ele.attr('data-uk-accordion'))); } }); @@ -52,18 +52,20 @@ var $this = this; - this.element.on('click.uikit.accordion', this.options.toggle, function(e) { + this.element.on('click.uk.accordion', this.options.toggle, function(e) { e.preventDefault(); $this.toggleItem(UI.$(this).data('wrapper'), $this.options.animate, $this.options.collapse); }); - this.update(); + this.update(true); - if (this.options.showfirst) { - this.toggleItem(this.toggle.eq(0).data('wrapper'), false, false); - } + UI.domObserve(this.element, function(e) { + if ($this.element.children($this.options.containers).length) { + $this.update(); + } + }); }, toggleItem: function(wrapper, animated, collapse) { @@ -71,12 +73,14 @@ var $this = this; wrapper.data('toggle').toggleClass(this.options.clsactive); + wrapper.data('content').toggleClass(this.options.clsactive); var active = wrapper.data('toggle').hasClass(this.options.clsactive); if (collapse) { this.toggle.not(wrapper.data('toggle')).removeClass(this.options.clsactive); - this.content.not(wrapper.data('content')).parent().stop().css('overflow', 'hidden').animate({ height: 0 }, {easing: this.options.easing, duration: animated ? this.options.duration : 0}).attr('aria-expanded', 'false'); + this.content.not(wrapper.data('content')).removeClass(this.options.clsactive) + .parent().stop().css('overflow', 'hidden').animate({ height: 0 }, {easing: this.options.easing, duration: animated ? this.options.duration : 0}).attr('aria-expanded', 'false'); } wrapper.stop().css('overflow', 'hidden'); @@ -111,7 +115,7 @@ this.element.trigger('toggle.uk.accordion', [active, wrapper.data('toggle'), wrapper.data('content')]); }, - update: function() { + update: function(init) { var $this = this, $content, $wrapper, $toggle; @@ -140,6 +144,10 @@ }); this.element.trigger('update.uk.accordion', [this]); + + if (init && this.options.showfirst) { + this.toggleItem(this.toggle.eq(0).data('wrapper'), false, false); + } } }); @@ -155,9 +163,9 @@ } else { var tmp = { - position : $ele.css("position"), - visibility : $ele.css("visibility"), - display : $ele.css("display") + position : $ele.css('position'), + visibility : $ele.css('visibility'), + display : $ele.css('display') }; height = $ele.css({position: 'absolute', visibility: 'hidden', display: 'block'}).outerHeight(); diff --git a/media/uikit-v2/js/components/accordion.min.js b/media/uikit-v2/js/components/accordion.min.js new file mode 100644 index 0000000..79693ae --- /dev/null +++ b/media/uikit-v2/js/components/accordion.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var i;window.UIkit2&&(i=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-accordion",["uikit"],function(){return i||t(UIkit2)})}(function(t){"use strict";function i(i){var e=t.$(i),o="auto";if(e.is(":visible"))o=e.outerHeight();else{var a={position:e.css("position"),visibility:e.css("visibility"),display:e.css("display")};o=e.css({position:"absolute",visibility:"hidden",display:"block"}).outerHeight(),e.css(a)}return o}return t.component("accordion",{defaults:{showfirst:!0,collapse:!0,animate:!0,easing:"swing",duration:300,toggle:".uk-accordion-title",containers:".uk-accordion-content",clsactive:"uk-active"},boot:function(){t.ready(function(i){setTimeout(function(){t.$("[data-uk-accordion]",i).each(function(){var i=t.$(this);i.data("accordion")||t.accordion(i,t.Utils.options(i.attr("data-uk-accordion")))})},0)})},init:function(){var i=this;this.element.on("click.uk.accordion",this.options.toggle,function(e){e.preventDefault(),i.toggleItem(t.$(this).data("wrapper"),i.options.animate,i.options.collapse)}),this.update(!0),t.domObserve(this.element,function(){i.element.children(i.options.containers).length&&i.update()})},toggleItem:function(e,o,a){var n=this;e.data("toggle").toggleClass(this.options.clsactive),e.data("content").toggleClass(this.options.clsactive);var s=e.data("toggle").hasClass(this.options.clsactive);a&&(this.toggle.not(e.data("toggle")).removeClass(this.options.clsactive),this.content.not(e.data("content")).removeClass(this.options.clsactive).parent().stop().css("overflow","hidden").animate({height:0},{easing:this.options.easing,duration:o?this.options.duration:0}).attr("aria-expanded","false")),e.stop().css("overflow","hidden"),o?e.animate({height:s?i(e.data("content")):0},{easing:this.options.easing,duration:this.options.duration,complete:function(){s&&(e.css({overflow:"",height:"auto"}),t.Utils.checkDisplay(e.data("content"))),n.trigger("display.uk.check")}}):(e.height(s?"auto":0),s&&(e.css({overflow:""}),t.Utils.checkDisplay(e.data("content"))),this.trigger("display.uk.check")),e.attr("aria-expanded",s),this.element.trigger("toggle.uk.accordion",[s,e.data("toggle"),e.data("content")])},update:function(i){var e,o,a,n=this;this.toggle=this.find(this.options.toggle),this.content=this.find(this.options.containers),this.content.each(function(i){e=t.$(this),e.parent().data("wrapper")?o=e.parent():(o=t.$(this).wrap('
').parent(),o.attr("aria-expanded","false")),a=n.toggle.eq(i),o.data("toggle",a),o.data("content",e),a.data("wrapper",o),e.data("wrapper",o)}),this.element.trigger("update.uk.accordion",[this]),i&&this.options.showfirst&&this.toggleItem(this.toggle.eq(0).data("wrapper"),!1,!1)}}),t.accordion}); \ No newline at end of file diff --git a/media/uikit/js/components/autocomplete.js b/media/uikit-v2/js/components/autocomplete.js similarity index 87% rename from media/uikit/js/components/autocomplete.js rename to media/uikit-v2/js/components/autocomplete.js index 7031f94..637dcb1 100644 --- a/media/uikit/js/components/autocomplete.js +++ b/media/uikit-v2/js/components/autocomplete.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-autocomplete", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-autocomplete', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -45,17 +45,17 @@ boot: function() { // init code - UI.$html.on("focus.autocomplete.uikit", "[data-uk-autocomplete]", function(e) { + UI.$html.on('focus.autocomplete.uikit', '[data-uk-autocomplete]', function(e) { var ele = UI.$(this); - if (!ele.data("autocomplete")) { - var obj = UI.autocomplete(ele, UI.Utils.options(ele.attr("data-uk-autocomplete"))); + if (!ele.data('autocomplete')) { + UI.autocomplete(ele, UI.Utils.options(ele.attr('data-uk-autocomplete'))); } }); // register outer click for autocompletes - UI.$html.on("click.autocomplete.uikit", function(e) { + UI.$html.on('click.autocomplete.uikit', function(e) { if (active && e.target!=active.input[0]) active.hide(); }); }, @@ -65,9 +65,11 @@ var $this = this, select = false, trigger = UI.Utils.debounce(function(e) { - if(select) { + + if (select) { return (select = false); } + $this.handle(); }, this.options.delay); @@ -88,9 +90,10 @@ this.dropdown.attr('aria-expanded', 'false'); this.input.on({ - "keydown": function(e) { - if (e && e.which && !e.shiftKey) { + keydown: function(e) { + + if (e && e.which && !e.shiftKey && $this.visible) { switch (e.which) { case 13: // enter @@ -119,14 +122,15 @@ } }, - "keyup": trigger + + keyup: trigger }); - this.dropdown.on("click", ".uk-autocomplete-results > *", function(){ + this.dropdown.on('click', '.uk-autocomplete-results > *', function(){ $this.select(); }); - this.dropdown.on("mouseover", ".uk-autocomplete-results > *", function(){ + this.dropdown.on('mouseover', '.uk-autocomplete-results > *', function(){ $this.pick(UI.$(this)); }); @@ -199,7 +203,7 @@ var data = this.selected.data(); - this.trigger("selectitem.uk.autocomplete", [data, this]); + this.trigger('selectitem.uk.autocomplete', [data, this]); if (data.value) { this.input.val(data.value).trigger('change'); @@ -209,9 +213,11 @@ }, show: function() { + if (this.visible) return; + this.visible = true; - this.element.addClass("uk-open"); + this.element.addClass('uk-open'); if (active && active!==this) { active.hide(); @@ -228,7 +234,7 @@ hide: function() { if (!this.visible) return; this.visible = false; - this.element.removeClass("uk-open"); + this.element.removeClass('uk-open'); if (active === this) { active = false; @@ -310,8 +316,6 @@ render: function(data) { - var $this = this; - this.dropdown.empty(); this.selected = false; @@ -322,7 +326,7 @@ } else if(data && data.length) { - this.dropdown.append(this.template({"items":data})); + this.dropdown.append(this.template({items:data})); this.show(); this.trigger('show.uk.autocomplete'); diff --git a/media/uikit-v2/js/components/autocomplete.min.js b/media/uikit-v2/js/components/autocomplete.min.js new file mode 100644 index 0000000..58817c9 --- /dev/null +++ b/media/uikit-v2/js/components/autocomplete.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-autocomplete",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";var e;return t.component("autocomplete",{defaults:{minLength:3,param:"search",method:"post",delay:300,loadingClass:"uk-loading",flipDropdown:!1,skipClass:"uk-skip",hoverClass:"uk-active",source:null,renderer:null,template:'
'},visible:!1,value:null,selected:null,boot:function(){t.$html.on("focus.autocomplete.uikit","[data-uk-autocomplete]",function(){var e=t.$(this);e.data("autocomplete")||t.autocomplete(e,t.Utils.options(e.attr("data-uk-autocomplete")))}),t.$html.on("click.autocomplete.uikit",function(t){e&&t.target!=e.input[0]&&e.hide()})},init:function(){var e=this,i=!1,s=t.Utils.debounce(function(){return i?i=!1:(e.handle(),void 0)},this.options.delay);this.dropdown=this.find(".uk-dropdown"),this.template=this.find('script[type="text/autocomplete"]').html(),this.template=t.Utils.template(this.template||this.options.template),this.input=this.find("input:first").attr("autocomplete","off"),this.dropdown.length||(this.dropdown=t.$('
').appendTo(this.element)),this.options.flipDropdown&&this.dropdown.addClass("uk-dropdown-flip"),this.dropdown.attr("aria-expanded","false"),this.input.on({keydown:function(t){if(t&&t.which&&!t.shiftKey&&e.visible)switch(t.which){case 13:i=!0,e.selected&&(t.preventDefault(),e.select());break;case 38:t.preventDefault(),e.pick("prev",!0);break;case 40:t.preventDefault(),e.pick("next",!0);break;case 27:case 9:e.hide()}},keyup:s}),this.dropdown.on("click",".uk-autocomplete-results > *",function(){e.select()}),this.dropdown.on("mouseover",".uk-autocomplete-results > *",function(){e.pick(t.$(this))}),this.triggercomplete=s},handle:function(){var t=this,e=this.value;return this.value=this.input.val(),this.value.lengtha-1?o.length-1:a-1)}else n=o["next"==e?"first":"last"]();n=t.$(n)}}else n=e;if(n&&n.length&&(this.selected=n,o.removeClass(this.options.hoverClass),this.selected.addClass(this.options.hoverClass),i)){var l=n.position().top,h=s.dropdown.scrollTop(),r=s.dropdown.height();(l>r||0>l)&&s.dropdown.scrollTop(h+l)}},select:function(){if(this.selected){var t=this.selected.data();this.trigger("selectitem.uk.autocomplete",[t,this]),t.value&&this.input.val(t.value).trigger("change"),this.hide()}},show:function(){return this.visible?void 0:(this.visible=!0,this.element.addClass("uk-open"),e&&e!==this&&e.hide(),e=this,this.dropdown.attr("aria-expanded","true"),this)},hide:function(){return this.visible?(this.visible=!1,this.element.removeClass("uk-open"),e===this&&(e=!1),this.dropdown.attr("aria-expanded","false"),this):void 0},request:function(){var e=this,i=function(t){t&&e.render(t),e.element.removeClass(e.options.loadingClass)};if(this.element.addClass(this.options.loadingClass),this.options.source){var s=this.options.source;switch(typeof this.options.source){case"function":this.options.source.apply(this,[i]);break;case"object":if(s.length){var o=[];s.forEach(function(t){t.value&&-1!=t.value.toLowerCase().indexOf(e.value.toLowerCase())&&o.push(t)}),i(o)}break;case"string":var n={};n[this.options.param]=this.value,t.$.ajax({url:this.options.source,data:n,type:this.options.method,dataType:"json"}).done(function(t){i(t||[])});break;default:i(null)}}else this.element.removeClass(e.options.loadingClass)},render:function(t){return this.dropdown.empty(),this.selected=!1,this.options.renderer?this.options.renderer.apply(this,[t]):t&&t.length&&(this.dropdown.append(this.template({items:t})),this.show(),this.trigger("show.uk.autocomplete")),this}}),t.autocomplete}); \ No newline at end of file diff --git a/media/uikit/js/components/datepicker.js b/media/uikit-v2/js/components/datepicker.js similarity index 97% rename from media/uikit/js/components/datepicker.js rename to media/uikit-v2/js/components/datepicker.js index 6a260e1..a71a2d3 100644 --- a/media/uikit/js/components/datepicker.js +++ b/media/uikit-v2/js/components/datepicker.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-datepicker", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-datepicker', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -30,22 +30,15 @@ months : ['January','February','March','April','May','June','July','August','September','October','November','December'], weekdays : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] }, - format: "DD.MM.YYYY", + format: 'YYYY-MM-DD', offsettop: 5, maxDate: false, minDate: false, pos: 'auto', + container: 'body', template: function(data, opts) { - var content = '', maxDate, minDate, i; - - if (opts.maxDate!==false){ - maxDate = isNaN(opts.maxDate) ? moment(opts.maxDate, opts.format) : moment().add(opts.maxDate, 'days'); - } - - if (opts.minDate!==false){ - minDate = isNaN(opts.minDate) ? moment(opts.minDate, opts.format) : moment().add(opts.minDate-1, 'days'); - } + var content = '', i; content += '
'; content += ''; @@ -69,8 +62,8 @@ options = []; - minYear = minDate ? minDate.year() : currentyear - 50; - maxYear = maxDate ? maxDate.year() : currentyear + 20; + minYear = data.minDate ? data.minDate.year() : currentyear - 50; + maxYear = data.maxDate ? data.maxDate.year() : currentyear + 20; for (i=minYear;i<=maxYear;i++) { if (i == data.year) { @@ -110,9 +103,7 @@ if(!day.inmonth) cls.push("uk-datepicker-table-muted"); if(day.selected) cls.push("uk-active"); - - if (maxDate && day.day > maxDate) cls.push('uk-datepicker-date-disabled uk-datepicker-table-muted'); - if (minDate && minDate > day.day) cls.push('uk-datepicker-date-disabled uk-datepicker-table-muted'); + if(day.disabled) cls.push('uk-datepicker-date-disabled uk-datepicker-table-muted'); content += '
'; } @@ -130,7 +121,7 @@ boot: function() { - UI.$win.on("resize orientationchange", function() { + UI.$win.on('resize orientationchange', function() { if (active) { active.hide(); @@ -138,22 +129,22 @@ }); // init code - UI.$html.on("focus.datepicker.uikit", "[data-uk-datepicker]", function(e) { + UI.$html.on('focus.datepicker.uikit', '[data-uk-datepicker]', function(e) { var ele = UI.$(this); - if (!ele.data("datepicker")) { + if (!ele.data('datepicker')) { e.preventDefault(); - var obj = UI.datepicker(ele, UI.Utils.options(ele.attr("data-uk-datepicker"))); - ele.trigger("focus"); + UI.datepicker(ele, UI.Utils.options(ele.attr('data-uk-datepicker'))); + ele.trigger('focus'); } }); - UI.$html.on("click.datepicker.uikit", function(e) { + UI.$html.on('click focus', '*', function(e) { var target = UI.$(e.target); - if (active && target[0] != dropdown[0] && !target.data("datepicker") && !target.parents(".uk-datepicker:first").length) { + if (active && target[0] != dropdown[0] && !target.data('datepicker') && !target.parents('.uk-datepicker:first').length) { active.hide(); } }); @@ -170,9 +161,9 @@ this.current = this.element.val() ? moment(this.element.val(), this.options.format) : moment(); - this.on("click focus", function(){ - if (active!==$this) $this.pick(this.value ? this.value:($this.options.minDate ? $this.options.minDate :'')); - }).on("change", function(){ + this.on('click focus', function(){ + if (active!==$this) $this.pick(this.value ? this.value:''); + }).on('change', function(){ if ($this.element.val() && !moment($this.element.val(), $this.options.format).isValid()) { $this.element.val(moment().format($this.options.format)); @@ -184,7 +175,7 @@ dropdown = UI.$('
'); - dropdown.on("click", ".uk-datepicker-next, .uk-datepicker-previous, [data-date]", function(e){ + dropdown.on('click', '.uk-datepicker-next, .uk-datepicker-previous, [data-date]', function(e){ e.stopPropagation(); e.preventDefault(); @@ -194,11 +185,11 @@ if (ele.hasClass('uk-datepicker-date-disabled')) return false; if (ele.is('[data-date]')) { - active.element.val(moment(ele.data("date")).format(active.options.format)).trigger("change"); - dropdown.hide(); - active = false; + active.current = moment(ele.data("date")); + active.element.val(active.current.isValid() ? active.current.format(active.options.format) : null).trigger("change"); + active.hide(); } else { - active.add(1 * (ele.hasClass("uk-datepicker-next") ? 1:-1), "months"); + active.add((ele.hasClass("uk-datepicker-next") ? 1:-1), "months"); } }); @@ -208,23 +199,23 @@ active[select.is('.update-picker-year') ? 'setYear':'setMonth'](Number(select.val())); }); - dropdown.appendTo("body"); + dropdown.appendTo(this.options.container); } }, pick: function(initdate) { var offset = this.element.offset(), - css = {"left": offset.left, "right":""}; + css = {left: offset.left, right:''}; - this.current = initdate ? moment(initdate, this.options.format):moment(); + this.current = isNaN(initdate) ? moment(initdate, this.options.format):moment(); this.initdate = this.current.format("YYYY-MM-DD"); this.update(); if (UI.langdirection == 'right') { css.right = window.innerWidth - (css.left + this.element.outerWidth()); - css.left = ""; + css.left = ''; } var posTop = (offset.top - this.element.outerHeight() + this.element.height()) - this.options.offsettop - dropdown.outerHeight(), @@ -274,10 +265,19 @@ var opts = this.options, now = moment().format('YYYY-MM-DD'), days = [31, (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month], - before = new Date(year, month, 1).getDay(), - data = {"month":month, "year":year,"weekdays":[],"days":[]}, + before = new Date(year, month, 1, 12).getDay(), + data = {month:month, year:year, weekdays:[], days:[], maxDate:false, minDate:false}, row = []; + // We need these to be midday to avoid issues from DST transition protection. + if (opts.maxDate!==false){ + data.maxDate = isNaN(opts.maxDate) ? moment(opts.maxDate, opts.format).startOf('day').hours(12) : moment().add(opts.maxDate, 'days').startOf('day').hours(12); + } + + if (opts.minDate!==false){ + data.minDate = isNaN(opts.minDate) ? moment(opts.minDate, opts.format).startOf('day').hours(12) : moment().add(opts.minDate-1, 'days').startOf('day').hours(12); + } + data.weekdays = (function(){ for (var i=0, arr=[]; i < 7; i++) { @@ -311,16 +311,16 @@ for (var i = 0, r = 0; i < cells; i++) { - day = new Date(year, month, 1 + (i - before)); - isDisabled = (opts.mindate && day < opts.mindate) || (opts.maxdate && day > opts.maxdate); + day = new Date(year, month, 1 + (i - before), 12); + isDisabled = (data.minDate && data.minDate > day) || (data.maxDate && day > data.maxDate); isInMonth = !(i < before || i >= (days + before)); day = moment(day); - isSelected = this.initdate == day.format("YYYY-MM-DD"); - isToday = now == day.format("YYYY-MM-DD"); + isSelected = this.initdate == day.format('YYYY-MM-DD'); + isToday = now == day.format('YYYY-MM-DD'); - row.push({"selected": isSelected, "today": isToday, "disabled": isDisabled, "day":day, "inmonth":isInMonth}); + row.push({selected: isSelected, today: isToday, disabled: isDisabled, day:day, inmonth:isInMonth}); if (++r === 7) { data.days.push(row); diff --git a/media/uikit/js/components/datepicker.min.js b/media/uikit-v2/js/components/datepicker.min.js similarity index 52% rename from media/uikit/js/components/datepicker.min.js rename to media/uikit-v2/js/components/datepicker.min.js index 9a30a1f..27597e3 100644 --- a/media/uikit/js/components/datepicker.min.js +++ b/media/uikit-v2/js/components/datepicker.min.js @@ -1,3 +1,3 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-datepicker",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";var e,n,a=!1;return t.component("datepicker",{defaults:{mobile:!1,weekstart:1,i18n:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],weekdays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},format:"DD.MM.YYYY",offsettop:5,maxDate:!1,minDate:!1,pos:"auto",template:function(e,a){var s,i,r,o="";if(a.maxDate!==!1&&(s=isNaN(a.maxDate)?n(a.maxDate,a.format):n().add(a.maxDate,"days")),a.minDate!==!1&&(i=isNaN(a.minDate)?n(a.minDate,a.format):n().add(a.minDate-1,"days")),o+='
',o+='',o+='',t.formSelect){var u,c,d,l,h=(new Date).getFullYear(),f=[];for(r=0;r'+a.i18n.months[r]+""):f.push('");for(u=''+a.i18n.months[e.month]+'",f=[],d=i?i.year():h-50,l=s?s.year():h+20,r=d;l>=r;r++)r==e.year?f.push('"):f.push('");c=''+e.year+'",o+='
'+u+" "+c+"
"}else o+='
'+a.i18n.months[e.month]+" "+e.year+"
";for(o+="
",o+='
").text(this.emptyString))},draw:function(){var a=this,c=a.ft.$el.children("tbody"),d=!0;a.array.length>0?(a.$empty.detach(),b.arr.each(a.array,function(b){a.expandFirst&&d&&(b.expanded=!0,d=!1),b.draw(c)})):(a.$empty.children("td").attr("colspan",a.ft.columns.visibleColspan),c.append(a.$empty))}}),b.components.internal.register("rows",b.Rows,0)}(jQuery,FooTable),function(a){a.Defaults.prototype.rows=[],a.Defaults.prototype.empty="No results",a.Defaults.prototype.showToggle=!0,a.Defaults.prototype.toggleColumn="first",a.Defaults.prototype.expandFirst=!1}(FooTable),function(a){a.Filter=a.Class.extend({construct:function(b,c,d,e,f){this.name=b,this.space=!a.is.string(e)||"OR"!=e&&"AND"!=e?"AND":e,this.connectors=a.is["boolean"](f)?f:!0,this.query=new a.Query(c,this.space,this.connectors),this.columns=d},match:function(b){return a.is.string(b)?(a.is.string(this.query)&&(this.query=new a.Query(this.query,this.space,this.connectors)),this.query instanceof a.Query?this.query.match(b):!1):!1},matchRow:function(b){var c=this,d=a.arr.map(b.cells,function(b){return a.arr.contains(c.columns,b.column)?b.filterValue:null}).join(" ");return c.match(d)}})}(FooTable),function(a,b){b.Filtering=b.Component.extend({construct:function(a){this._super(a,a.o.filtering.enabled),this.filters=a.o.filtering.filters,this.delay=a.o.filtering.delay,this.min=a.o.filtering.min,this.space=a.o.filtering.space,this.connectors=a.o.filtering.connectors,this.placeholder=a.o.filtering.placeholder,this.position=a.o.filtering.position,this.$row=null,this.$cell=null,this.$dropdown=null,this.$input=null,this.$button=null,this._filterTimeout=null},preinit:function(a){var c=this;this.ft.raise("preinit.ft.filtering").then(function(){c.ft.$el.hasClass("footable-filtering")&&(c.enabled=!0),c.enabled=b.is["boolean"](a.filtering)?a.filtering:c.enabled,c.enabled&&(c.space=b.is.string(a.filterSpace)?a.filterSpace:c.space,c.min=b.is.number(a.filterMin)?a.filterMin:c.min,c.connectors=b.is.number(a.filterConnectors)?a.filterConnectors:c.connectors,c.delay=b.is.number(a.filterDelay)?a.filterDelay:c.delay,c.placeholder=b.is.number(a.filterPlaceholder)?a.filterPlaceholder:c.placeholder,c.filters=b.is.array(a.filterFilters)?c.ensure(a.filterFilters):c.ensure(c.filters),c.ft.$el.hasClass("footable-filtering-left")&&(c.position="left"),c.ft.$el.hasClass("footable-filtering-center")&&(c.position="center"),c.ft.$el.hasClass("footable-filtering-right")&&(c.position="right"),c.position=b.is.string(a.filterPosition)?a.filterPosition:c.position)},function(){c.enabled=!1})},init:function(){var a=this;this.ft.raise("init.ft.filtering").then(function(){a.$create()},function(){a.enabled=!1})},destroy:function(){var a=this;this.ft.raise("destroy.ft.filtering").then(function(){a.ft.$el.removeClass("footable-filtering").find("thead > tr.footable-filtering").remove()})},$create:function(){var c,d=this,e=a("
",{"class":"form-group"}).append(a("
").attr("colspan",d.ft.columns.visibleColspan).appendTo(d.$row),d.$form=a("",{"class":"form-inline"}).append(e).appendTo(d.$cell),d.$input=a("",{type:"text","class":"form-control",placeholder:d.placeholder}),d.$button=a("").attr("colspan",c.ft.columns.visibleColspan);var f=c.ft.$el.children("tfoot");0==f.length&&(f=a("
').attr('colspan', this.ft.columns.visibleColspan); + var $tfoot = this.ft.$el.children('tfoot'); + if ($tfoot.length == 0){ + $tfoot = $('
").attr("colspan",this.ft.columns.visibleColspan);var c=this.ft.$el.children("tfoot");0==c.length&&(c=a("
This example shows using pseudo code what a sort function would look like.
"+t.title+"
'+a+"
");return t.formatter?i.html(t.formatter(a,i,o)):i.html(a||""),i}var a=this;a.name="Footable Grid",a.init=function(t){var d=t.options.classes.toggle,s=t.options.classes.detail,f=t.options.grid;if(f.cols){a.footable=t;var u=e(t.table);u.data("grid",a),e.isPlainObject(f.data)&&u.data(f.data),a._items=[],r(f.cols),f.showCheckbox&&(f.multiSelect=!0,f.cols.unshift({title:f.checkboxFormatter(!0),name:"",data:{"sort-ignore":!0},formatter:f.checkboxFormatter})),f.showIndex&&f.cols.unshift({title:"#",name:"index",data:{"sort-ignore":!0},formatter:f.indexFormatter}),o(u,f),i(u),n(u,f.cols,f.pagination),u.off(".grid").on({"footable_initialized.grid":function(){f.url||f.ajax?e.ajax(f.ajax||{url:f.url}).then(function(e){a.newItem(e),t.raise(f.events.loaded)},function(){throw"load data from "+(f.url||f.ajax.url)+" fail"}):(a.newItem(f.items||[]),t.raise(f.events.loaded))},"footable_sorted.grid footable_grid_created.grid footable_grid_removed.grid":function(){f.showIndex&&a.getItem().length>0&&u.find("tbody tr:not(."+s+")").each(function(t){var a=e(this).find("td:first");a.html(f.indexFormatter(null,a,t))})},"footable_redrawn.grid footable_row_removed.grid":function(){0===a.getItem().length&&f.showEmptyInfo&&l(u,f.cols,f.emptyInfo)}}).on({"click.grid":function(a){if(e(a.target).closest("td").find(">."+d).size()>0)return!0;var o=e(a.currentTarget);return o.hasClass(s)?!0:(f.multiSelect||o.hasClass(f.activeClass)||u.find("tbody tr."+f.activeClass).removeClass(f.activeClass),o.toggleClass(f.activeClass),f.showCheckbox&&o.find("input:checkbox.check").prop("checked",function(e,t){return a.target===this?t:!t}),t.toggleDetail(o),undefined)}},"tbody tr").on("click.grid","thead input:checkbox.checkAll",function(e){var t=!!e.currentTarget.checked;t?u.find("tbody tr").addClass(f.activeClass):u.find("tbody tr").removeClass(f.activeClass),u.find("tbody input:checkbox.check").prop("checked",t)})}},a.getSelected=function(){var t=a.footable.options.grid,o=e(a.footable.table).find("tbody>tr."+t.activeClass);return o.map(function(){return e(this).data("index")})},a.getItem=function(t){return t!==undefined?e.isArray(t)?e.map(t,function(e){return a._items[e]}):a._items[t]:a._items},a._makeRow=function(o,i){var n,r=a.footable.options.grid;if(e.isFunction(r.template))n=e(r.template(e.extend({},{__index:i},o)));else{n=e("
"+t.title+"
'+a+"
");return t.formatter?i.html(t.formatter(a,i,o)):i.html(a||""),i}var a=this;a.name="Footable Grid",a.init=function(t){var d=t.options.classes.toggle,s=t.options.classes.detail,f=t.options.grid;if(f.cols){a.footable=t;var u=e(t.table);u.data("grid",a),e.isPlainObject(f.data)&&u.data(f.data),a._items=[],r(f.cols),f.showCheckbox&&(f.multiSelect=!0,f.cols.unshift({title:f.checkboxFormatter(!0),name:"",data:{"sort-ignore":!0},formatter:f.checkboxFormatter})),f.showIndex&&f.cols.unshift({title:"#",name:"index",data:{"sort-ignore":!0},formatter:f.indexFormatter}),o(u,f),i(u),n(u,f.cols,f.pagination),u.off(".grid").on({"footable_initialized.grid":function(){f.url||f.ajax?e.ajax(f.ajax||{url:f.url}).then(function(e){a.newItem(e),t.raise(f.events.loaded)},function(){throw"load data from "+(f.url||f.ajax.url)+" fail"}):(a.newItem(f.items||[]),t.raise(f.events.loaded))},"footable_sorted.grid footable_grid_created.grid footable_grid_removed.grid":function(){f.showIndex&&a.getItem().length>0&&u.find("tbody tr:not(."+s+")").each(function(t){var a=e(this).find("td:first");a.html(f.indexFormatter(null,a,t))})},"footable_redrawn.grid footable_row_removed.grid":function(){0===a.getItem().length&&f.showEmptyInfo&&l(u,f.cols,f.emptyInfo)}}).on({"click.grid":function(a){if(e(a.target).closest("td").find(">."+d).size()>0)return!0;var o=e(a.currentTarget);return o.hasClass(s)?!0:(f.multiSelect||o.hasClass(f.activeClass)||u.find("tbody tr."+f.activeClass).removeClass(f.activeClass),o.toggleClass(f.activeClass),f.showCheckbox&&o.find("input:checkbox.check").prop("checked",function(e,t){return a.target===this?t:!t}),t.toggleDetail(o),undefined)}},"tbody tr").on("click.grid","thead input:checkbox.checkAll",function(e){var t=!!e.currentTarget.checked;t?u.find("tbody tr").addClass(f.activeClass):u.find("tbody tr").removeClass(f.activeClass),u.find("tbody input:checkbox.check").prop("checked",t)})}},a.getSelected=function(){var t=a.footable.options.grid,o=e(a.footable.table).find("tbody>tr."+t.activeClass);return o.map(function(){return e(this).data("index")})},a.getItem=function(t){return t!==undefined?e.isArray(t)?e.map(t,function(e){return a._items[e]}):a._items[t]:a._items},a._makeRow=function(o,i){var n,r=a.footable.options.grid;if(e.isFunction(r.template))n=e(r.template(e.extend({},{__index:i},o)));else{n=e("
' + col.title + '
' + emptyInfo + '
'); - if (col.formatter) { - $td.html(col.formatter(value, $td, index)); - } else { - $td.html(value || ''); - } - return $td; - } - grid._makeRow = function(item, index) { - var options = grid.footable.options.grid; - var $row; - if ($.isFunction(options.template)) { - $row = $(options.template($.extend({}, { - __index: index - }, item))); - } else { - $row = $('
element gets set. The rows themselves do not get sorted. - // - // Best guess is some things happen after 'footable_initialized' event - // and sorting can not occur until after those fire. - // - // A hack to get around this is to wait an interval before executing - // the intended commands. Wrapped in an immediately executing - // function to ensure ft is the current value. - - (function(ft){ - setTimeout(function(){ - $(ft.table).data('footable-sort').doSort(data.sorted, !data.descending); - }, 150); - })(vars.ft); - } else { - vars.table.trigger('footable_setup_paging'); - } - }; - - get.total = function(){ - return vars.table - .find('tbody') - .find('tr:not(.footable-row-detail, .footable-filtered)').length; - }; - - var get_state = function(){ - return { - descending: get.descending(), - expanded: get.expanded(), - filter: get.filter(), - page: get.page(), - shown: get.shown(), - sorted: get.sorted(), - total: get.total() - }; - }; - - var set_state = function(data){ - set.filter(data); - set.page(data); - set.sorted(data); - set.expanded(data); - }; - - return { - get: function(ft){ - set.vars(ft); - return get_state(); - }, - set: function(ft, data){ - set.vars(ft); - return set_state(data); - } - }; - - })($); - - var is_enabled = function(ft){ - return ft.options.memory.enabled; - }; - - var update = function(ft, event) { - var index = ft.id, - data = state.get(ft); - - storage.set(index, data); - }; - - var load = function(ft){ - var index = ft.id, - data = storage.get(index); - - state.set(ft, data); - ft.memory_plugin_loaded = true; - }; - - function Memory() { - var p = this; - p.name = 'Footable Memory'; - p.init = function(ft) { - if (is_enabled(ft)) { - $(ft.table).bind({ - 'footable_initialized': function(){ - load(ft); - }, - 'footable_page_filled footable_redrawn footable_filtered footable_sorted footable_row_expanded footable_row_collapsed': function(e) { - if (ft.memory_plugin_loaded) { - update(ft, e); - } - } - }); - } - }; - } - - w.footable.plugins.register(Memory, defaults); - -})(jQuery, window); diff --git a/media/footable/js/footable.paginate.js b/media/footable/js/footable.paginate.js deleted file mode 100644 index 8f21c45..0000000 --- a/media/footable/js/footable.paginate.js +++ /dev/null @@ -1,242 +0,0 @@ -(function ($, w, undefined) { - if (w.footable === undefined || w.footable === null) - throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.'); - - var defaults = { - paginate: true, - pageSize: 10, - pageNavigation: '.pagination', - firstText: '«', - previousText: '‹', - nextText: '›', - lastText: '»', - limitNavigation: 0, - limitPreviousText: '...', - limitNextText: '...' - }; - - function pageInfo(ft) { - var $table = $(ft.table), data = $table.data(); - this.pageNavigation = data.pageNavigation || ft.options.pageNavigation; - this.pageSize = data.pageSize || ft.options.pageSize; - this.firstText = data.firstText || ft.options.firstText; - this.previousText = data.previousText || ft.options.previousText; - this.nextText = data.nextText || ft.options.nextText; - this.lastText = data.lastText || ft.options.lastText; - this.limitNavigation = parseInt(data.limitNavigation || ft.options.limitNavigation || defaults.limitNavigation, 10); - this.limitPreviousText = data.limitPreviousText || ft.options.limitPreviousText; - this.limitNextText = data.limitNextText || ft.options.limitNextText; - this.limit = this.limitNavigation > 0; - this.currentPage = data.currentPage || 0; - this.pages = []; - this.control = false; - } - - function Paginate() { - var p = this; - p.name = 'Footable Paginate'; - - p.init = function (ft) { - if (ft.options.paginate === true) { - if ($(ft.table).data('page') === false) return; - p.footable = ft; - $(ft.table) - .unbind('.paging') - .bind({ - 'footable_initialized.paging footable_row_removed.paging footable_redrawn.paging footable_sorted.paging footable_filtered.paging': function () { - p.setupPaging(); - } - }) - //save the filter object onto the table so we can access it later - .data('footable-paging', p); - } - }; - - p.setupPaging = function () { - var ft = p.footable, - $tbody = $(ft.table).find('> tbody'); - - ft.pageInfo = new pageInfo(ft); - - p.createPages(ft, $tbody); - p.createNavigation(ft, $tbody); - p.fillPage(ft, $tbody, ft.pageInfo.currentPage); - }; - - p.createPages = function (ft, tbody) { - var pages = 1; - var info = ft.pageInfo; - var pageCount = pages * info.pageSize; - var page = []; - var lastPage = []; - info.pages = []; - var rows = tbody.find('> tr:not(.footable-filtered,.footable-row-detail)'); - rows.each(function (i, row) { - page.push(row); - if (i === pageCount - 1) { - info.pages.push(page); - pages++; - pageCount = pages * info.pageSize; - page = []; - } else if (i >= rows.length - (rows.length % info.pageSize)) { - lastPage.push(row); - } - }); - if (lastPage.length > 0) info.pages.push(lastPage); - if (info.currentPage >= info.pages.length) info.currentPage = info.pages.length - 1; - if (info.currentPage < 0) info.currentPage = 0; - if (info.pages.length === 1) { - //we only have a single page - $(ft.table).addClass('no-paging'); - } else { - $(ft.table).removeClass('no-paging'); - } - }; - - p.createNavigation = function (ft, tbody) { - var $nav = $(ft.table).find(ft.pageInfo.pageNavigation); - //if we cannot find the navigation control within the table, then try find it outside - if ($nav.length === 0) { - $nav = $(ft.pageInfo.pageNavigation); - //if the navigation control is inside another table, then get out - if ($nav.parents('table:first').length > 0 && $nav.parents('table:first') !== $(ft.table)) return; - //if we found more than one navigation control, write error to console - if ($nav.length > 1 && ft.options.debug === true) console.error('More than one pagination control was found!'); - } - //if we still cannot find the control, then don't do anything - if ($nav.length === 0) return; - //if the nav is not a UL, then find or create a UL - if (!$nav.is('ul')) { - if ($nav.find('ul:first').length === 0) { - $nav.append('
    '); - } - $nav = $nav.find('ul'); - } - $nav.find('li').remove(); - var info = ft.pageInfo; - info.control = $nav; - if (info.pages.length > 0) { - $nav.append('
  • ' + ft.pageInfo.firstText + ''); - $nav.append('
  • ' + ft.pageInfo.previousText + '
  • '); - if (info.limit){ - $nav.append('
  • ' + ft.pageInfo.limitPreviousText + '
  • '); - } - if (!info.limit){ - $.each(info.pages, function (i, page) { - if (page.length > 0) { - $nav.append('
  • ' + (i + 1) + '
  • '); - } - }); - } - if (info.limit){ - $nav.append('
  • ' + ft.pageInfo.limitNextText + '
  • '); - p.createLimited($nav, info, 0); - } - $nav.append('
  • ' + ft.pageInfo.nextText + '
  • '); - $nav.append('
  • ' + ft.pageInfo.lastText + '
  • '); - } - $nav.off('click', 'a[data-page]').on('click', 'a[data-page]', function (e) { - e.preventDefault(); - var page = $(this).data('page'); - var newPage = info.currentPage; - if (page === 'first') { - newPage = 0; - } else if (page === 'prev') { - if (newPage > 0) newPage--; - } else if (page === 'next') { - if (newPage < info.pages.length - 1) newPage++; - } else if (page === 'last') { - newPage = info.pages.length - 1; - } else if (page === 'limit-prev') { - newPage = -1; - var first = $nav.find('.footable-page:first a').data('page'); - p.createLimited($nav, info, first - info.limitNavigation); - p.setPagingClasses($nav, info.currentPage, info.pages.length); - } else if (page === 'limit-next') { - newPage = -1; - var last = $nav.find('.footable-page:last a').data('page'); - p.createLimited($nav, info, last + 1); - p.setPagingClasses($nav, info.currentPage, info.pages.length); - } else { - newPage = page; - } - if (newPage >= 0){ - if (info.limit && info.currentPage != newPage){ - var start = newPage; - while (start % info.limitNavigation !== 0){ start -= 1; } - p.createLimited($nav, info, start); - } - p.paginate(ft, newPage); - } - }); - p.setPagingClasses($nav, info.currentPage, info.pages.length); - }; - - p.createLimited = function(nav, info, start){ - start = start || 0; - nav.find('li.footable-page').remove(); - var i, page, - $prev = nav.find('li.footable-page-arrow > a[data-page="limit-prev"]').parent(), - $next = nav.find('li.footable-page-arrow > a[data-page="limit-next"]').parent(); - for (i = info.pages.length - 1; i >=0 ; i--){ - page = info.pages[i]; - if (i >= start && i < start + info.limitNavigation && page.length > 0) { - $prev.after('
  • ' + (i + 1) + '
  • '); - } - } - if (start === 0){ $prev.hide(); } - else { $prev.show(); } - if (start + info.limitNavigation >= info.pages.length){ $next.hide(); } - else { $next.show(); } - }; - - p.paginate = function (ft, newPage) { - var info = ft.pageInfo; - if (info.currentPage !== newPage) { - var $tbody = $(ft.table).find('> tbody'); - - //raise a pre-pagin event so that we can cancel the paging if needed - var event = ft.raise('footable_paging', { page: newPage, size: info.pageSize }); - if (event && event.result === false) return; - - p.fillPage(ft, $tbody, newPage); - info.control.find('li').removeClass('active disabled'); - p.setPagingClasses(info.control, info.currentPage, info.pages.length); - } - }; - - p.setPagingClasses = function (nav, currentPage, pageCount) { - nav.find('li.footable-page > a[data-page=' + currentPage + ']').parent().addClass('active'); - if (currentPage >= pageCount - 1) { - nav.find('li.footable-page-arrow > a[data-page="next"]').parent().addClass('disabled'); - nav.find('li.footable-page-arrow > a[data-page="last"]').parent().addClass('disabled'); - } - if (currentPage < 1) { - nav.find('li.footable-page-arrow > a[data-page="first"]').parent().addClass('disabled'); - nav.find('li.footable-page-arrow > a[data-page="prev"]').parent().addClass('disabled'); - } - }; - - p.fillPage = function (ft, tbody, pageNumber) { - ft.pageInfo.currentPage = pageNumber; - $(ft.table).data('currentPage', pageNumber); - tbody.find('> tr').hide(); - $(ft.pageInfo.pages[pageNumber]).each(function () { - p.showRow(this, ft); - }); - ft.raise('footable_page_filled'); - }; - - p.showRow = function (row, ft) { - var $row = $(row), $next = $row.next(), $table = $(ft.table); - if ($table.hasClass('breakpoint') && $row.hasClass('footable-detail-show') && $next.hasClass('footable-row-detail')) { - $row.add($next).show(); - ft.createOrUpdateDetailRow(row); - } - else $row.show(); - }; - } - - w.footable.plugins.register(Paginate, defaults); - -})(jQuery, window); diff --git a/media/footable/js/footable.plugin.template.js b/media/footable/js/footable.plugin.template.js deleted file mode 100644 index 381cc54..0000000 --- a/media/footable/js/footable.plugin.template.js +++ /dev/null @@ -1,44 +0,0 @@ -(function ($, w, undefined) { - if (w.footable === undefined || w.foobox === null) - throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.'); - - var defaults = { - /* - Plugin options here, example: - - var defaults = { - myPlugin: { - enabled: true - } - }; - - This would allow you to access this option using ft.options.myPlugin.enabled - */ - }; - - function MyPlugin() { - var p = this; - p.name = 'Footable MyPlugin'; - p.init = function(ft) { - $(ft.table).bind({ - /* - Bind to relevant events here to modify/add functionality to Footable, example: - - $(ft.table).bind({ - 'footable_initialized': function(e){ - if (e.ft.options.myPlugin.enabled === true){ - alert('Hello World'); - } - } - }); - - This would listen for the 'footable_initialized' event and when called check if the plugin is enabled - and if it is alert 'Hello World' to the user. - */ - }); - }; - } - - w.footable.plugins.register(MyPlugin, defaults); - -})(jQuery, window); diff --git a/media/footable/js/footable.sort.js b/media/footable/js/footable.sort.js deleted file mode 100644 index ec3c040..0000000 --- a/media/footable/js/footable.sort.js +++ /dev/null @@ -1,190 +0,0 @@ -(function ($, w, undefined) { - if (w.footable === undefined || w.footable === null) - throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.'); - - var defaults = { - sort: true, - sorters: { - alpha: function (a, b) { - if (typeof(a) === 'string') { a = a.toLowerCase(); } - if (typeof(b) === 'string') { b = b.toLowerCase(); } - if (a === b) return 0; - if (a < b) return -1; - return 1; - }, - numeric: function (a, b) { - return a - b; - } - }, - classes: { - sort: { - sortable: 'footable-sortable', - sorted: 'footable-sorted', - descending: 'footable-sorted-desc', - indicator: 'footable-sort-indicator' - } - }, - events: { - sort: { - sorting: 'footable_sorting', - sorted: 'footable_sorted' - } - } - }; - - function Sort() { - var p = this; - p.name = 'Footable Sortable'; - p.init = function (ft) { - p.footable = ft; - if (ft.options.sort === true) { - $(ft.table) - .unbind('.sorting') - .bind({ - 'footable_initialized.sorting': function (e) { - var $table = $(ft.table), - $tbody = $table.find('> tbody'), - cls = ft.options.classes.sort, - column, $th; - - if ($table.data('sort') === false) return; - - $table.find('> thead > tr:last-child > th, > thead > tr:last-child > td').each(function (ec) { - var $th = $(this), column = ft.columns[$th.index()]; - if (column.sort.ignore !== true && !$th.hasClass(cls.sortable)) { - $th.addClass(cls.sortable); - $('').addClass(cls.indicator).appendTo($th); - } - }); - - $table.find('> thead > tr:last-child > th.' + cls.sortable + ', > thead > tr:last-child > td.' + cls.sortable).unbind('click.footable').bind('click.footable', function (ec) { - ec.preventDefault(); - $th = $(this); - var ascending = !$th.hasClass(cls.sorted); - p.doSort($th.index(), ascending); - return false; - }); - - var didSomeSorting = false; - for (var c in ft.columns) { - column = ft.columns[c]; - if (column.sort.initial) { - var ascending = (column.sort.initial !== 'descending'); - p.doSort(column.index, ascending); - break; - } - } - if (didSomeSorting) { - ft.bindToggleSelectors(); - } - }, - 'footable_redrawn.sorting': function(e) { - var $table = $(ft.table), - cls = ft.options.classes.sort; - if ($table.data('sorted') >= 0) { - $table.find('> thead > tr:last-child > th').each(function(i){ - var $th = $(this); - if ($th.hasClass(cls.sorted) || $th.hasClass(cls.descending)) { - p.doSort(i); - return; - } - }); - } - }, - 'footable_column_data.sorting': function (e) { - var $th = $(e.column.th); - e.column.data.sort = e.column.data.sort || {}; - e.column.data.sort.initial = $th.data('sort-initial') || false; - e.column.data.sort.ignore = $th.data('sort-ignore') || false; - e.column.data.sort.selector = $th.data('sort-selector') || null; - - var match = $th.data('sort-match') || 0; - if (match >= e.column.data.matches.length) match = 0; - e.column.data.sort.match = e.column.data.matches[match]; - } - }) - //save the sort object onto the table so we can access it later - .data('footable-sort', p); - } - }; - - p.doSort = function(columnIndex, ascending) { - var ft = p.footable; - if ($(ft.table).data('sort') === false) return; - - var $table = $(ft.table), - $tbody = $table.find('> tbody'), - column = ft.columns[columnIndex], - $th = $table.find('> thead > tr:last-child > th:eq(' + columnIndex + ')'), - cls = ft.options.classes.sort, - evt = ft.options.events.sort; - - ascending = (ascending === undefined) ? $th.hasClass(cls.sorted) : - (ascending === 'toggle') ? !$th.hasClass(cls.sorted) : ascending; - - if (column.sort.ignore === true) return true; - - //raise a pre-sorting event so that we can cancel the sorting if needed - var event = ft.raise(evt.sorting, { column: column, direction: ascending ? 'ASC' : 'DESC' }); - if (event && event.result === false) return; - - $table.data('sorted', column.index); - - $table.find('> thead > tr:last-child > th, > thead > tr:last-child > td').not($th).removeClass(cls.sorted + ' ' + cls.descending); - - if (ascending === undefined) { - ascending = $th.hasClass(cls.sorted); - } - - if (ascending) { - $th.removeClass(cls.descending).addClass(cls.sorted); - } else { - $th.removeClass(cls.sorted).addClass(cls.descending); - } - - p.sort(ft, $tbody, column, ascending); - - ft.bindToggleSelectors(); - ft.raise(evt.sorted, { column: column, direction: ascending ? 'ASC' : 'DESC' }); - }; - - p.rows = function (ft, tbody, column) { - var rows = []; - tbody.find('> tr').each(function () { - var $row = $(this), $next = null; - if ($row.hasClass(ft.options.classes.detail)) return true; - if ($row.next().hasClass(ft.options.classes.detail)) { - $next = $row.next().get(0); - } - var row = { 'row': $row, 'detail': $next }; - if (column !== undefined) { - row.value = ft.parse(this.cells[column.sort.match], column); - } - rows.push(row); - return true; - }).detach(); - return rows; - }; - - p.sort = function (ft, tbody, column, ascending) { - var rows = p.rows(ft, tbody, column); - var sorter = ft.options.sorters[column.type] || ft.options.sorters.alpha; - rows.sort(function (a, b) { - if (ascending) { - return sorter(a.value, b.value); - } else { - return sorter(b.value, a.value); - } - }); - for (var j = 0; j < rows.length; j++) { - tbody.append(rows[j].row); - if (rows[j].detail !== null) { - tbody.append(rows[j].detail); - } - } - }; - } - - w.footable.plugins.register(Sort, defaults); - -})(jQuery, window); diff --git a/media/footable/js/footable.striping.js b/media/footable/js/footable.striping.js deleted file mode 100644 index 17c505b..0000000 --- a/media/footable/js/footable.striping.js +++ /dev/null @@ -1,57 +0,0 @@ -(function ($, w, undefined) { - if (w.footable === undefined || w.foobox === null) - throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.'); - - var defaults = { - striping: { - enabled: true - }, - classes: { - striping: { - odd: 'footable-odd', - even: 'footable-even' - } - } - }; - - function Striping() { - var p = this; - p.name = 'Footable Striping'; - p.init = function (ft) { - p.footable = ft; - $(ft.table) - .unbind('striping') - .bind({ - 'footable_initialized.striping footable_row_removed.striping footable_redrawn.striping footable_sorted.striping footable_filtered.striping': function () { - - if ($(this).data('striping') === false) return; - - p.setupStriping(ft); - } - }); - }; - - p.setupStriping = function (ft) { - - var rowIndex = 0; - $(ft.table).find('> tbody > tr:not(.footable-row-detail)').each(function () { - - var $row = $(this); - - //Clean off old classes - $row.removeClass(ft.options.classes.striping.even).removeClass(ft.options.classes.striping.odd); - - if (rowIndex % 2 === 0) { - $row.addClass(ft.options.classes.striping.even); - } else { - $row.addClass(ft.options.classes.striping.odd); - } - - rowIndex++; - }); - }; - } - - w.footable.plugins.register(Striping, defaults); - -})(jQuery, window); diff --git a/media/images/facility.png b/media/images/facility.png new file mode 100644 index 0000000..e205a0e Binary files /dev/null and b/media/images/facility.png differ diff --git a/media/js-marker-cluster/images/conv30.png b/media/js-marker-cluster/images/conv30.png new file mode 100644 index 0000000..a50f61f Binary files /dev/null and b/media/js-marker-cluster/images/conv30.png differ diff --git a/media/js-marker-cluster/images/conv40.png b/media/js-marker-cluster/images/conv40.png new file mode 100644 index 0000000..2fe31a5 Binary files /dev/null and b/media/js-marker-cluster/images/conv40.png differ diff --git a/media/js-marker-cluster/images/conv50.png b/media/js-marker-cluster/images/conv50.png new file mode 100644 index 0000000..cbab98b Binary files /dev/null and b/media/js-marker-cluster/images/conv50.png differ diff --git a/media/js-marker-cluster/images/heart30.png b/media/js-marker-cluster/images/heart30.png new file mode 100644 index 0000000..c6067a7 Binary files /dev/null and b/media/js-marker-cluster/images/heart30.png differ diff --git a/media/js-marker-cluster/images/heart40.png b/media/js-marker-cluster/images/heart40.png new file mode 100644 index 0000000..e79ba0a Binary files /dev/null and b/media/js-marker-cluster/images/heart40.png differ diff --git a/media/js-marker-cluster/images/heart50.png b/media/js-marker-cluster/images/heart50.png new file mode 100644 index 0000000..26c2252 Binary files /dev/null and b/media/js-marker-cluster/images/heart50.png differ diff --git a/media/js-marker-cluster/images/m1.png b/media/js-marker-cluster/images/m1.png new file mode 100644 index 0000000..329ff52 Binary files /dev/null and b/media/js-marker-cluster/images/m1.png differ diff --git a/media/js-marker-cluster/images/m2.png b/media/js-marker-cluster/images/m2.png new file mode 100644 index 0000000..b999cbc Binary files /dev/null and b/media/js-marker-cluster/images/m2.png differ diff --git a/media/js-marker-cluster/images/m3.png b/media/js-marker-cluster/images/m3.png new file mode 100644 index 0000000..9f30b30 Binary files /dev/null and b/media/js-marker-cluster/images/m3.png differ diff --git a/media/js-marker-cluster/images/m4.png b/media/js-marker-cluster/images/m4.png new file mode 100644 index 0000000..0d3f826 Binary files /dev/null and b/media/js-marker-cluster/images/m4.png differ diff --git a/media/js-marker-cluster/images/m5.png b/media/js-marker-cluster/images/m5.png new file mode 100644 index 0000000..61387d2 Binary files /dev/null and b/media/js-marker-cluster/images/m5.png differ diff --git a/media/js-marker-cluster/images/people35.png b/media/js-marker-cluster/images/people35.png new file mode 100644 index 0000000..6a5a209 Binary files /dev/null and b/media/js-marker-cluster/images/people35.png differ diff --git a/media/js-marker-cluster/images/people45.png b/media/js-marker-cluster/images/people45.png new file mode 100644 index 0000000..219c62e Binary files /dev/null and b/media/js-marker-cluster/images/people45.png differ diff --git a/media/js-marker-cluster/images/people55.png b/media/js-marker-cluster/images/people55.png new file mode 100644 index 0000000..6e88d1e Binary files /dev/null and b/media/js-marker-cluster/images/people55.png differ diff --git a/media/js-marker-cluster/images/pin.png b/media/js-marker-cluster/images/pin.png new file mode 100644 index 0000000..3f830a3 Binary files /dev/null and b/media/js-marker-cluster/images/pin.png differ diff --git a/media/js-marker-cluster/src/markerclusterer.js b/media/js-marker-cluster/src/markerclusterer.js new file mode 100644 index 0000000..554fcec --- /dev/null +++ b/media/js-marker-cluster/src/markerclusterer.js @@ -0,0 +1,1315 @@ +// ==ClosureCompiler== +// @compilation_level ADVANCED_OPTIMIZATIONS +// @externs_url https://raw.githubusercontent.com/google/closure-compiler/master/contrib/externs/maps/google_maps_api_v3.js +// ==/ClosureCompiler== + +/** + * @name MarkerClusterer for Google Maps v3 + * @version version 1.0 + * @author Luke Mahe + * @fileoverview + * The library creates and manages per-zoom-level clusters for large amounts of + * markers. + *
    + * This is a v3 implementation of the + * v2 MarkerClusterer. + */ + +/** + * @license + * Copyright 2010 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * A Marker Clusterer that clusters markers. + * + * @param {google.maps.Map} map The Google map to attach to. + * @param {Array.=} opt_markers Optional markers to add to + * the cluster. + * @param {Object=} opt_options support the following options: + * 'gridSize': (number) The grid size of a cluster in pixels. + * 'maxZoom': (number) The maximum zoom level that a marker can be part of a + * cluster. + * 'zoomOnClick': (boolean) Whether the default behaviour of clicking on a + * cluster is to zoom into it. + * 'averageCenter': (boolean) Whether the center of each cluster should be + * the average of all markers in the cluster. + * 'minimumClusterSize': (number) The minimum number of markers to be in a + * cluster before the markers are hidden and a count + * is shown. + * 'styles': (object) An object that has style properties: + * 'url': (string) The image url. + * 'height': (number) The image height. + * 'width': (number) The image width. + * 'anchor': (Array) The anchor position of the label text. + * 'textColor': (string) The text color. + * 'textSize': (number) The text size. + * 'backgroundPosition': (string) The position of the backgound x, y. + * 'iconAnchor': (Array) The anchor position of the icon x, y. + * @constructor + * @extends google.maps.OverlayView + */ +function MarkerClusterer(map, opt_markers, opt_options) { + // MarkerClusterer implements google.maps.OverlayView interface. We use the + // extend function to extend MarkerClusterer with google.maps.OverlayView + // because it might not always be available when the code is defined so we + // look for it at the last possible moment. If it doesn't exist now then + // there is no point going ahead :) + this.extend(MarkerClusterer, google.maps.OverlayView); + this.map_ = map; + + /** + * @type {Array.} + * @private + */ + this.markers_ = []; + + /** + * @type {Array.} + */ + this.clusters_ = []; + + this.sizes = [53, 56, 66, 78, 90]; + + /** + * @private + */ + this.styles_ = []; + + /** + * @type {boolean} + * @private + */ + this.ready_ = false; + + var options = opt_options || {}; + + /** + * @type {number} + * @private + */ + this.gridSize_ = options['gridSize'] || 60; + + /** + * @private + */ + this.minClusterSize_ = options['minimumClusterSize'] || 2; + + + /** + * @type {?number} + * @private + */ + this.maxZoom_ = options['maxZoom'] || null; + + this.styles_ = options['styles'] || []; + + /** + * @type {string} + * @private + */ + this.imagePath_ = options['imagePath'] || + this.MARKER_CLUSTER_IMAGE_PATH_; + + /** + * @type {string} + * @private + */ + this.imageExtension_ = options['imageExtension'] || + this.MARKER_CLUSTER_IMAGE_EXTENSION_; + + /** + * @type {boolean} + * @private + */ + this.zoomOnClick_ = true; + + if (options['zoomOnClick'] != undefined) { + this.zoomOnClick_ = options['zoomOnClick']; + } + + /** + * @type {boolean} + * @private + */ + this.averageCenter_ = false; + + if (options['averageCenter'] != undefined) { + this.averageCenter_ = options['averageCenter']; + } + + this.setupStyles_(); + + this.setMap(map); + + /** + * @type {number} + * @private + */ + this.prevZoom_ = this.map_.getZoom(); + + // Add the map event listeners + var that = this; + google.maps.event.addListener(this.map_, 'zoom_changed', function() { + var zoom = that.map_.getZoom(); + + if (that.prevZoom_ != zoom) { + that.prevZoom_ = zoom; + that.resetViewport(); + } + }); + + google.maps.event.addListener(this.map_, 'idle', function() { + that.redraw(); + }); + + // Finally, add the markers + if (opt_markers && opt_markers.length) { + this.addMarkers(opt_markers, false); + } +} + + +/** + * The marker cluster image path. + * + * @type {string} + * @private + */ +MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_ = '../images/m'; + + +/** + * The marker cluster image path. + * + * @type {string} + * @private + */ +MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_ = 'png'; + + +/** + * Extends a objects prototype by anothers. + * + * @param {Object} obj1 The object to be extended. + * @param {Object} obj2 The object to extend with. + * @return {Object} The new extended object. + * @ignore + */ +MarkerClusterer.prototype.extend = function(obj1, obj2) { + return (function(object) { + for (var property in object.prototype) { + this.prototype[property] = object.prototype[property]; + } + return this; + }).apply(obj1, [obj2]); +}; + + +/** + * Implementaion of the interface method. + * @ignore + */ +MarkerClusterer.prototype.onAdd = function() { + this.setReady_(true); +}; + +/** + * Implementaion of the interface method. + * @ignore + */ +MarkerClusterer.prototype.draw = function() {}; + +/** + * Sets up the styles object. + * + * @private + */ +MarkerClusterer.prototype.setupStyles_ = function() { + if (this.styles_.length) { + return; + } + + for (var i = 0, size; size = this.sizes[i]; i++) { + this.styles_.push({ + url: this.imagePath_ + (i + 1) + '.' + this.imageExtension_, + height: size, + width: size + }); + } +}; + +/** + * Fit the map to the bounds of the markers in the clusterer. + */ +MarkerClusterer.prototype.fitMapToMarkers = function() { + var markers = this.getMarkers(); + var bounds = new google.maps.LatLngBounds(); + for (var i = 0, marker; marker = markers[i]; i++) { + bounds.extend(marker.getPosition()); + } + + this.map_.fitBounds(bounds); +}; + + +/** + * Sets the styles. + * + * @param {Object} styles The style to set. + */ +MarkerClusterer.prototype.setStyles = function(styles) { + this.styles_ = styles; +}; + + +/** + * Gets the styles. + * + * @return {Object} The styles object. + */ +MarkerClusterer.prototype.getStyles = function() { + return this.styles_; +}; + + +/** + * Whether zoom on click is set. + * + * @return {boolean} True if zoomOnClick_ is set. + */ +MarkerClusterer.prototype.isZoomOnClick = function() { + return this.zoomOnClick_; +}; + +/** + * Whether average center is set. + * + * @return {boolean} True if averageCenter_ is set. + */ +MarkerClusterer.prototype.isAverageCenter = function() { + return this.averageCenter_; +}; + + +/** + * Returns the array of markers in the clusterer. + * + * @return {Array.} The markers. + */ +MarkerClusterer.prototype.getMarkers = function() { + return this.markers_; +}; + + +/** + * Returns the number of markers in the clusterer + * + * @return {Number} The number of markers. + */ +MarkerClusterer.prototype.getTotalMarkers = function() { + return this.markers_.length; +}; + + +/** + * Sets the max zoom for the clusterer. + * + * @param {number} maxZoom The max zoom level. + */ +MarkerClusterer.prototype.setMaxZoom = function(maxZoom) { + this.maxZoom_ = maxZoom; +}; + + +/** + * Gets the max zoom for the clusterer. + * + * @return {number} The max zoom level. + */ +MarkerClusterer.prototype.getMaxZoom = function() { + return this.maxZoom_; +}; + + +/** + * The function for calculating the cluster icon image. + * + * @param {Array.} markers The markers in the clusterer. + * @param {number} numStyles The number of styles available. + * @return {Object} A object properties: 'text' (string) and 'index' (number). + * @private + */ +MarkerClusterer.prototype.calculator_ = function(markers, numStyles) { + var index = 0; + var count = markers.length; + var dv = count; + while (dv !== 0) { + dv = parseInt(dv / 10, 10); + index++; + } + + index = Math.min(index, numStyles); + return { + text: count, + index: index + }; +}; + + +/** + * Set the calculator function. + * + * @param {function(Array, number)} calculator The function to set as the + * calculator. The function should return a object properties: + * 'text' (string) and 'index' (number). + * + */ +MarkerClusterer.prototype.setCalculator = function(calculator) { + this.calculator_ = calculator; +}; + + +/** + * Get the calculator function. + * + * @return {function(Array, number)} the calculator function. + */ +MarkerClusterer.prototype.getCalculator = function() { + return this.calculator_; +}; + + +/** + * Add an array of markers to the clusterer. + * + * @param {Array.} markers The markers to add. + * @param {boolean=} opt_nodraw Whether to redraw the clusters. + */ +MarkerClusterer.prototype.addMarkers = function(markers, opt_nodraw) { + for (var i = 0, marker; marker = markers[i]; i++) { + this.pushMarkerTo_(marker); + } + if (!opt_nodraw) { + this.redraw(); + } +}; + + +/** + * Pushes a marker to the clusterer. + * + * @param {google.maps.Marker} marker The marker to add. + * @private + */ +MarkerClusterer.prototype.pushMarkerTo_ = function(marker) { + marker.isAdded = false; + if (marker['draggable']) { + // If the marker is draggable add a listener so we update the clusters on + // the drag end. + var that = this; + google.maps.event.addListener(marker, 'dragend', function() { + marker.isAdded = false; + that.repaint(); + }); + } + this.markers_.push(marker); +}; + + +/** + * Adds a marker to the clusterer and redraws if needed. + * + * @param {google.maps.Marker} marker The marker to add. + * @param {boolean=} opt_nodraw Whether to redraw the clusters. + */ +MarkerClusterer.prototype.addMarker = function(marker, opt_nodraw) { + this.pushMarkerTo_(marker); + if (!opt_nodraw) { + this.redraw(); + } +}; + + +/** + * Removes a marker and returns true if removed, false if not + * + * @param {google.maps.Marker} marker The marker to remove + * @return {boolean} Whether the marker was removed or not + * @private + */ +MarkerClusterer.prototype.removeMarker_ = function(marker) { + var index = -1; + if (this.markers_.indexOf) { + index = this.markers_.indexOf(marker); + } else { + for (var i = 0, m; m = this.markers_[i]; i++) { + if (m == marker) { + index = i; + break; + } + } + } + + if (index == -1) { + // Marker is not in our list of markers. + return false; + } + + marker.setMap(null); + + this.markers_.splice(index, 1); + + return true; +}; + + +/** + * Remove a marker from the cluster. + * + * @param {google.maps.Marker} marker The marker to remove. + * @param {boolean=} opt_nodraw Optional boolean to force no redraw. + * @return {boolean} True if the marker was removed. + */ +MarkerClusterer.prototype.removeMarker = function(marker, opt_nodraw) { + var removed = this.removeMarker_(marker); + + if (!opt_nodraw && removed) { + this.resetViewport(); + this.redraw(); + return true; + } else { + return false; + } +}; + + +/** + * Removes an array of markers from the cluster. + * + * @param {Array.} markers The markers to remove. + * @param {boolean=} opt_nodraw Optional boolean to force no redraw. + */ +MarkerClusterer.prototype.removeMarkers = function(markers, opt_nodraw) { + var removed = false; + + for (var i = 0, marker; marker = markers[i]; i++) { + var r = this.removeMarker_(marker); + removed = removed || r; + } + + if (!opt_nodraw && removed) { + this.resetViewport(); + this.redraw(); + return true; + } +}; + + +/** + * Sets the clusterer's ready state. + * + * @param {boolean} ready The state. + * @private + */ +MarkerClusterer.prototype.setReady_ = function(ready) { + if (!this.ready_) { + this.ready_ = ready; + this.createClusters_(); + } +}; + + +/** + * Returns the number of clusters in the clusterer. + * + * @return {number} The number of clusters. + */ +MarkerClusterer.prototype.getTotalClusters = function() { + return this.clusters_.length; +}; + + +/** + * Returns the google map that the clusterer is associated with. + * + * @return {google.maps.Map} The map. + */ +MarkerClusterer.prototype.getMap = function() { + return this.map_; +}; + + +/** + * Sets the google map that the clusterer is associated with. + * + * @param {google.maps.Map} map The map. + */ +MarkerClusterer.prototype.setMap = function(map) { + this.map_ = map; +}; + + +/** + * Returns the size of the grid. + * + * @return {number} The grid size. + */ +MarkerClusterer.prototype.getGridSize = function() { + return this.gridSize_; +}; + + +/** + * Sets the size of the grid. + * + * @param {number} size The grid size. + */ +MarkerClusterer.prototype.setGridSize = function(size) { + this.gridSize_ = size; +}; + + +/** + * Returns the min cluster size. + * + * @return {number} The grid size. + */ +MarkerClusterer.prototype.getMinClusterSize = function() { + return this.minClusterSize_; +}; + +/** + * Sets the min cluster size. + * + * @param {number} size The grid size. + */ +MarkerClusterer.prototype.setMinClusterSize = function(size) { + this.minClusterSize_ = size; +}; + + +/** + * Extends a bounds object by the grid size. + * + * @param {google.maps.LatLngBounds} bounds The bounds to extend. + * @return {google.maps.LatLngBounds} The extended bounds. + */ +MarkerClusterer.prototype.getExtendedBounds = function(bounds) { + var projection = this.getProjection(); + + // Turn the bounds into latlng. + var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), + bounds.getNorthEast().lng()); + var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), + bounds.getSouthWest().lng()); + + // Convert the points to pixels and the extend out by the grid size. + var trPix = projection.fromLatLngToDivPixel(tr); + trPix.x += this.gridSize_; + trPix.y -= this.gridSize_; + + var blPix = projection.fromLatLngToDivPixel(bl); + blPix.x -= this.gridSize_; + blPix.y += this.gridSize_; + + // Convert the pixel points back to LatLng + var ne = projection.fromDivPixelToLatLng(trPix); + var sw = projection.fromDivPixelToLatLng(blPix); + + // Extend the bounds to contain the new bounds. + bounds.extend(ne); + bounds.extend(sw); + + return bounds; +}; + + +/** + * Determins if a marker is contained in a bounds. + * + * @param {google.maps.Marker} marker The marker to check. + * @param {google.maps.LatLngBounds} bounds The bounds to check against. + * @return {boolean} True if the marker is in the bounds. + * @private + */ +MarkerClusterer.prototype.isMarkerInBounds_ = function(marker, bounds) { + return bounds.contains(marker.getPosition()); +}; + + +/** + * Clears all clusters and markers from the clusterer. + */ +MarkerClusterer.prototype.clearMarkers = function() { + this.resetViewport(true); + + // Set the markers a empty array. + this.markers_ = []; +}; + + +/** + * Clears all existing clusters and recreates them. + * @param {boolean} opt_hide To also hide the marker. + */ +MarkerClusterer.prototype.resetViewport = function(opt_hide) { + // Remove all the clusters + for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { + cluster.remove(); + } + + // Reset the markers to not be added and to be invisible. + for (var i = 0, marker; marker = this.markers_[i]; i++) { + marker.isAdded = false; + if (opt_hide) { + marker.setMap(null); + } + } + + this.clusters_ = []; +}; + +/** + * + */ +MarkerClusterer.prototype.repaint = function() { + var oldClusters = this.clusters_.slice(); + this.clusters_.length = 0; + this.resetViewport(); + this.redraw(); + + // Remove the old clusters. + // Do it in a timeout so the other clusters have been drawn first. + window.setTimeout(function() { + for (var i = 0, cluster; cluster = oldClusters[i]; i++) { + cluster.remove(); + } + }, 0); +}; + + +/** + * Redraws the clusters. + */ +MarkerClusterer.prototype.redraw = function() { + this.createClusters_(); +}; + + +/** + * Calculates the distance between two latlng locations in km. + * @see http://www.movable-type.co.uk/scripts/latlong.html + * + * @param {google.maps.LatLng} p1 The first lat lng point. + * @param {google.maps.LatLng} p2 The second lat lng point. + * @return {number} The distance between the two points in km. + * @private +*/ +MarkerClusterer.prototype.distanceBetweenPoints_ = function(p1, p2) { + if (!p1 || !p2) { + return 0; + } + + var R = 6371; // Radius of the Earth in km + var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; + var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; + var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * + Math.sin(dLon / 2) * Math.sin(dLon / 2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + var d = R * c; + return d; +}; + + +/** + * Add a marker to a cluster, or creates a new cluster. + * + * @param {google.maps.Marker} marker The marker to add. + * @private + */ +MarkerClusterer.prototype.addToClosestCluster_ = function(marker) { + var distance = 40000; // Some large number + var clusterToAddTo = null; + var pos = marker.getPosition(); + for (var i = 0, cluster; cluster = this.clusters_[i]; i++) { + var center = cluster.getCenter(); + if (center) { + var d = this.distanceBetweenPoints_(center, marker.getPosition()); + if (d < distance) { + distance = d; + clusterToAddTo = cluster; + } + } + } + + if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { + clusterToAddTo.addMarker(marker); + } else { + var cluster = new Cluster(this); + cluster.addMarker(marker); + this.clusters_.push(cluster); + } +}; + + +/** + * Creates the clusters. + * + * @private + */ +MarkerClusterer.prototype.createClusters_ = function() { + if (!this.ready_) { + return; + } + + // Get our current map view bounds. + // Create a new bounds object so we don't affect the map. + var mapBounds = new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(), + this.map_.getBounds().getNorthEast()); + var bounds = this.getExtendedBounds(mapBounds); + + for (var i = 0, marker; marker = this.markers_[i]; i++) { + if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) { + this.addToClosestCluster_(marker); + } + } +}; + + +/** + * A cluster that contains markers. + * + * @param {MarkerClusterer} markerClusterer The markerclusterer that this + * cluster is associated with. + * @constructor + * @ignore + */ +function Cluster(markerClusterer) { + this.markerClusterer_ = markerClusterer; + this.map_ = markerClusterer.getMap(); + this.gridSize_ = markerClusterer.getGridSize(); + this.minClusterSize_ = markerClusterer.getMinClusterSize(); + this.averageCenter_ = markerClusterer.isAverageCenter(); + this.center_ = null; + this.markers_ = []; + this.bounds_ = null; + this.clusterIcon_ = new ClusterIcon(this, markerClusterer.getStyles(), + markerClusterer.getGridSize()); +} + +/** + * Determins if a marker is already added to the cluster. + * + * @param {google.maps.Marker} marker The marker to check. + * @return {boolean} True if the marker is already added. + */ +Cluster.prototype.isMarkerAlreadyAdded = function(marker) { + if (this.markers_.indexOf) { + return this.markers_.indexOf(marker) != -1; + } else { + for (var i = 0, m; m = this.markers_[i]; i++) { + if (m == marker) { + return true; + } + } + } + return false; +}; + + +/** + * Add a marker the cluster. + * + * @param {google.maps.Marker} marker The marker to add. + * @return {boolean} True if the marker was added. + */ +Cluster.prototype.addMarker = function(marker) { + if (this.isMarkerAlreadyAdded(marker)) { + return false; + } + + if (!this.center_) { + this.center_ = marker.getPosition(); + this.calculateBounds_(); + } else { + if (this.averageCenter_) { + var l = this.markers_.length + 1; + var lat = (this.center_.lat() * (l-1) + marker.getPosition().lat()) / l; + var lng = (this.center_.lng() * (l-1) + marker.getPosition().lng()) / l; + this.center_ = new google.maps.LatLng(lat, lng); + this.calculateBounds_(); + } + } + + marker.isAdded = true; + this.markers_.push(marker); + + var len = this.markers_.length; + if (len < this.minClusterSize_ && marker.getMap() != this.map_) { + // Min cluster size not reached so show the marker. + marker.setMap(this.map_); + } + + if (len == this.minClusterSize_) { + // Hide the markers that were showing. + for (var i = 0; i < len; i++) { + this.markers_[i].setMap(null); + } + } + + if (len >= this.minClusterSize_) { + marker.setMap(null); + } + + this.updateIcon(); + return true; +}; + + +/** + * Returns the marker clusterer that the cluster is associated with. + * + * @return {MarkerClusterer} The associated marker clusterer. + */ +Cluster.prototype.getMarkerClusterer = function() { + return this.markerClusterer_; +}; + + +/** + * Returns the bounds of the cluster. + * + * @return {google.maps.LatLngBounds} the cluster bounds. + */ +Cluster.prototype.getBounds = function() { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + var markers = this.getMarkers(); + for (var i = 0, marker; marker = markers[i]; i++) { + bounds.extend(marker.getPosition()); + } + return bounds; +}; + + +/** + * Removes the cluster + */ +Cluster.prototype.remove = function() { + this.clusterIcon_.remove(); + this.markers_.length = 0; + delete this.markers_; +}; + + +/** + * Returns the center of the cluster. + * + * @return {number} The cluster center. + */ +Cluster.prototype.getSize = function() { + return this.markers_.length; +}; + + +/** + * Returns the center of the cluster. + * + * @return {Array.} The cluster center. + */ +Cluster.prototype.getMarkers = function() { + return this.markers_; +}; + + +/** + * Returns the center of the cluster. + * + * @return {google.maps.LatLng} The cluster center. + */ +Cluster.prototype.getCenter = function() { + return this.center_; +}; + + +/** + * Calculated the extended bounds of the cluster with the grid. + * + * @private + */ +Cluster.prototype.calculateBounds_ = function() { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); +}; + + +/** + * Determines if a marker lies in the clusters bounds. + * + * @param {google.maps.Marker} marker The marker to check. + * @return {boolean} True if the marker lies in the bounds. + */ +Cluster.prototype.isMarkerInClusterBounds = function(marker) { + return this.bounds_.contains(marker.getPosition()); +}; + + +/** + * Returns the map that the cluster is associated with. + * + * @return {google.maps.Map} The map. + */ +Cluster.prototype.getMap = function() { + return this.map_; +}; + + +/** + * Updates the cluster icon + */ +Cluster.prototype.updateIcon = function() { + var zoom = this.map_.getZoom(); + var mz = this.markerClusterer_.getMaxZoom(); + + if (mz && zoom > mz) { + // The zoom is greater than our max zoom so show all the markers in cluster. + for (var i = 0, marker; marker = this.markers_[i]; i++) { + marker.setMap(this.map_); + } + return; + } + + if (this.markers_.length < this.minClusterSize_) { + // Min cluster size not yet reached. + this.clusterIcon_.hide(); + return; + } + + var numStyles = this.markerClusterer_.getStyles().length; + var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); + this.clusterIcon_.setCenter(this.center_); + this.clusterIcon_.setSums(sums); + this.clusterIcon_.show(); +}; + + +/** + * A cluster icon + * + * @param {Cluster} cluster The cluster to be associated with. + * @param {Object} styles An object that has style properties: + * 'url': (string) The image url. + * 'height': (number) The image height. + * 'width': (number) The image width. + * 'anchor': (Array) The anchor position of the label text. + * 'textColor': (string) The text color. + * 'textSize': (number) The text size. + * 'backgroundPosition: (string) The background postition x, y. + * @param {number=} opt_padding Optional padding to apply to the cluster icon. + * @constructor + * @extends google.maps.OverlayView + * @ignore + */ +function ClusterIcon(cluster, styles, opt_padding) { + cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); + + this.styles_ = styles; + this.padding_ = opt_padding || 0; + this.cluster_ = cluster; + this.center_ = null; + this.map_ = cluster.getMap(); + this.div_ = null; + this.sums_ = null; + this.visible_ = false; + + this.setMap(this.map_); +} + + +/** + * Triggers the clusterclick event and zoom's if the option is set. + * + * @param {google.maps.MouseEvent} event The event to propagate + */ +ClusterIcon.prototype.triggerClusterClick = function(event) { + var markerClusterer = this.cluster_.getMarkerClusterer(); + + // Trigger the clusterclick event. + google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster_, event); + + if (markerClusterer.isZoomOnClick()) { + // Zoom into the cluster. + this.map_.fitBounds(this.cluster_.getBounds()); + } +}; + + +/** + * Adding the cluster icon to the dom. + * @ignore + */ +ClusterIcon.prototype.onAdd = function() { + this.div_ = document.createElement('DIV'); + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + this.div_.innerHTML = this.sums_.text; + } + + var panes = this.getPanes(); + panes.overlayMouseTarget.appendChild(this.div_); + + var that = this; + var isDragging = false; + google.maps.event.addDomListener(this.div_, 'click', function(event) { + // Only perform click when not preceded by a drag + if (!isDragging) { + that.triggerClusterClick(event); + } + }); + google.maps.event.addDomListener(this.div_, 'mousedown', function() { + isDragging = false; + }); + google.maps.event.addDomListener(this.div_, 'mousemove', function() { + isDragging = true; + }); +}; + + +/** + * Returns the position to place the div dending on the latlng. + * + * @param {google.maps.LatLng} latlng The position in latlng. + * @return {google.maps.Point} The position in pixels. + * @private + */ +ClusterIcon.prototype.getPosFromLatLng_ = function(latlng) { + var pos = this.getProjection().fromLatLngToDivPixel(latlng); + + if (typeof this.iconAnchor_ === 'object' && this.iconAnchor_.length === 2) { + pos.x -= this.iconAnchor_[0]; + pos.y -= this.iconAnchor_[1]; + } else { + pos.x -= parseInt(this.width_ / 2, 10); + pos.y -= parseInt(this.height_ / 2, 10); + } + return pos; +}; + + +/** + * Draw the icon. + * @ignore + */ +ClusterIcon.prototype.draw = function() { + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.top = pos.y + 'px'; + this.div_.style.left = pos.x + 'px'; + } +}; + + +/** + * Hide the icon. + */ +ClusterIcon.prototype.hide = function() { + if (this.div_) { + this.div_.style.display = 'none'; + } + this.visible_ = false; +}; + + +/** + * Position and show the icon. + */ +ClusterIcon.prototype.show = function() { + if (this.div_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + this.div_.style.display = ''; + } + this.visible_ = true; +}; + + +/** + * Remove the icon from the map + */ +ClusterIcon.prototype.remove = function() { + this.setMap(null); +}; + + +/** + * Implementation of the onRemove interface. + * @ignore + */ +ClusterIcon.prototype.onRemove = function() { + if (this.div_ && this.div_.parentNode) { + this.hide(); + this.div_.parentNode.removeChild(this.div_); + this.div_ = null; + } +}; + + +/** + * Set the sums of the icon. + * + * @param {Object} sums The sums containing: + * 'text': (string) The text to display in the icon. + * 'index': (number) The style index of the icon. + */ +ClusterIcon.prototype.setSums = function(sums) { + this.sums_ = sums; + this.text_ = sums.text; + this.index_ = sums.index; + if (this.div_) { + this.div_.innerHTML = sums.text; + } + + this.useStyle(); +}; + + +/** + * Sets the icon to the the styles. + */ +ClusterIcon.prototype.useStyle = function() { + var index = Math.max(0, this.sums_.index - 1); + index = Math.min(this.styles_.length - 1, index); + var style = this.styles_[index]; + this.url_ = style['url']; + this.height_ = style['height']; + this.width_ = style['width']; + this.textColor_ = style['textColor']; + this.anchor_ = style['anchor']; + this.textSize_ = style['textSize']; + this.backgroundPosition_ = style['backgroundPosition']; + this.iconAnchor_ = style['iconAnchor']; +}; + + +/** + * Sets the center of the icon. + * + * @param {google.maps.LatLng} center The latlng to set as the center. + */ +ClusterIcon.prototype.setCenter = function(center) { + this.center_ = center; +}; + + +/** + * Create the css text based on the position of the icon. + * + * @param {google.maps.Point} pos The position. + * @return {string} The css style text. + */ +ClusterIcon.prototype.createCss = function(pos) { + var style = []; + style.push('background-image:url(' + this.url_ + ');'); + var backgroundPosition = this.backgroundPosition_ ? this.backgroundPosition_ : '0 0'; + style.push('background-position:' + backgroundPosition + ';'); + + if (typeof this.anchor_ === 'object') { + if (typeof this.anchor_[0] === 'number' && this.anchor_[0] > 0 && + this.anchor_[0] < this.height_) { + style.push('height:' + (this.height_ - this.anchor_[0]) + + 'px; padding-top:' + this.anchor_[0] + 'px;'); + } else if (typeof this.anchor_[0] === 'number' && this.anchor_[0] < 0 && + -this.anchor_[0] < this.height_) { + style.push('height:' + this.height_ + 'px; line-height:' + (this.height_ + this.anchor_[0]) + + 'px;'); + } else { + style.push('height:' + this.height_ + 'px; line-height:' + this.height_ + + 'px;'); + } + if (typeof this.anchor_[1] === 'number' && this.anchor_[1] > 0 && + this.anchor_[1] < this.width_) { + style.push('width:' + (this.width_ - this.anchor_[1]) + + 'px; padding-left:' + this.anchor_[1] + 'px;'); + } else { + style.push('width:' + this.width_ + 'px; text-align:center;'); + } + } else { + style.push('height:' + this.height_ + 'px; line-height:' + + this.height_ + 'px; width:' + this.width_ + 'px; text-align:center;'); + } + + var txtColor = this.textColor_ ? this.textColor_ : 'black'; + var txtSize = this.textSize_ ? this.textSize_ : 11; + + style.push('cursor:pointer; top:' + pos.y + 'px; left:' + + pos.x + 'px; color:' + txtColor + '; position:absolute; font-size:' + + txtSize + 'px; font-family:Arial,sans-serif; font-weight:bold'); + return style.join(''); +}; + + +// Export Symbols for Closure +// If you are not going to compile with closure then you can remove the +// code below. +window['MarkerClusterer'] = MarkerClusterer; +MarkerClusterer.prototype['addMarker'] = MarkerClusterer.prototype.addMarker; +MarkerClusterer.prototype['addMarkers'] = MarkerClusterer.prototype.addMarkers; +MarkerClusterer.prototype['clearMarkers'] = + MarkerClusterer.prototype.clearMarkers; +MarkerClusterer.prototype['fitMapToMarkers'] = + MarkerClusterer.prototype.fitMapToMarkers; +MarkerClusterer.prototype['getCalculator'] = + MarkerClusterer.prototype.getCalculator; +MarkerClusterer.prototype['getGridSize'] = + MarkerClusterer.prototype.getGridSize; +MarkerClusterer.prototype['getExtendedBounds'] = + MarkerClusterer.prototype.getExtendedBounds; +MarkerClusterer.prototype['getMap'] = MarkerClusterer.prototype.getMap; +MarkerClusterer.prototype['getMarkers'] = MarkerClusterer.prototype.getMarkers; +MarkerClusterer.prototype['getMaxZoom'] = MarkerClusterer.prototype.getMaxZoom; +MarkerClusterer.prototype['getStyles'] = MarkerClusterer.prototype.getStyles; +MarkerClusterer.prototype['getTotalClusters'] = + MarkerClusterer.prototype.getTotalClusters; +MarkerClusterer.prototype['getTotalMarkers'] = + MarkerClusterer.prototype.getTotalMarkers; +MarkerClusterer.prototype['redraw'] = MarkerClusterer.prototype.redraw; +MarkerClusterer.prototype['removeMarker'] = + MarkerClusterer.prototype.removeMarker; +MarkerClusterer.prototype['removeMarkers'] = + MarkerClusterer.prototype.removeMarkers; +MarkerClusterer.prototype['resetViewport'] = + MarkerClusterer.prototype.resetViewport; +MarkerClusterer.prototype['repaint'] = + MarkerClusterer.prototype.repaint; +MarkerClusterer.prototype['setCalculator'] = + MarkerClusterer.prototype.setCalculator; +MarkerClusterer.prototype['setGridSize'] = + MarkerClusterer.prototype.setGridSize; +MarkerClusterer.prototype['setMaxZoom'] = + MarkerClusterer.prototype.setMaxZoom; +MarkerClusterer.prototype['onAdd'] = MarkerClusterer.prototype.onAdd; +MarkerClusterer.prototype['draw'] = MarkerClusterer.prototype.draw; + +Cluster.prototype['getCenter'] = Cluster.prototype.getCenter; +Cluster.prototype['getSize'] = Cluster.prototype.getSize; +Cluster.prototype['getMarkers'] = Cluster.prototype.getMarkers; + +ClusterIcon.prototype['onAdd'] = ClusterIcon.prototype.onAdd; +ClusterIcon.prototype['draw'] = ClusterIcon.prototype.draw; +ClusterIcon.prototype['onRemove'] = ClusterIcon.prototype.onRemove; diff --git a/media/js/jquery.json.min.js b/media/js/jquery.json.min.js new file mode 100644 index 0000000..74e44f7 --- /dev/null +++ b/media/js/jquery.json.min.js @@ -0,0 +1,2 @@ +/*! jQuery JSON plugin v2.5.1 */ +!function($){"use strict";var escape=/["\\\x00-\x1f\x7f-\x9f]/g,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},hasOwn=Object.prototype.hasOwnProperty;$.toJSON="object"==typeof JSON&&JSON.stringify?JSON.stringify:function(a){if(null===a)return"null";var b,c,d,e,f=$.type(a);if("undefined"===f)return void 0;if("number"===f||"boolean"===f)return String(a);if("string"===f)return $.quoteString(a);if("function"==typeof a.toJSON)return $.toJSON(a.toJSON());if("date"===f){var g=a.getUTCMonth()+1,h=a.getUTCDate(),i=a.getUTCFullYear(),j=a.getUTCHours(),k=a.getUTCMinutes(),l=a.getUTCSeconds(),m=a.getUTCMilliseconds();return 10>g&&(g="0"+g),10>h&&(h="0"+h),10>j&&(j="0"+j),10>k&&(k="0"+k),10>l&&(l="0"+l),100>m&&(m="0"+m),10>m&&(m="0"+m),'"'+i+"-"+g+"-"+h+"T"+j+":"+k+":"+l+"."+m+'Z"'}if(b=[],$.isArray(a)){for(c=0;c + */ + +/* global ActiveXObject: false */ +/* jshint browser: true */ + +(function() { + 'use strict'; + + var + /* jStorage version */ + JSTORAGE_VERSION = '0.4.12', + + /* detect a dollar object or create one if not found */ + $ = window.jQuery || window.$ || (window.$ = {}), + + /* check for a JSON handling support */ + JSON = { + parse: window.JSON && (window.JSON.parse || window.JSON.decode) || + String.prototype.evalJSON && function(str) { + return String(str).evalJSON(); + } || + $.parseJSON || + $.evalJSON, + stringify: Object.toJSON || + window.JSON && (window.JSON.stringify || window.JSON.encode) || + $.toJSON + }; + + // Break if no JSON support was found + if (typeof JSON.parse !== 'function' || typeof JSON.stringify !== 'function') { + throw new Error('No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page'); + } + + var + /* This is the object, that holds the cached values */ + _storage = { + __jstorage_meta: { + CRC32: {} + } + }, + + /* Actual browser storage (localStorage or globalStorage['domain']) */ + _storage_service = { + jStorage: '{}' + }, + + /* DOM element for older IE versions, holds userData behavior */ + _storage_elm = null, + + /* How much space does the storage take */ + _storage_size = 0, + + /* which backend is currently used */ + _backend = false, + + /* onchange observers */ + _observers = {}, + + /* timeout to wait after onchange event */ + _observer_timeout = false, + + /* last update time */ + _observer_update = 0, + + /* pubsub observers */ + _pubsub_observers = {}, + + /* skip published items older than current timestamp */ + _pubsub_last = +new Date(), + + /* Next check for TTL */ + _ttl_timeout, + + /** + * XML encoding and decoding as XML nodes can't be JSON'ized + * XML nodes are encoded and decoded if the node is the value to be saved + * but not if it's as a property of another object + * Eg. - + * $.jStorage.set('key', xmlNode); // IS OK + * $.jStorage.set('key', {xml: xmlNode}); // NOT OK + */ + _XMLService = { + + /** + * Validates a XML node to be XML + * based on jQuery.isXML function + */ + isXML: function(elm) { + var documentElement = (elm ? elm.ownerDocument || elm : 0).documentElement; + return documentElement ? documentElement.nodeName !== 'HTML' : false; + }, + + /** + * Encodes a XML node to string + * based on http://www.mercurytide.co.uk/news/article/issues-when-working-ajax/ + */ + encode: function(xmlNode) { + if (!this.isXML(xmlNode)) { + return false; + } + try { // Mozilla, Webkit, Opera + return new XMLSerializer().serializeToString(xmlNode); + } catch (E1) { + try { // IE + return xmlNode.xml; + } catch (E2) {} + } + return false; + }, + + /** + * Decodes a XML node from string + * loosely based on http://outwestmedia.com/jquery-plugins/xmldom/ + */ + decode: function(xmlString) { + var dom_parser = ('DOMParser' in window && (new DOMParser()).parseFromString) || + (window.ActiveXObject && function(_xmlString) { + var xml_doc = new ActiveXObject('Microsoft.XMLDOM'); + xml_doc.async = 'false'; + xml_doc.loadXML(_xmlString); + return xml_doc; + }), + resultXML; + if (!dom_parser) { + return false; + } + resultXML = dom_parser.call('DOMParser' in window && (new DOMParser()) || window, xmlString, 'text/xml'); + return this.isXML(resultXML) ? resultXML : false; + } + }; + + + ////////////////////////// PRIVATE METHODS //////////////////////// + + /** + * Initialization function. Detects if the browser supports DOM Storage + * or userData behavior and behaves accordingly. + */ + function _init() { + /* Check if browser supports localStorage */ + var localStorageReallyWorks = false; + if ('localStorage' in window) { + try { + window.localStorage.setItem('_tmptest', 'tmpval'); + localStorageReallyWorks = true; + window.localStorage.removeItem('_tmptest'); + } catch (BogusQuotaExceededErrorOnIos5) { + // Thanks be to iOS5 Private Browsing mode which throws + // QUOTA_EXCEEDED_ERRROR DOM Exception 22. + } + } + + if (localStorageReallyWorks) { + try { + if (window.localStorage) { + _storage_service = window.localStorage; + _backend = 'localStorage'; + _observer_update = _storage_service.jStorage_update; + } + } catch (E3) { /* Firefox fails when touching localStorage and cookies are disabled */ } + } + /* Check if browser supports globalStorage */ + else if ('globalStorage' in window) { + try { + if (window.globalStorage) { + if (window.location.hostname == 'localhost') { + _storage_service = window.globalStorage['localhost.localdomain']; + } else { + _storage_service = window.globalStorage[window.location.hostname]; + } + _backend = 'globalStorage'; + _observer_update = _storage_service.jStorage_update; + } + } catch (E4) { /* Firefox fails when touching localStorage and cookies are disabled */ } + } + /* Check if browser supports userData behavior */ + else { + _storage_elm = document.createElement('link'); + if (_storage_elm.addBehavior) { + + /* Use a DOM element to act as userData storage */ + _storage_elm.style.behavior = 'url(#default#userData)'; + + /* userData element needs to be inserted into the DOM! */ + document.getElementsByTagName('head')[0].appendChild(_storage_elm); + + try { + _storage_elm.load('jStorage'); + } catch (E) { + // try to reset cache + _storage_elm.setAttribute('jStorage', '{}'); + _storage_elm.save('jStorage'); + _storage_elm.load('jStorage'); + } + + var data = '{}'; + try { + data = _storage_elm.getAttribute('jStorage'); + } catch (E5) {} + + try { + _observer_update = _storage_elm.getAttribute('jStorage_update'); + } catch (E6) {} + + _storage_service.jStorage = data; + _backend = 'userDataBehavior'; + } else { + _storage_elm = null; + return; + } + } + + // Load data from storage + _load_storage(); + + // remove dead keys + _handleTTL(); + + // start listening for changes + _setupObserver(); + + // initialize publish-subscribe service + _handlePubSub(); + + // handle cached navigation + if ('addEventListener' in window) { + window.addEventListener('pageshow', function(event) { + if (event.persisted) { + _storageObserver(); + } + }, false); + } + } + + /** + * Reload data from storage when needed + */ + function _reloadData() { + var data = '{}'; + + if (_backend == 'userDataBehavior') { + _storage_elm.load('jStorage'); + + try { + data = _storage_elm.getAttribute('jStorage'); + } catch (E5) {} + + try { + _observer_update = _storage_elm.getAttribute('jStorage_update'); + } catch (E6) {} + + _storage_service.jStorage = data; + } + + _load_storage(); + + // remove dead keys + _handleTTL(); + + _handlePubSub(); + } + + /** + * Sets up a storage change observer + */ + function _setupObserver() { + if (_backend == 'localStorage' || _backend == 'globalStorage') { + if ('addEventListener' in window) { + window.addEventListener('storage', _storageObserver, false); + } else { + document.attachEvent('onstorage', _storageObserver); + } + } else if (_backend == 'userDataBehavior') { + setInterval(_storageObserver, 1000); + } + } + + /** + * Fired on any kind of data change, needs to check if anything has + * really been changed + */ + function _storageObserver() { + var updateTime; + // cumulate change notifications with timeout + clearTimeout(_observer_timeout); + _observer_timeout = setTimeout(function() { + + if (_backend == 'localStorage' || _backend == 'globalStorage') { + updateTime = _storage_service.jStorage_update; + } else if (_backend == 'userDataBehavior') { + _storage_elm.load('jStorage'); + try { + updateTime = _storage_elm.getAttribute('jStorage_update'); + } catch (E5) {} + } + + if (updateTime && updateTime != _observer_update) { + _observer_update = updateTime; + _checkUpdatedKeys(); + } + + }, 25); + } + + /** + * Reloads the data and checks if any keys are changed + */ + function _checkUpdatedKeys() { + var oldCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32)), + newCrc32List; + + _reloadData(); + newCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32)); + + var key, + updated = [], + removed = []; + + for (key in oldCrc32List) { + if (oldCrc32List.hasOwnProperty(key)) { + if (!newCrc32List[key]) { + removed.push(key); + continue; + } + if (oldCrc32List[key] != newCrc32List[key] && String(oldCrc32List[key]).substr(0, 2) == '2.') { + updated.push(key); + } + } + } + + for (key in newCrc32List) { + if (newCrc32List.hasOwnProperty(key)) { + if (!oldCrc32List[key]) { + updated.push(key); + } + } + } + + _fireObservers(updated, 'updated'); + _fireObservers(removed, 'deleted'); + } + + /** + * Fires observers for updated keys + * + * @param {Array|String} keys Array of key names or a key + * @param {String} action What happened with the value (updated, deleted, flushed) + */ + function _fireObservers(keys, action) { + keys = [].concat(keys || []); + + var i, j, len, jlen; + + if (action == 'flushed') { + keys = []; + for (var key in _observers) { + if (_observers.hasOwnProperty(key)) { + keys.push(key); + } + } + action = 'deleted'; + } + for (i = 0, len = keys.length; i < len; i++) { + if (_observers[keys[i]]) { + for (j = 0, jlen = _observers[keys[i]].length; j < jlen; j++) { + _observers[keys[i]][j](keys[i], action); + } + } + if (_observers['*']) { + for (j = 0, jlen = _observers['*'].length; j < jlen; j++) { + _observers['*'][j](keys[i], action); + } + } + } + } + + /** + * Publishes key change to listeners + */ + function _publishChange() { + var updateTime = (+new Date()).toString(); + + if (_backend == 'localStorage' || _backend == 'globalStorage') { + try { + _storage_service.jStorage_update = updateTime; + } catch (E8) { + // safari private mode has been enabled after the jStorage initialization + _backend = false; + } + } else if (_backend == 'userDataBehavior') { + _storage_elm.setAttribute('jStorage_update', updateTime); + _storage_elm.save('jStorage'); + } + + _storageObserver(); + } + + /** + * Loads the data from the storage based on the supported mechanism + */ + function _load_storage() { + /* if jStorage string is retrieved, then decode it */ + if (_storage_service.jStorage) { + try { + _storage = JSON.parse(String(_storage_service.jStorage)); + } catch (E6) { + _storage_service.jStorage = '{}'; + } + } else { + _storage_service.jStorage = '{}'; + } + _storage_size = _storage_service.jStorage ? String(_storage_service.jStorage).length : 0; + + if (!_storage.__jstorage_meta) { + _storage.__jstorage_meta = {}; + } + if (!_storage.__jstorage_meta.CRC32) { + _storage.__jstorage_meta.CRC32 = {}; + } + } + + /** + * This functions provides the 'save' mechanism to store the jStorage object + */ + function _save() { + _dropOldEvents(); // remove expired events + try { + _storage_service.jStorage = JSON.stringify(_storage); + // If userData is used as the storage engine, additional + if (_storage_elm) { + _storage_elm.setAttribute('jStorage', _storage_service.jStorage); + _storage_elm.save('jStorage'); + } + _storage_size = _storage_service.jStorage ? String(_storage_service.jStorage).length : 0; + } catch (E7) { /* probably cache is full, nothing is saved this way*/ } + } + + /** + * Function checks if a key is set and is string or numberic + * + * @param {String} key Key name + */ + function _checkKey(key) { + if (typeof key != 'string' && typeof key != 'number') { + throw new TypeError('Key name must be string or numeric'); + } + if (key == '__jstorage_meta') { + throw new TypeError('Reserved key name'); + } + return true; + } + + /** + * Removes expired keys + */ + function _handleTTL() { + var curtime, i, TTL, CRC32, nextExpire = Infinity, + changed = false, + deleted = []; + + clearTimeout(_ttl_timeout); + + if (!_storage.__jstorage_meta || typeof _storage.__jstorage_meta.TTL != 'object') { + // nothing to do here + return; + } + + curtime = +new Date(); + TTL = _storage.__jstorage_meta.TTL; + + CRC32 = _storage.__jstorage_meta.CRC32; + for (i in TTL) { + if (TTL.hasOwnProperty(i)) { + if (TTL[i] <= curtime) { + delete TTL[i]; + delete CRC32[i]; + delete _storage[i]; + changed = true; + deleted.push(i); + } else if (TTL[i] < nextExpire) { + nextExpire = TTL[i]; + } + } + } + + // set next check + if (nextExpire != Infinity) { + _ttl_timeout = setTimeout(_handleTTL, Math.min(nextExpire - curtime, 0x7FFFFFFF)); + } + + // save changes + if (changed) { + _save(); + _publishChange(); + _fireObservers(deleted, 'deleted'); + } + } + + /** + * Checks if there's any events on hold to be fired to listeners + */ + function _handlePubSub() { + var i, len; + if (!_storage.__jstorage_meta.PubSub) { + return; + } + var pubelm, + _pubsubCurrent = _pubsub_last, + needFired = []; + + for (i = len = _storage.__jstorage_meta.PubSub.length - 1; i >= 0; i--) { + pubelm = _storage.__jstorage_meta.PubSub[i]; + if (pubelm[0] > _pubsub_last) { + _pubsubCurrent = pubelm[0]; + needFired.unshift(pubelm); + } + } + + for (i = needFired.length - 1; i >= 0; i--) { + _fireSubscribers(needFired[i][1], needFired[i][2]); + } + + _pubsub_last = _pubsubCurrent; + } + + /** + * Fires all subscriber listeners for a pubsub channel + * + * @param {String} channel Channel name + * @param {Mixed} payload Payload data to deliver + */ + function _fireSubscribers(channel, payload) { + if (_pubsub_observers[channel]) { + for (var i = 0, len = _pubsub_observers[channel].length; i < len; i++) { + // send immutable data that can't be modified by listeners + try { + _pubsub_observers[channel][i](channel, JSON.parse(JSON.stringify(payload))); + } catch (E) {} + } + } + } + + /** + * Remove old events from the publish stream (at least 2sec old) + */ + function _dropOldEvents() { + if (!_storage.__jstorage_meta.PubSub) { + return; + } + + var retire = +new Date() - 2000; + + for (var i = 0, len = _storage.__jstorage_meta.PubSub.length; i < len; i++) { + if (_storage.__jstorage_meta.PubSub[i][0] <= retire) { + // deleteCount is needed for IE6 + _storage.__jstorage_meta.PubSub.splice(i, _storage.__jstorage_meta.PubSub.length - i); + break; + } + } + + if (!_storage.__jstorage_meta.PubSub.length) { + delete _storage.__jstorage_meta.PubSub; + } + + } + + /** + * Publish payload to a channel + * + * @param {String} channel Channel name + * @param {Mixed} payload Payload to send to the subscribers + */ + function _publish(channel, payload) { + if (!_storage.__jstorage_meta) { + _storage.__jstorage_meta = {}; + } + if (!_storage.__jstorage_meta.PubSub) { + _storage.__jstorage_meta.PubSub = []; + } + + _storage.__jstorage_meta.PubSub.unshift([+new Date(), channel, payload]); + + _save(); + _publishChange(); + } + + + /** + * JS Implementation of MurmurHash2 + * + * SOURCE: https://github.com/garycourt/murmurhash-js (MIT licensed) + * + * @author Gary Court + * @see http://github.com/garycourt/murmurhash-js + * @author Austin Appleby + * @see http://sites.google.com/site/murmurhash/ + * + * @param {string} str ASCII only + * @param {number} seed Positive integer only + * @return {number} 32-bit positive integer hash + */ + + function murmurhash2_32_gc(str, seed) { + var + l = str.length, + h = seed ^ l, + i = 0, + k; + + while (l >= 4) { + k = + ((str.charCodeAt(i) & 0xff)) | + ((str.charCodeAt(++i) & 0xff) << 8) | + ((str.charCodeAt(++i) & 0xff) << 16) | + ((str.charCodeAt(++i) & 0xff) << 24); + + k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16)); + k ^= k >>> 24; + k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16)); + + h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k; + + l -= 4; + ++i; + } + + switch (l) { + case 3: + h ^= (str.charCodeAt(i + 2) & 0xff) << 16; + /* falls through */ + case 2: + h ^= (str.charCodeAt(i + 1) & 0xff) << 8; + /* falls through */ + case 1: + h ^= (str.charCodeAt(i) & 0xff); + h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)); + } + + h ^= h >>> 13; + h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)); + h ^= h >>> 15; + + return h >>> 0; + } + + ////////////////////////// PUBLIC INTERFACE ///////////////////////// + + $.jStorage = { + /* Version number */ + version: JSTORAGE_VERSION, + + /** + * Sets a key's value. + * + * @param {String} key Key to set. If this value is not set or not + * a string an exception is raised. + * @param {Mixed} value Value to set. This can be any value that is JSON + * compatible (Numbers, Strings, Objects etc.). + * @param {Object} [options] - possible options to use + * @param {Number} [options.TTL] - optional TTL value, in milliseconds + * @return {Mixed} the used value + */ + set: function(key, value, options) { + _checkKey(key); + + options = options || {}; + + // undefined values are deleted automatically + if (typeof value == 'undefined') { + this.deleteKey(key); + return value; + } + + if (_XMLService.isXML(value)) { + value = { + _is_xml: true, + xml: _XMLService.encode(value) + }; + } else if (typeof value == 'function') { + return undefined; // functions can't be saved! + } else if (value && typeof value == 'object') { + // clone the object before saving to _storage tree + value = JSON.parse(JSON.stringify(value)); + } + + _storage[key] = value; + + _storage.__jstorage_meta.CRC32[key] = '2.' + murmurhash2_32_gc(JSON.stringify(value), 0x9747b28c); + + this.setTTL(key, options.TTL || 0); // also handles saving and _publishChange + + _fireObservers(key, 'updated'); + return value; + }, + + /** + * Looks up a key in cache + * + * @param {String} key - Key to look up. + * @param {mixed} def - Default value to return, if key didn't exist. + * @return {Mixed} the key value, default value or null + */ + get: function(key, def) { + _checkKey(key); + if (key in _storage) { + if (_storage[key] && typeof _storage[key] == 'object' && _storage[key]._is_xml) { + return _XMLService.decode(_storage[key].xml); + } else { + return _storage[key]; + } + } + return typeof(def) == 'undefined' ? null : def; + }, + + /** + * Deletes a key from cache. + * + * @param {String} key - Key to delete. + * @return {Boolean} true if key existed or false if it didn't + */ + deleteKey: function(key) { + _checkKey(key); + if (key in _storage) { + delete _storage[key]; + // remove from TTL list + if (typeof _storage.__jstorage_meta.TTL == 'object' && + key in _storage.__jstorage_meta.TTL) { + delete _storage.__jstorage_meta.TTL[key]; + } + + delete _storage.__jstorage_meta.CRC32[key]; + + _save(); + _publishChange(); + _fireObservers(key, 'deleted'); + return true; + } + return false; + }, + + /** + * Sets a TTL for a key, or remove it if ttl value is 0 or below + * + * @param {String} key - key to set the TTL for + * @param {Number} ttl - TTL timeout in milliseconds + * @return {Boolean} true if key existed or false if it didn't + */ + setTTL: function(key, ttl) { + var curtime = +new Date(); + _checkKey(key); + ttl = Number(ttl) || 0; + if (key in _storage) { + + if (!_storage.__jstorage_meta.TTL) { + _storage.__jstorage_meta.TTL = {}; + } + + // Set TTL value for the key + if (ttl > 0) { + _storage.__jstorage_meta.TTL[key] = curtime + ttl; + } else { + delete _storage.__jstorage_meta.TTL[key]; + } + + _save(); + + _handleTTL(); + + _publishChange(); + return true; + } + return false; + }, + + /** + * Gets remaining TTL (in milliseconds) for a key or 0 when no TTL has been set + * + * @param {String} key Key to check + * @return {Number} Remaining TTL in milliseconds + */ + getTTL: function(key) { + var curtime = +new Date(), + ttl; + _checkKey(key); + if (key in _storage && _storage.__jstorage_meta.TTL && _storage.__jstorage_meta.TTL[key]) { + ttl = _storage.__jstorage_meta.TTL[key] - curtime; + return ttl || 0; + } + return 0; + }, + + /** + * Deletes everything in cache. + * + * @return {Boolean} Always true + */ + flush: function() { + _storage = { + __jstorage_meta: { + CRC32: {} + } + }; + _save(); + _publishChange(); + _fireObservers(null, 'flushed'); + return true; + }, + + /** + * Returns a read-only copy of _storage + * + * @return {Object} Read-only copy of _storage + */ + storageObj: function() { + function F() {} + F.prototype = _storage; + return new F(); + }, + + /** + * Returns an index of all used keys as an array + * ['key1', 'key2',..'keyN'] + * + * @return {Array} Used keys + */ + index: function() { + var index = [], + i; + for (i in _storage) { + if (_storage.hasOwnProperty(i) && i != '__jstorage_meta') { + index.push(i); + } + } + return index; + }, + + /** + * How much space in bytes does the storage take? + * + * @return {Number} Storage size in chars (not the same as in bytes, + * since some chars may take several bytes) + */ + storageSize: function() { + return _storage_size; + }, + + /** + * Which backend is currently in use? + * + * @return {String} Backend name + */ + currentBackend: function() { + return _backend; + }, + + /** + * Test if storage is available + * + * @return {Boolean} True if storage can be used + */ + storageAvailable: function() { + return !!_backend; + }, + + /** + * Register change listeners + * + * @param {String} key Key name + * @param {Function} callback Function to run when the key changes + */ + listenKeyChange: function(key, callback) { + _checkKey(key); + if (!_observers[key]) { + _observers[key] = []; + } + _observers[key].push(callback); + }, + + /** + * Remove change listeners + * + * @param {String} key Key name to unregister listeners against + * @param {Function} [callback] If set, unregister the callback, if not - unregister all + */ + stopListening: function(key, callback) { + _checkKey(key); + + if (!_observers[key]) { + return; + } + + if (!callback) { + delete _observers[key]; + return; + } + + for (var i = _observers[key].length - 1; i >= 0; i--) { + if (_observers[key][i] == callback) { + _observers[key].splice(i, 1); + } + } + }, + + /** + * Subscribe to a Publish/Subscribe event stream + * + * @param {String} channel Channel name + * @param {Function} callback Function to run when the something is published to the channel + */ + subscribe: function(channel, callback) { + channel = (channel || '').toString(); + if (!channel) { + throw new TypeError('Channel not defined'); + } + if (!_pubsub_observers[channel]) { + _pubsub_observers[channel] = []; + } + _pubsub_observers[channel].push(callback); + }, + + /** + * Publish data to an event stream + * + * @param {String} channel Channel name + * @param {Mixed} payload Payload to deliver + */ + publish: function(channel, payload) { + channel = (channel || '').toString(); + if (!channel) { + throw new TypeError('Channel not defined'); + } + + _publish(channel, payload); + }, + + /** + * Reloads the data from browser storage + */ + reInit: function() { + _reloadData(); + }, + + /** + * Removes reference from global objects and saves it as jStorage + * + * @param {Boolean} option if needed to save object as simple 'jStorage' in windows context + */ + noConflict: function(saveInGlobal) { + delete window.$.jStorage; + + if (saveInGlobal) { + window.jStorage = this; + } + + return this; + } + }; + + // Initialize jStorage + _init(); + +})(); \ No newline at end of file diff --git a/media/js/jstorage.min.js b/media/js/jstorage.min.js new file mode 100644 index 0000000..eb39375 --- /dev/null +++ b/media/js/jstorage.min.js @@ -0,0 +1,16 @@ +(function(){function C(){var a="{}";if("userDataBehavior"==f){g.load("jStorage");try{a=g.getAttribute("jStorage")}catch(b){}try{r=g.getAttribute("jStorage_update")}catch(c){}h.jStorage=a}D();x();E()}function u(){var a;clearTimeout(F);F=setTimeout(function(){if("localStorage"==f||"globalStorage"==f)a=h.jStorage_update;else if("userDataBehavior"==f){g.load("jStorage");try{a=g.getAttribute("jStorage_update")}catch(b){}}if(a&&a!=r){r=a;var l=p.parse(p.stringify(c.__jstorage_meta.CRC32)),k;C();k=p.parse(p.stringify(c.__jstorage_meta.CRC32)); +var d,n=[],e=[];for(d in l)l.hasOwnProperty(d)&&(k[d]?l[d]!=k[d]&&"2."==String(l[d]).substr(0,2)&&n.push(d):e.push(d));for(d in k)k.hasOwnProperty(d)&&(l[d]||n.push(d));s(n,"updated");s(e,"deleted")}},25)}function s(a,b){a=[].concat(a||[]);var c,k,d,n;if("flushed"==b){a=[];for(c in m)m.hasOwnProperty(c)&&a.push(c);b="deleted"}c=0;for(d=a.length;cA&&(l=b[0],k.unshift(b));for(a=k.length-1;0<=a;a--){b=k[a][1];var d=k[a][2];if(t[b])for(var n=0,e=t[b].length;n>>16)&65535)<<16),f^=f>>>24,f=1540483477*(f&65535)+((1540483477*(f>>>16)&65535)<<16),e=1540483477*(e&65535)+((1540483477*(e>>>16)&65535)<<16)^f,g-=4,++h;switch(g){case 3:e^=(d.charCodeAt(h+2)&255)<<16;case 2:e^= +(d.charCodeAt(h+1)&255)<<8;case 1:e^=d.charCodeAt(h)&255,e=1540483477*(e&65535)+((1540483477*(e>>>16)&65535)<<16)}e^=e>>>13;e=1540483477*(e&65535)+((1540483477*(e>>>16)&65535)<<16);k[a]="2."+((e^e>>>15)>>>0);this.setTTL(a,l.TTL||0);s(a,"updated");return b},get:function(a,b){q(a);return a in c?c[a]&&"object"==typeof c[a]&&c[a]._is_xml?B.decode(c[a].xml):c[a]:"undefined"==typeof b?null:b},deleteKey:function(a){q(a);return a in c?(delete c[a],"object"==typeof c.__jstorage_meta.TTL&&a in c.__jstorage_meta.TTL&& +delete c.__jstorage_meta.TTL[a],delete c.__jstorage_meta.CRC32[a],w(),v(),s(a,"deleted"),!0):!1},setTTL:function(a,b){var l=+new Date;q(a);b=Number(b)||0;return a in c?(c.__jstorage_meta.TTL||(c.__jstorage_meta.TTL={}),0[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]||""});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&(cap[1]==="pre"||cap[1]==="script"||cap[1]==="style"),text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(cap[0]):escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.text(escape(this.smartypants(cap[0])));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){if(!this.options.mangle)return text;var out="",l=text.length,i=0,ch;for(;i.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"
    "+(escaped?code:escape(code,true))+"\n
    "}return'
    '+(escaped?code:escape(code,true))+"\n
    \n"};Renderer.prototype.blockquote=function(quote){return"
    \n"+quote+"
    \n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"'+text+"\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"\n"};Renderer.prototype.listitem=function(text){return"
  • "+text+"
  • \n"};Renderer.prototype.paragraph=function(text){return"

    "+text+"

    \n"};Renderer.prototype.table=function(header,body){return"\n"+"\n"+header+"\n"+"\n"+body+"\n"+"
    \n"};Renderer.prototype.tablerow=function(content){return"
'+day.day.format("D")+'
',o+="",r=0;r"+e.weekdays[r]+"");for(o+="",o+="",r=0;r";for(var m=0;ms&&p.push("uk-datepicker-date-disabled uk-datepicker-table-muted"),i&&i>_.day&&p.push("uk-datepicker-date-disabled uk-datepicker-table-muted"),o+='"}o+=""}return o+="",o+="
'+_.day.format("D")+"
"}},boot:function(){t.$win.on("resize orientationchange",function(){a&&a.hide()}),t.$html.on("focus.datepicker.uikit","[data-uk-datepicker]",function(e){var n=t.$(this);if(!n.data("datepicker")){e.preventDefault();{t.datepicker(n,t.Utils.options(n.attr("data-uk-datepicker")))}n.trigger("focus")}}),t.$html.on("click.datepicker.uikit",function(n){var s=t.$(n.target);!a||s[0]==e[0]||s.data("datepicker")||s.parents(".uk-datepicker:first").length||a.hide()})},init:function(){if(!t.support.touch||"date"!=this.element.attr("type")||this.options.mobile){var s=this;this.current=this.element.val()?n(this.element.val(),this.options.format):n(),this.on("click focus",function(){a!==s&&s.pick(this.value?this.value:s.options.minDate?s.options.minDate:"")}).on("change",function(){s.element.val()&&!n(s.element.val(),s.options.format).isValid()&&s.element.val(n().format(s.options.format))}),e||(e=t.$('
'),e.on("click",".uk-datepicker-next, .uk-datepicker-previous, [data-date]",function(s){s.stopPropagation(),s.preventDefault();var i=t.$(this);return i.hasClass("uk-datepicker-date-disabled")?!1:(i.is("[data-date]")?(a.element.val(n(i.data("date")).format(a.options.format)).trigger("change"),e.hide(),a=!1):a.add(1*(i.hasClass("uk-datepicker-next")?1:-1),"months"),void 0)}),e.on("change",".update-picker-month, .update-picker-year",function(){var e=t.$(this);a[e.is(".update-picker-year")?"setYear":"setMonth"](Number(e.val()))}),e.appendTo("body"))}},pick:function(s){var i=this.element.offset(),r={left:i.left,right:""};this.current=s?n(s,this.options.format):n(),this.initdate=this.current.format("YYYY-MM-DD"),this.update(),"right"==t.langdirection&&(r.right=window.innerWidth-(r.left+this.element.outerWidth()),r.left="");var o=i.top-this.element.outerHeight()+this.element.height()-this.options.offsettop-e.outerHeight(),u=i.top+this.element.outerHeight()+this.options.offsettop;r.top=u,"top"==this.options.pos?r.top=o:"auto"==this.options.pos&&window.innerHeight-u-e.outerHeight()<0&&o>=0&&(r.top=o),e.css(r).show(),this.trigger("show.uk.datepicker"),a=this},add:function(t,e){this.current.add(t,e),this.update()},setMonth:function(t){this.current.month(t),this.update()},setYear:function(t){this.current.year(t),this.update()},update:function(){var t=this.getRows(this.current.year(),this.current.month()),n=this.options.template(t,this.options);e.html(n),this.trigger("update.uk.datepicker")},getRows:function(t,e){var a=this.options,s=n().format("YYYY-MM-DD"),i=[31,t%4===0&&t%100!==0||t%400===0?29:28,31,30,31,30,31,31,30,31,30,31][e],r=new Date(t,e,1).getDay(),o={month:e,year:t,weekdays:[],days:[]},u=[];o.weekdays=function(){for(var t=0,e=[];7>t;t++){for(var n=t+(a.weekstart||0);n>=7;)n-=7;e.push(a.i18n.weekdays[n])}return e}(),a.weekstart&&a.weekstart>0&&(r-=a.weekstart,0>r&&(r+=7));for(var c=i+r,d=c;d>7;)d-=7;c+=7-d;for(var l,h,f,m,_,p=0,y=0;c>p;p++)l=new Date(t,e,1+(p-r)),h=a.mindate&&la.maxdate,_=!(r>p||p>=i+r),l=n(l),f=this.initdate==l.format("YYYY-MM-DD"),m=s==l.format("YYYY-MM-DD"),u.push({selected:f,today:m,disabled:h,day:l,inmonth:_}),7===++y&&(o.days.push(u),u=[],y=0);return o},hide:function(){a&&a===this&&(e.hide(),a=!1,this.trigger("hide.uk.datepicker"))}}),n=function(t){function e(t,e,n){switch(arguments.length){case 2:return null!=t?t:e;case 3:return null!=t?t:null!=e?e:n;default:throw new Error("Implement me")}}function n(t,e){return Ye.call(t,e)}function a(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function s(t){ke.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function i(t,e){var n=!0;return h(function(){return n&&(s(t),n=!1),e.apply(this,arguments)},e)}function r(t,e){mn[t]||(s(e),mn[t]=!0)}function o(t,e){return function(n){return _(t.call(this,n),e)}}function u(t,e){return function(n){return this.localeData().ordinal(t.call(this,n),e)}}function c(){}function d(t,e){e!==!1&&F(t),f(this,t),this._d=new Date(+t._d)}function l(t){var e=v(t),n=e.year||0,a=e.quarter||0,s=e.month||0,i=e.week||0,r=e.day||0,o=e.hour||0,u=e.minute||0,c=e.second||0,d=e.millisecond||0;this._milliseconds=+d+1e3*c+6e4*u+36e5*o,this._days=+r+7*i,this._months=+s+3*a+12*n,this._data={},this._locale=ke.localeData(),this._bubble()}function h(t,e){for(var a in e)n(e,a)&&(t[a]=e[a]);return n(e,"toString")&&(t.toString=e.toString),n(e,"valueOf")&&(t.valueOf=e.valueOf),t}function f(t,e){var n,a,s;if("undefined"!=typeof e._isAMomentObject&&(t._isAMomentObject=e._isAMomentObject),"undefined"!=typeof e._i&&(t._i=e._i),"undefined"!=typeof e._f&&(t._f=e._f),"undefined"!=typeof e._l&&(t._l=e._l),"undefined"!=typeof e._strict&&(t._strict=e._strict),"undefined"!=typeof e._tzm&&(t._tzm=e._tzm),"undefined"!=typeof e._isUTC&&(t._isUTC=e._isUTC),"undefined"!=typeof e._offset&&(t._offset=e._offset),"undefined"!=typeof e._pf&&(t._pf=e._pf),"undefined"!=typeof e._locale&&(t._locale=e._locale),Fe.length>0)for(n in Fe)a=Fe[n],s=e[a],"undefined"!=typeof s&&(t[a]=s);return t}function m(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,n){for(var a=""+Math.abs(t),s=t>=0;a.lengtha;a++)(n&&t[a]!==e[a]||!n&&S(t[a])!==S(e[a]))&&r++;return r+i}function w(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=on[t]||un[e]||e}return t}function v(t){var e,a,s={};for(a in t)n(t,a)&&(e=w(a),e&&(s[e]=t[a]));return s}function b(e){var n,a;if(0===e.indexOf("week"))n=7,a="day";else{if(0!==e.indexOf("month"))return;n=12,a="month"}ke[e]=function(s,i){var r,o,u=ke._locale[e],c=[];if("number"==typeof s&&(i=s,s=t),o=function(t){var e=ke().utc().set(a,t);return u.call(ke._locale,e,s||"")},null!=i)return o(i);for(r=0;n>r;r++)c.push(o(r));return c}}function S(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=e>=0?Math.floor(e):Math.ceil(e)),n}function T(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function O(t,e,n){return oe(ke([t,11,31+e-n]),e,n).week}function W(t){return U(t)?366:365}function U(t){return t%4===0&&t%100!==0||t%400===0}function F(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[ve]<0||t._a[ve]>11?ve:t._a[be]<1||t._a[be]>T(t._a[we],t._a[ve])?be:t._a[Se]<0||t._a[Se]>23?Se:t._a[Te]<0||t._a[Te]>59?Te:t._a[Oe]<0||t._a[Oe]>59?Oe:t._a[We]<0||t._a[We]>999?We:-1,t._pf._overflowDayOfYear&&(we>e||e>be)&&(e=be),t._pf.overflow=e)}function G(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length)),t._isValid}function C(t){return t?t.toLowerCase().replace("_","-"):t}function z(t){for(var e,n,a,s,i=0;i0;){if(a=I(s.slice(0,e).join("-")))return a;if(n&&n.length>=e&&Y(s,n,!0)>=e-1)break;e--}i++}return null}function I(t){var e=null;if(!Ue[t]&&Ge)try{e=ke.locale(),require("./locale/"+t),ke.locale(e)}catch(n){}return Ue[t]}function H(t,e){return e._isUTC?ke(t).zone(e._offset||0):ke(t).local()}function x(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function L(t){var e,n,a=t.match(He);for(e=0,n=a.length;n>e;e++)a[e]=fn[a[e]]?fn[a[e]]:x(a[e]);return function(s){var i="";for(e=0;n>e;e++)i+=a[e]instanceof Function?a[e].call(s,t):a[e];return i}}function P(t,e){return t.isValid()?(e=A(e,t.localeData()),cn[e]||(cn[e]=L(e)),cn[e](t)):t.localeData().invalidDate()}function A(t,e){function n(t){return e.longDateFormat(t)||t}var a=5;for(xe.lastIndex=0;a>=0&&xe.test(t);)t=t.replace(xe,n),xe.lastIndex=0,a-=1;return t}function Z(t,e){var n,a=e._strict;switch(t){case"Q":return qe;case"DDDD":return Re;case"YYYY":case"GGGG":case"gggg":return a?Xe:Ae;case"Y":case"G":case"g":return Ke;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return a?Be:Ze;case"S":if(a)return qe;case"SS":if(a)return Qe;case"SSS":if(a)return Re;case"DDD":return Pe;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return je;case"a":case"A":return e._locale._meridiemParse;case"X":return Ve;case"Z":case"ZZ":return Ee;case"T":return $e;case"SSSS":return Ne;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return a?Qe:Le;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Le;case"Do":return Je;default:return n=new RegExp(R(Q(t.replace("\\","")),"i"))}}function N(t){t=t||"";var e=t.match(Ee)||[],n=e[e.length-1]||[],a=(n+"").match(sn)||["-",0,0],s=+(60*a[1])+S(a[2]);return"+"===a[0]?-s:s}function j(t,e,n){var a,s=n._a;switch(t){case"Q":null!=e&&(s[ve]=3*(S(e)-1));break;case"M":case"MM":null!=e&&(s[ve]=S(e)-1);break;case"MMM":case"MMMM":a=n._locale.monthsParse(e),null!=a?s[ve]=a:n._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(s[be]=S(e));break;case"Do":null!=e&&(s[be]=S(parseInt(e,10)));break;case"DDD":case"DDDD":null!=e&&(n._dayOfYear=S(e));break;case"YY":s[we]=ke.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":s[we]=S(e);break;case"a":case"A":n._isPm=n._locale.isPM(e);break;case"H":case"HH":case"h":case"hh":s[Se]=S(e);break;case"m":case"mm":s[Te]=S(e);break;case"s":case"ss":s[Oe]=S(e);break;case"S":case"SS":case"SSS":case"SSSS":s[We]=S(1e3*("0."+e));break;case"X":n._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=N(e);break;case"dd":case"ddd":case"dddd":a=n._locale.weekdaysParse(e),null!=a?(n._w=n._w||{},n._w.d=a):n._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(n._w=n._w||{},n._w[t]=S(e));break;case"gg":case"GG":n._w=n._w||{},n._w[t]=ke.parseTwoDigitYear(e)}}function E(t){var n,a,s,i,r,o,u;n=t._w,null!=n.GG||null!=n.W||null!=n.E?(r=1,o=4,a=e(n.GG,t._a[we],oe(ke(),1,4).year),s=e(n.W,1),i=e(n.E,1)):(r=t._locale._week.dow,o=t._locale._week.doy,a=e(n.gg,t._a[we],oe(ke(),r,o).year),s=e(n.w,1),null!=n.d?(i=n.d,r>i&&++s):i=null!=n.e?n.e+r:r),u=ue(a,s,i,o,r),t._a[we]=u.year,t._dayOfYear=u.dayOfYear}function $(t){var n,a,s,i,r=[];if(!t._d){for(s=J(t),t._w&&null==t._a[be]&&null==t._a[ve]&&E(t),t._dayOfYear&&(i=e(t._a[we],s[we]),t._dayOfYear>W(i)&&(t._pf._overflowDayOfYear=!0),a=ae(i,0,t._dayOfYear),t._a[ve]=a.getUTCMonth(),t._a[be]=a.getUTCDate()),n=0;3>n&&null==t._a[n];++n)t._a[n]=r[n]=s[n];for(;7>n;n++)t._a[n]=r[n]=null==t._a[n]?2===n?1:0:t._a[n];t._d=(t._useUTC?ae:ne).apply(null,r),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm)}}function V(t){var e;t._d||(e=v(t._i),t._a=[e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond],$(t))}function J(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function q(t){if(t._f===ke.ISO_8601)return B(t),void 0;t._a=[],t._pf.empty=!0;var e,n,a,s,i,r=""+t._i,o=r.length,u=0;for(a=A(t._f,t._locale).match(He)||[],e=0;e0&&t._pf.unusedInput.push(i),r=r.slice(r.indexOf(n)+n.length),u+=n.length),fn[s]?(n?t._pf.empty=!1:t._pf.unusedTokens.push(s),j(s,n,t)):t._strict&&!n&&t._pf.unusedTokens.push(s);t._pf.charsLeftOver=o-u,r.length>0&&t._pf.unusedInput.push(r),t._isPm&&t._a[Se]<12&&(t._a[Se]+=12),t._isPm===!1&&12===t._a[Se]&&(t._a[Se]=0),$(t),F(t)}function Q(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,a,s){return e||n||a||s})}function R(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function X(t){var e,n,s,i,r;if(0===t._f.length)return t._pf.invalidFormat=!0,t._d=new Date(0/0),void 0;for(i=0;ir)&&(s=r,n=e));h(t,n||e)}function B(t){var e,n,a=t._i,s=tn.exec(a);if(s){for(t._pf.iso=!0,e=0,n=nn.length;n>e;e++)if(nn[e][1].exec(a)){t._f=nn[e][0]+(s[6]||" ");break}for(e=0,n=an.length;n>e;e++)if(an[e][1].exec(a)){t._f+=an[e][0];break}a.match(Ee)&&(t._f+="Z"),q(t)}else t._isValid=!1}function K(t){B(t),t._isValid===!1&&(delete t._isValid,ke.createFromInputFallback(t))}function te(t,e){var n,a=[];for(n=0;nt&&o.setFullYear(t),o}function ae(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function se(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function ie(t,e,n,a,s){return s.relativeTime(e||1,!!n,t,a)}function re(t,e,n){var a=ke.duration(t).abs(),s=Me(a.as("s")),i=Me(a.as("m")),r=Me(a.as("h")),o=Me(a.as("d")),u=Me(a.as("M")),c=Me(a.as("y")),d=s0,d[4]=n,ie.apply({},d)}function oe(t,e,n){var a,s=n-e,i=n-t.day();return i>s&&(i-=7),s-7>i&&(i+=7),a=ke(t).add(i,"d"),{week:Math.ceil(a.dayOfYear()/7),year:a.year()}}function ue(t,e,n,a,s){var i,r,o=ae(t,0,1).getUTCDay();return o=0===o?7:o,n=null!=n?n:s,i=s-o+(o>a?7:0)-(s>o?7:0),r=7*(e-1)+(n-s)+i+1,{year:r>0?t:t-1,dayOfYear:r>0?r:W(t-1)+r}}function ce(e){var n=e._i,a=e._f;return e._locale=e._locale||ke.localeData(e._l),null===n||a===t&&""===n?ke.invalid({nullInput:!0}):("string"==typeof n&&(e._i=n=e._locale.preparse(n)),ke.isMoment(n)?new d(n,!0):(a?g(a)?X(e):q(e):ee(e),new d(e)))}function de(t,e){var n,a;if(1===e.length&&g(e[0])&&(e=e[0]),!e.length)return ke();for(n=e[0],a=1;a=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return S(this.milliseconds()/100)},SS:function(){return _(S(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(S(t/60),2)+":"+_(S(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(S(t/60),2)+_(S(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},mn={},_n=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];ln.length;)De=ln.pop(),fn[De+"o"]=u(fn[De],De);for(;hn.length;)De=hn.pop(),fn[De+De]=o(fn[De],2);fn.DDDD=o(fn.DDD,3),h(c.prototype,{set:function(t){var e,n;for(n in t)e=t[n],"function"==typeof e?this[n]=e:this["_"+n]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,n,a;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(n=ke.utc([2e3,e]),a="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[e]=new RegExp(a.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,n,a;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(n=ke([2e3,1]).day(e),a="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[e]=new RegExp(a.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var n=this._calendar[t];return"function"==typeof n?n.apply(e):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,n,a){var s=this._relativeTime[n];return"function"==typeof s?s(t,e,n,a):s.replace(/%d/i,t)},pastFuture:function(t,e){var n=this._relativeTime[t>0?"future":"past"];return"function"==typeof n?n(e):n.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return oe(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),ke=function(e,n,s,i){var r;return"boolean"==typeof s&&(i=s,s=t),r={},r._isAMomentObject=!0,r._i=e,r._f=n,r._l=s,r._strict=i,r._isUTC=!1,r._pf=a(),ce(r)},ke.suppressDeprecationWarnings=!1,ke.createFromInputFallback=i("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i)}),ke.min=function(){var t=[].slice.call(arguments,0);return de("isBefore",t)},ke.max=function(){var t=[].slice.call(arguments,0);return de("isAfter",t)},ke.utc=function(e,n,s,i){var r;return"boolean"==typeof s&&(i=s,s=t),r={},r._isAMomentObject=!0,r._useUTC=!0,r._isUTC=!0,r._l=s,r._i=e,r._f=n,r._strict=i,r._pf=a(),ce(r).utc()},ke.unix=function(t){return ke(1e3*t)},ke.duration=function(t,e){var a,s,i,r,o=t,u=null;return ke.isDuration(t)?o={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(o={},e?o[e]=t:o.milliseconds=t):(u=ze.exec(t))?(a="-"===u[1]?-1:1,o={y:0,d:S(u[be])*a,h:S(u[Se])*a,m:S(u[Te])*a,s:S(u[Oe])*a,ms:S(u[We])*a}):(u=Ie.exec(t))?(a="-"===u[1]?-1:1,i=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*a},o={y:i(u[2]),M:i(u[3]),d:i(u[4]),h:i(u[5]),m:i(u[6]),s:i(u[7]),w:i(u[8])}):"object"==typeof o&&("from"in o||"to"in o)&&(r=y(ke(o.from),ke(o.to)),o={},o.ms=r.milliseconds,o.M=r.months),s=new l(o),ke.isDuration(t)&&n(t,"_locale")&&(s._locale=t._locale),s},ke.version=ge,ke.defaultFormat=en,ke.ISO_8601=function(){},ke.momentProperties=Fe,ke.updateOffset=function(){},ke.relativeTimeThreshold=function(e,n){return dn[e]===t?!1:n===t?dn[e]:(dn[e]=n,!0)},ke.lang=i("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return ke.locale(t,e)}),ke.locale=function(t,e){var n;return t&&(n="undefined"!=typeof e?ke.defineLocale(t,e):ke.localeData(t),n&&(ke.duration._locale=ke._locale=n)),ke._locale._abbr},ke.defineLocale=function(t,e){return null!==e?(e.abbr=t,Ue[t]||(Ue[t]=new c),Ue[t].set(e),ke.locale(t),Ue[t]):(delete Ue[t],null)},ke.langData=i("moment.langData is deprecated. Use moment.localeData instead.",function(t){return ke.localeData(t)}),ke.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return ke._locale;if(!g(t)){if(e=I(t))return e;t=[t]}return z(t)},ke.isMoment=function(t){return t instanceof d||null!=t&&n(t,"_isAMomentObject")},ke.isDuration=function(t){return t instanceof l};for(De=_n.length-1;De>=0;--De)b(_n[De]);ke.normalizeUnits=function(t){return w(t)},ke.invalid=function(t){var e=ke.utc(0/0);return null!=t?h(e._pf,t):e._pf.userInvalidated=!0,e},ke.parseZone=function(){return ke.apply(null,arguments).parseZone()},ke.parseTwoDigitYear=function(t){return S(t)+(S(t)>68?1900:2e3)},h(ke.fn=d.prototype,{clone:function(){return ke(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=ke(this).utc();return 00:!1},parsingFlags:function(){return h({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._dateTzOffset(),"m")),this},format:function(t){var e=P(this,t||ke.defaultFormat);return this.localeData().postformat(e)},add:k(1,"add"),subtract:k(-1,"subtract"),diff:function(t,e,n){var a,s,i,r=H(t,this),o=6e4*(this.zone()-r.zone());return e=w(e),"year"===e||"month"===e?(a=432e5*(this.daysInMonth()+r.daysInMonth()),s=12*(this.year()-r.year())+(this.month()-r.month()),i=this-ke(this).startOf("month")-(r-ke(r).startOf("month")),i-=6e4*(this.zone()-ke(this).startOf("month").zone()-(r.zone()-ke(r).startOf("month").zone())),s+=i/a,"year"===e&&(s/=12)):(a=this-r,s="second"===e?a/1e3:"minute"===e?a/6e4:"hour"===e?a/36e5:"day"===e?(a-o)/864e5:"week"===e?(a-o)/6048e5:a),n?s:m(s)},from:function(t,e){return ke.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(ke(),t)},calendar:function(t){var e=t||ke(),n=H(e,this).startOf("day"),a=this.diff(n,"days",!0),s=-6>a?"sameElse":-1>a?"lastWeek":0>a?"lastDay":1>a?"sameDay":2>a?"nextDay":7>a?"nextWeek":"sameElse";return this.format(this.localeData().calendar(s,this))},isLeapYear:function(){return U(this.year())},isDST:function(){return this.zone()+t):+this.clone().startOf(e)>+ke(t).startOf(e)},isBefore:function(t,e){return e=w("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=ke.isMoment(t)?t:ke(t),+t>+this):+this.clone().startOf(e)<+ke(t).startOf(e)},isSame:function(t,e){return e=w(e||"millisecond"),"millisecond"===e?(t=ke.isMoment(t)?t:ke(t),+this===+t):+this.clone().startOf(e)===+H(t,this).startOf(e)},min:i("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(t){return t=ke.apply(null,arguments),this>t?this:t}),max:i("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=ke.apply(null,arguments),t>this?this:t}),zone:function(t,e){var n,a=this._offset||0;return null==t?this._isUTC?a:this._dateTzOffset():("string"==typeof t&&(t=N(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(n=this._dateTzOffset()),this._offset=t,this._isUTC=!0,null!=n&&this.subtract(n,"m"),a!==t&&(!e||this._changeInProgress?D(this,ke.duration(a-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,ke.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this -},hasAlignedHourOffset:function(t){return t=t?ke(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return T(this.year(),this.month())},dayOfYear:function(t){var e=Me((ke(this).startOf("day")-ke(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=oe(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=oe(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=oe(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return O(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return O(this.year(),t.dow,t.doy)},get:function(t){return t=w(t),this[t]()},set:function(t,e){return t=w(t),"function"==typeof this[t]&&this[t](e),this},locale:function(e){var n;return e===t?this._locale._abbr:(n=ke.localeData(e),null!=n&&(this._locale=n),this)},lang:i("moment().lang() is deprecated. Use moment().localeData() instead.",function(e){return e===t?this.localeData():this.locale(e)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),ke.fn.millisecond=ke.fn.milliseconds=me("Milliseconds",!1),ke.fn.second=ke.fn.seconds=me("Seconds",!1),ke.fn.minute=ke.fn.minutes=me("Minutes",!1),ke.fn.hour=ke.fn.hours=me("Hours",!0),ke.fn.date=me("Date",!0),ke.fn.dates=i("dates accessor is deprecated. Use date instead.",me("Date",!0)),ke.fn.year=me("FullYear",!0),ke.fn.years=i("years accessor is deprecated. Use year instead.",me("FullYear",!0)),ke.fn.days=ke.fn.day,ke.fn.months=ke.fn.month,ke.fn.weeks=ke.fn.week,ke.fn.isoWeeks=ke.fn.isoWeek,ke.fn.quarters=ke.fn.quarter,ke.fn.toJSON=ke.fn.toISOString,h(ke.duration.fn=l.prototype,{_bubble:function(){var t,e,n,a=this._milliseconds,s=this._days,i=this._months,r=this._data,o=0;r.milliseconds=a%1e3,t=m(a/1e3),r.seconds=t%60,e=m(t/60),r.minutes=e%60,n=m(e/60),r.hours=n%24,s+=m(n/24),o=m(_e(s)),s-=m(pe(o)),i+=m(s/30),s%=30,o+=m(i/12),i%=12,r.days=s,r.months=i,r.years=o},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return m(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*S(this._months/12)},humanize:function(t){var e=re(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var n=ke.duration(t,e);return this._milliseconds+=n._milliseconds,this._days+=n._days,this._months+=n._months,this._bubble(),this},subtract:function(t,e){var n=ke.duration(t,e);return this._milliseconds-=n._milliseconds,this._days-=n._days,this._months-=n._months,this._bubble(),this},get:function(t){return t=w(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,n;if(t=w(t),"month"===t||"year"===t)return e=this._days+this._milliseconds/864e5,n=this._months+12*_e(e),"month"===t?n:n/12;switch(e=this._days+pe(this._months/12),t){case"week":return e/7+this._milliseconds/6048e5;case"day":return e+this._milliseconds/864e5;case"hour":return 24*e+this._milliseconds/36e5;case"minute":return 24*e*60+this._milliseconds/6e4;case"second":return 24*e*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*e*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+t)}},lang:ke.fn.lang,locale:ke.fn.locale,toIsoString:i("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),n=Math.abs(this.days()),a=Math.abs(this.hours()),s=Math.abs(this.minutes()),i=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(n?n+"D":"")+(a||s||i?"T":"")+(a?a+"H":"")+(s?s+"M":"")+(i?i+"S":""):"P0D"},localeData:function(){return this._locale}}),ke.duration.fn.toString=ke.duration.fn.toISOString;for(De in rn)n(rn,De)&&ye(De.toLowerCase());return ke.duration.fn.asMilliseconds=function(){return this.as("ms")},ke.duration.fn.asSeconds=function(){return this.as("s")},ke.duration.fn.asMinutes=function(){return this.as("m")},ke.duration.fn.asHours=function(){return this.as("h")},ke.duration.fn.asDays=function(){return this.as("d")},ke.duration.fn.asWeeks=function(){return this.as("weeks")},ke.duration.fn.asMonths=function(){return this.as("M")},ke.duration.fn.asYears=function(){return this.as("y")},ke.locale("en",{ordinal:function(t){var e=t%10,n=1===S(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),ke}.call(this),t.Utils.moment=n,t.datepicker}); \ No newline at end of file +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-datepicker",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";var e,n,a=!1;return t.component("datepicker",{defaults:{mobile:!1,weekstart:1,i18n:{months:["January","February","March","April","May","June","July","August","September","October","November","December"],weekdays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},format:"YYYY-MM-DD",offsettop:5,maxDate:!1,minDate:!1,pos:"auto",container:"body",template:function(e,n){var a,s="";if(s+='
',s+='',s+='',t.formSelect){var i,r,o,u,c=(new Date).getFullYear(),d=[];for(a=0;a'+n.i18n.months[a]+""):d.push('");for(i=''+n.i18n.months[e.month]+'",d=[],o=e.minDate?e.minDate.year():c-50,u=e.maxDate?e.maxDate.year():c+20,a=o;u>=a;a++)a==e.year?d.push('"):d.push('");r=''+e.year+'",s+='
'+i+" "+r+"
"}else s+='
'+n.i18n.months[e.month]+" "+e.year+"
";for(s+="
",s+='',s+="",a=0;a"+e.weekdays[a]+"");for(s+="",s+="",a=0;a";for(var l=0;l'+h.day.format("D")+""}s+=""}return s+="",s+="
"}},boot:function(){t.$win.on("resize orientationchange",function(){a&&a.hide()}),t.$html.on("focus.datepicker.uikit","[data-uk-datepicker]",function(e){var n=t.$(this);n.data("datepicker")||(e.preventDefault(),t.datepicker(n,t.Utils.options(n.attr("data-uk-datepicker"))),n.trigger("focus"))}),t.$html.on("click focus","*",function(n){var s=t.$(n.target);!a||s[0]==e[0]||s.data("datepicker")||s.parents(".uk-datepicker:first").length||a.hide()})},init:function(){if(!t.support.touch||"date"!=this.element.attr("type")||this.options.mobile){var s=this;this.current=this.element.val()?n(this.element.val(),this.options.format):n(),this.on("click focus",function(){a!==s&&s.pick(this.value?this.value:"")}).on("change",function(){s.element.val()&&!n(s.element.val(),s.options.format).isValid()&&s.element.val(n().format(s.options.format))}),e||(e=t.$('
'),e.on("click",".uk-datepicker-next, .uk-datepicker-previous, [data-date]",function(e){e.stopPropagation(),e.preventDefault();var s=t.$(this);return s.hasClass("uk-datepicker-date-disabled")?!1:(s.is("[data-date]")?(a.current=n(s.data("date")),a.element.val(a.current.isValid()?a.current.format(a.options.format):null).trigger("change"),a.hide()):a.add(s.hasClass("uk-datepicker-next")?1:-1,"months"),void 0)}),e.on("change",".update-picker-month, .update-picker-year",function(){var e=t.$(this);a[e.is(".update-picker-year")?"setYear":"setMonth"](Number(e.val()))}),e.appendTo(this.options.container))}},pick:function(s){var i=this.element.offset(),r={left:i.left,right:""};this.current=isNaN(s)?n(s,this.options.format):n(),this.initdate=this.current.format("YYYY-MM-DD"),this.update(),"right"==t.langdirection&&(r.right=window.innerWidth-(r.left+this.element.outerWidth()),r.left="");var o=i.top-this.element.outerHeight()+this.element.height()-this.options.offsettop-e.outerHeight(),u=i.top+this.element.outerHeight()+this.options.offsettop;r.top=u,"top"==this.options.pos?r.top=o:"auto"==this.options.pos&&window.innerHeight-u-e.outerHeight()<0&&o>=0&&(r.top=o),e.css(r).show(),this.trigger("show.uk.datepicker"),a=this},add:function(t,e){this.current.add(t,e),this.update()},setMonth:function(t){this.current.month(t),this.update()},setYear:function(t){this.current.year(t),this.update()},update:function(){var t=this.getRows(this.current.year(),this.current.month()),n=this.options.template(t,this.options);e.html(n),this.trigger("update.uk.datepicker")},getRows:function(t,e){var a=this.options,s=n().format("YYYY-MM-DD"),i=[31,t%4===0&&t%100!==0||t%400===0?29:28,31,30,31,30,31,31,30,31,30,31][e],r=new Date(t,e,1,12).getDay(),o={month:e,year:t,weekdays:[],days:[],maxDate:!1,minDate:!1},u=[];a.maxDate!==!1&&(o.maxDate=isNaN(a.maxDate)?n(a.maxDate,a.format).startOf("day").hours(12):n().add(a.maxDate,"days").startOf("day").hours(12)),a.minDate!==!1&&(o.minDate=isNaN(a.minDate)?n(a.minDate,a.format).startOf("day").hours(12):n().add(a.minDate-1,"days").startOf("day").hours(12)),o.weekdays=function(){for(var t=0,e=[];7>t;t++){for(var n=t+(a.weekstart||0);n>=7;)n-=7;e.push(a.i18n.weekdays[n])}return e}(),a.weekstart&&a.weekstart>0&&(r-=a.weekstart,0>r&&(r+=7));for(var c=i+r,d=c;d>7;)d-=7;c+=7-d;for(var l,h,f,m,_,p=0,y=0;c>p;p++)l=new Date(t,e,1+(p-r),12),h=o.minDate&&o.minDate>l||o.maxDate&&l>o.maxDate,_=!(r>p||p>=i+r),l=n(l),f=this.initdate==l.format("YYYY-MM-DD"),m=s==l.format("YYYY-MM-DD"),u.push({selected:f,today:m,disabled:h,day:l,inmonth:_}),7===++y&&(o.days.push(u),u=[],y=0);return o},hide:function(){a&&a===this&&(e.hide(),a=!1,this.trigger("hide.uk.datepicker"))}}),n=function(t){function e(t,e,n){switch(arguments.length){case 2:return null!=t?t:e;case 3:return null!=t?t:null!=e?e:n;default:throw new Error("Implement me")}}function n(t,e){return Ye.call(t,e)}function a(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function s(t){De.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function i(t,e){var n=!0;return h(function(){return n&&(s(t),n=!1),e.apply(this,arguments)},e)}function r(t,e){mn[t]||(s(e),mn[t]=!0)}function o(t,e){return function(n){return _(t.call(this,n),e)}}function u(t,e){return function(n){return this.localeData().ordinal(t.call(this,n),e)}}function c(){}function d(t,e){e!==!1&&F(t),f(this,t),this._d=new Date(+t._d)}function l(t){var e=v(t),n=e.year||0,a=e.quarter||0,s=e.month||0,i=e.week||0,r=e.day||0,o=e.hour||0,u=e.minute||0,c=e.second||0,d=e.millisecond||0;this._milliseconds=+d+1e3*c+6e4*u+36e5*o,this._days=+r+7*i,this._months=+s+3*a+12*n,this._data={},this._locale=De.localeData(),this._bubble()}function h(t,e){for(var a in e)n(e,a)&&(t[a]=e[a]);return n(e,"toString")&&(t.toString=e.toString),n(e,"valueOf")&&(t.valueOf=e.valueOf),t}function f(t,e){var n,a,s;if("undefined"!=typeof e._isAMomentObject&&(t._isAMomentObject=e._isAMomentObject),"undefined"!=typeof e._i&&(t._i=e._i),"undefined"!=typeof e._f&&(t._f=e._f),"undefined"!=typeof e._l&&(t._l=e._l),"undefined"!=typeof e._strict&&(t._strict=e._strict),"undefined"!=typeof e._tzm&&(t._tzm=e._tzm),"undefined"!=typeof e._isUTC&&(t._isUTC=e._isUTC),"undefined"!=typeof e._offset&&(t._offset=e._offset),"undefined"!=typeof e._pf&&(t._pf=e._pf),"undefined"!=typeof e._locale&&(t._locale=e._locale),Fe.length>0)for(n in Fe)a=Fe[n],s=e[a],"undefined"!=typeof s&&(t[a]=s);return t}function m(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,n){for(var a=""+Math.abs(t),s=t>=0;a.lengtha;a++)(n&&t[a]!==e[a]||!n&&S(t[a])!==S(e[a]))&&r++;return r+i}function w(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=on[t]||un[e]||e}return t}function v(t){var e,a,s={};for(a in t)n(t,a)&&(e=w(a),e&&(s[e]=t[a]));return s}function b(e){var n,a;if(0===e.indexOf("week"))n=7,a="day";else{if(0!==e.indexOf("month"))return;n=12,a="month"}De[e]=function(s,i){var r,o,u=De._locale[e],c=[];if("number"==typeof s&&(i=s,s=t),o=function(t){var e=De().utc().set(a,t);return u.call(De._locale,e,s||"")},null!=i)return o(i);for(r=0;n>r;r++)c.push(o(r));return c}}function S(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=e>=0?Math.floor(e):Math.ceil(e)),n}function T(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function O(t,e,n){return oe(De([t,11,31+e-n]),e,n).week}function W(t){return U(t)?366:365}function U(t){return t%4===0&&t%100!==0||t%400===0}function F(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[ve]<0||t._a[ve]>11?ve:t._a[be]<1||t._a[be]>T(t._a[we],t._a[ve])?be:t._a[Se]<0||t._a[Se]>23?Se:t._a[Te]<0||t._a[Te]>59?Te:t._a[Oe]<0||t._a[Oe]>59?Oe:t._a[We]<0||t._a[We]>999?We:-1,t._pf._overflowDayOfYear&&(we>e||e>be)&&(e=be),t._pf.overflow=e)}function G(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length)),t._isValid}function C(t){return t?t.toLowerCase().replace("_","-"):t}function z(t){for(var e,n,a,s,i=0;i0;){if(a=x(s.slice(0,e).join("-")))return a;if(n&&n.length>=e&&Y(s,n,!0)>=e-1)break;e--}i++}return null}function x(t){var e=null;if(!Ue[t]&&Ge)try{e=De.locale(),require("./locale/"+t),De.locale(e)}catch(n){}return Ue[t]}function I(t,e){return e._isUTC?De(t).zone(e._offset||0):De(t).local()}function H(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function L(t){var e,n,a=t.match(Ie);for(e=0,n=a.length;n>e;e++)a[e]=fn[a[e]]?fn[a[e]]:H(a[e]);return function(s){var i="";for(e=0;n>e;e++)i+=a[e]instanceof Function?a[e].call(s,t):a[e];return i}}function P(t,e){return t.isValid()?(e=A(e,t.localeData()),cn[e]||(cn[e]=L(e)),cn[e](t)):t.localeData().invalidDate()}function A(t,e){function n(t){return e.longDateFormat(t)||t}var a=5;for(He.lastIndex=0;a>=0&&He.test(t);)t=t.replace(He,n),He.lastIndex=0,a-=1;return t}function N(t,e){var n,a=e._strict;switch(t){case"Q":return qe;case"DDDD":return Re;case"YYYY":case"GGGG":case"gggg":return a?Xe:Ae;case"Y":case"G":case"g":return Ke;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return a?Be:Ne;case"S":if(a)return qe;case"SS":if(a)return Qe;case"SSS":if(a)return Re;case"DDD":return Pe;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return je;case"a":case"A":return e._locale._meridiemParse;case"X":return Ve;case"Z":case"ZZ":return Ee;case"T":return $e;case"SSSS":return Ze;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return a?Qe:Le;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Le;case"Do":return Je;default:return n=new RegExp(R(Q(t.replace("\\","")),"i"))}}function Z(t){t=t||"";var e=t.match(Ee)||[],n=e[e.length-1]||[],a=(n+"").match(sn)||["-",0,0],s=+(60*a[1])+S(a[2]);return"+"===a[0]?-s:s}function j(t,e,n){var a,s=n._a;switch(t){case"Q":null!=e&&(s[ve]=3*(S(e)-1));break;case"M":case"MM":null!=e&&(s[ve]=S(e)-1);break;case"MMM":case"MMMM":a=n._locale.monthsParse(e),null!=a?s[ve]=a:n._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(s[be]=S(e));break;case"Do":null!=e&&(s[be]=S(parseInt(e,10)));break;case"DDD":case"DDDD":null!=e&&(n._dayOfYear=S(e));break;case"YY":s[we]=De.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":s[we]=S(e);break;case"a":case"A":n._isPm=n._locale.isPM(e);break;case"H":case"HH":case"h":case"hh":s[Se]=S(e);break;case"m":case"mm":s[Te]=S(e);break;case"s":case"ss":s[Oe]=S(e);break;case"S":case"SS":case"SSS":case"SSSS":s[We]=S(1e3*("0."+e));break;case"X":n._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":n._useUTC=!0,n._tzm=Z(e);break;case"dd":case"ddd":case"dddd":a=n._locale.weekdaysParse(e),null!=a?(n._w=n._w||{},n._w.d=a):n._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(n._w=n._w||{},n._w[t]=S(e));break;case"gg":case"GG":n._w=n._w||{},n._w[t]=De.parseTwoDigitYear(e)}}function E(t){var n,a,s,i,r,o,u;n=t._w,null!=n.GG||null!=n.W||null!=n.E?(r=1,o=4,a=e(n.GG,t._a[we],oe(De(),1,4).year),s=e(n.W,1),i=e(n.E,1)):(r=t._locale._week.dow,o=t._locale._week.doy,a=e(n.gg,t._a[we],oe(De(),r,o).year),s=e(n.w,1),null!=n.d?(i=n.d,r>i&&++s):i=null!=n.e?n.e+r:r),u=ue(a,s,i,o,r),t._a[we]=u.year,t._dayOfYear=u.dayOfYear}function $(t){var n,a,s,i,r=[];if(!t._d){for(s=J(t),t._w&&null==t._a[be]&&null==t._a[ve]&&E(t),t._dayOfYear&&(i=e(t._a[we],s[we]),t._dayOfYear>W(i)&&(t._pf._overflowDayOfYear=!0),a=ae(i,0,t._dayOfYear),t._a[ve]=a.getUTCMonth(),t._a[be]=a.getUTCDate()),n=0;3>n&&null==t._a[n];++n)t._a[n]=r[n]=s[n];for(;7>n;n++)t._a[n]=r[n]=null==t._a[n]?2===n?1:0:t._a[n];t._d=(t._useUTC?ae:ne).apply(null,r),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm)}}function V(t){var e;t._d||(e=v(t._i),t._a=[e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond],$(t))}function J(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function q(t){if(t._f===De.ISO_8601)return B(t),void 0;t._a=[],t._pf.empty=!0;var e,n,a,s,i,r=""+t._i,o=r.length,u=0;for(a=A(t._f,t._locale).match(Ie)||[],e=0;e0&&t._pf.unusedInput.push(i),r=r.slice(r.indexOf(n)+n.length),u+=n.length),fn[s]?(n?t._pf.empty=!1:t._pf.unusedTokens.push(s),j(s,n,t)):t._strict&&!n&&t._pf.unusedTokens.push(s);t._pf.charsLeftOver=o-u,r.length>0&&t._pf.unusedInput.push(r),t._isPm&&t._a[Se]<12&&(t._a[Se]+=12),t._isPm===!1&&12===t._a[Se]&&(t._a[Se]=0),$(t),F(t)}function Q(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,a,s){return e||n||a||s})}function R(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function X(t){var e,n,s,i,r;if(0===t._f.length)return t._pf.invalidFormat=!0,t._d=new Date(0/0),void 0;for(i=0;ir)&&(s=r,n=e));h(t,n||e)}function B(t){var e,n,a=t._i,s=tn.exec(a);if(s){for(t._pf.iso=!0,e=0,n=nn.length;n>e;e++)if(nn[e][1].exec(a)){t._f=nn[e][0]+(s[6]||" ");break}for(e=0,n=an.length;n>e;e++)if(an[e][1].exec(a)){t._f+=an[e][0];break}a.match(Ee)&&(t._f+="Z"),q(t)}else t._isValid=!1}function K(t){B(t),t._isValid===!1&&(delete t._isValid,De.createFromInputFallback(t))}function te(t,e){var n,a=[];for(n=0;nt&&o.setFullYear(t),o}function ae(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function se(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function ie(t,e,n,a,s){return s.relativeTime(e||1,!!n,t,a)}function re(t,e,n){var a=De.duration(t).abs(),s=Me(a.as("s")),i=Me(a.as("m")),r=Me(a.as("h")),o=Me(a.as("d")),u=Me(a.as("M")),c=Me(a.as("y")),d=s0,d[4]=n,ie.apply({},d)}function oe(t,e,n){var a,s=n-e,i=n-t.day();return i>s&&(i-=7),s-7>i&&(i+=7),a=De(t).add(i,"d"),{week:Math.ceil(a.dayOfYear()/7),year:a.year()}}function ue(t,e,n,a,s){var i,r,o=ae(t,0,1).getUTCDay();return o=0===o?7:o,n=null!=n?n:s,i=s-o+(o>a?7:0)-(s>o?7:0),r=7*(e-1)+(n-s)+i+1,{year:r>0?t:t-1,dayOfYear:r>0?r:W(t-1)+r}}function ce(e){var n=e._i,a=e._f;return e._locale=e._locale||De.localeData(e._l),null===n||a===t&&""===n?De.invalid({nullInput:!0}):("string"==typeof n&&(e._i=n=e._locale.preparse(n)),De.isMoment(n)?new d(n,!0):(a?k(a)?X(e):q(e):ee(e),new d(e)))}function de(t,e){var n,a;if(1===e.length&&k(e[0])&&(e=e[0]),!e.length)return De();for(n=e[0],a=1;a=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return S(this.milliseconds()/100)},SS:function(){return _(S(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(S(t/60),2)+":"+_(S(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(S(t/60),2)+_(S(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},mn={},_n=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];ln.length;)ge=ln.pop(),fn[ge+"o"]=u(fn[ge],ge);for(;hn.length;)ge=hn.pop(),fn[ge+ge]=o(fn[ge],2);fn.DDDD=o(fn.DDD,3),h(c.prototype,{set:function(t){var e,n;for(n in t)e=t[n],"function"==typeof e?this[n]=e:this["_"+n]=e},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t){var e,n,a;for(this._monthsParse||(this._monthsParse=[]),e=0;12>e;e++)if(this._monthsParse[e]||(n=De.utc([2e3,e]),a="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[e]=new RegExp(a.replace(".",""),"i")),this._monthsParse[e].test(t))return e},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,n,a;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(n=De([2e3,1]).day(e),a="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[e]=new RegExp(a.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e){var n=this._calendar[t];return"function"==typeof n?n.apply(e):n},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,n,a){var s=this._relativeTime[n];return"function"==typeof s?s(t,e,n,a):s.replace(/%d/i,t)},pastFuture:function(t,e){var n=this._relativeTime[t>0?"future":"past"];return"function"==typeof n?n(e):n.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",preparse:function(t){return t},postformat:function(t){return t},week:function(t){return oe(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),De=function(e,n,s,i){var r;return"boolean"==typeof s&&(i=s,s=t),r={},r._isAMomentObject=!0,r._i=e,r._f=n,r._l=s,r._strict=i,r._isUTC=!1,r._pf=a(),ce(r)},De.suppressDeprecationWarnings=!1,De.createFromInputFallback=i("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i)}),De.min=function(){var t=[].slice.call(arguments,0);return de("isBefore",t)},De.max=function(){var t=[].slice.call(arguments,0);return de("isAfter",t)},De.utc=function(e,n,s,i){var r;return"boolean"==typeof s&&(i=s,s=t),r={},r._isAMomentObject=!0,r._useUTC=!0,r._isUTC=!0,r._l=s,r._i=e,r._f=n,r._strict=i,r._pf=a(),ce(r).utc()},De.unix=function(t){return De(1e3*t)},De.duration=function(t,e){var a,s,i,r,o=t,u=null;return De.isDuration(t)?o={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(o={},e?o[e]=t:o.milliseconds=t):(u=ze.exec(t))?(a="-"===u[1]?-1:1,o={y:0,d:S(u[be])*a,h:S(u[Se])*a,m:S(u[Te])*a,s:S(u[Oe])*a,ms:S(u[We])*a}):(u=xe.exec(t))?(a="-"===u[1]?-1:1,i=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*a},o={y:i(u[2]),M:i(u[3]),d:i(u[4]),h:i(u[5]),m:i(u[6]),s:i(u[7]),w:i(u[8])}):"object"==typeof o&&("from"in o||"to"in o)&&(r=y(De(o.from),De(o.to)),o={},o.ms=r.milliseconds,o.M=r.months),s=new l(o),De.isDuration(t)&&n(t,"_locale")&&(s._locale=t._locale),s},De.version=ke,De.defaultFormat=en,De.ISO_8601=function(){},De.momentProperties=Fe,De.updateOffset=function(){},De.relativeTimeThreshold=function(e,n){return dn[e]===t?!1:n===t?dn[e]:(dn[e]=n,!0)},De.lang=i("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return De.locale(t,e)}),De.locale=function(t,e){var n;return t&&(n="undefined"!=typeof e?De.defineLocale(t,e):De.localeData(t),n&&(De.duration._locale=De._locale=n)),De._locale._abbr},De.defineLocale=function(t,e){return null!==e?(e.abbr=t,Ue[t]||(Ue[t]=new c),Ue[t].set(e),De.locale(t),Ue[t]):(delete Ue[t],null)},De.langData=i("moment.langData is deprecated. Use moment.localeData instead.",function(t){return De.localeData(t)}),De.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return De._locale;if(!k(t)){if(e=x(t))return e;t=[t]}return z(t)},De.isMoment=function(t){return t instanceof d||null!=t&&n(t,"_isAMomentObject")},De.isDuration=function(t){return t instanceof l};for(ge=_n.length-1;ge>=0;--ge)b(_n[ge]);De.normalizeUnits=function(t){return w(t)},De.invalid=function(t){var e=De.utc(0/0);return null!=t?h(e._pf,t):e._pf.userInvalidated=!0,e},De.parseZone=function(){return De.apply(null,arguments).parseZone()},De.parseTwoDigitYear=function(t){return S(t)+(S(t)>68?1900:2e3)},h(De.fn=d.prototype,{clone:function(){return De(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=De(this).utc();return 00:!1},parsingFlags:function(){return h({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._dateTzOffset(),"m")),this},format:function(t){var e=P(this,t||De.defaultFormat);return this.localeData().postformat(e)},add:D(1,"add"),subtract:D(-1,"subtract"),diff:function(t,e,n){var a,s,i,r=I(t,this),o=6e4*(this.zone()-r.zone());return e=w(e),"year"===e||"month"===e?(a=432e5*(this.daysInMonth()+r.daysInMonth()),s=12*(this.year()-r.year())+(this.month()-r.month()),i=this-De(this).startOf("month")-(r-De(r).startOf("month")),i-=6e4*(this.zone()-De(this).startOf("month").zone()-(r.zone()-De(r).startOf("month").zone())),s+=i/a,"year"===e&&(s/=12)):(a=this-r,s="second"===e?a/1e3:"minute"===e?a/6e4:"hour"===e?a/36e5:"day"===e?(a-o)/864e5:"week"===e?(a-o)/6048e5:a),n?s:m(s)},from:function(t,e){return De.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(De(),t)},calendar:function(t){var e=t||De(),n=I(e,this).startOf("day"),a=this.diff(n,"days",!0),s=-6>a?"sameElse":-1>a?"lastWeek":0>a?"lastDay":1>a?"sameDay":2>a?"nextDay":7>a?"nextWeek":"sameElse";return this.format(this.localeData().calendar(s,this))},isLeapYear:function(){return U(this.year())},isDST:function(){return this.zone()+t):+this.clone().startOf(e)>+De(t).startOf(e)},isBefore:function(t,e){return e=w("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=De.isMoment(t)?t:De(t),+t>+this):+this.clone().startOf(e)<+De(t).startOf(e)},isSame:function(t,e){return e=w(e||"millisecond"),"millisecond"===e?(t=De.isMoment(t)?t:De(t),+this===+t):+this.clone().startOf(e)===+I(t,this).startOf(e)},min:i("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(t){return t=De.apply(null,arguments),this>t?this:t}),max:i("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=De.apply(null,arguments),t>this?this:t}),zone:function(t,e){var n,a=this._offset||0;return null==t?this._isUTC?a:this._dateTzOffset():("string"==typeof t&&(t=Z(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(n=this._dateTzOffset()),this._offset=t,this._isUTC=!0,null!=n&&this.subtract(n,"m"),a!==t&&(!e||this._changeInProgress?g(this,De.duration(a-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,De.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":"" +},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?De(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return T(this.year(),this.month())},dayOfYear:function(t){var e=Me((De(this).startOf("day")-De(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=oe(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=oe(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=oe(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return O(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return O(this.year(),t.dow,t.doy)},get:function(t){return t=w(t),this[t]()},set:function(t,e){return t=w(t),"function"==typeof this[t]&&this[t](e),this},locale:function(e){var n;return e===t?this._locale._abbr:(n=De.localeData(e),null!=n&&(this._locale=n),this)},lang:i("moment().lang() is deprecated. Use moment().localeData() instead.",function(e){return e===t?this.localeData():this.locale(e)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),De.fn.millisecond=De.fn.milliseconds=me("Milliseconds",!1),De.fn.second=De.fn.seconds=me("Seconds",!1),De.fn.minute=De.fn.minutes=me("Minutes",!1),De.fn.hour=De.fn.hours=me("Hours",!0),De.fn.date=me("Date",!0),De.fn.dates=i("dates accessor is deprecated. Use date instead.",me("Date",!0)),De.fn.year=me("FullYear",!0),De.fn.years=i("years accessor is deprecated. Use year instead.",me("FullYear",!0)),De.fn.days=De.fn.day,De.fn.months=De.fn.month,De.fn.weeks=De.fn.week,De.fn.isoWeeks=De.fn.isoWeek,De.fn.quarters=De.fn.quarter,De.fn.toJSON=De.fn.toISOString,h(De.duration.fn=l.prototype,{_bubble:function(){var t,e,n,a=this._milliseconds,s=this._days,i=this._months,r=this._data,o=0;r.milliseconds=a%1e3,t=m(a/1e3),r.seconds=t%60,e=m(t/60),r.minutes=e%60,n=m(e/60),r.hours=n%24,s+=m(n/24),o=m(_e(s)),s-=m(pe(o)),i+=m(s/30),s%=30,o+=m(i/12),i%=12,r.days=s,r.months=i,r.years=o},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return m(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*S(this._months/12)},humanize:function(t){var e=re(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var n=De.duration(t,e);return this._milliseconds+=n._milliseconds,this._days+=n._days,this._months+=n._months,this._bubble(),this},subtract:function(t,e){var n=De.duration(t,e);return this._milliseconds-=n._milliseconds,this._days-=n._days,this._months-=n._months,this._bubble(),this},get:function(t){return t=w(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,n;if(t=w(t),"month"===t||"year"===t)return e=this._days+this._milliseconds/864e5,n=this._months+12*_e(e),"month"===t?n:n/12;switch(e=this._days+pe(this._months/12),t){case"week":return e/7+this._milliseconds/6048e5;case"day":return e+this._milliseconds/864e5;case"hour":return 24*e+this._milliseconds/36e5;case"minute":return 24*e*60+this._milliseconds/6e4;case"second":return 24*e*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*e*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+t)}},lang:De.fn.lang,locale:De.fn.locale,toIsoString:i("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),n=Math.abs(this.days()),a=Math.abs(this.hours()),s=Math.abs(this.minutes()),i=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(n?n+"D":"")+(a||s||i?"T":"")+(a?a+"H":"")+(s?s+"M":"")+(i?i+"S":""):"P0D"},localeData:function(){return this._locale}}),De.duration.fn.toString=De.duration.fn.toISOString;for(ge in rn)n(rn,ge)&&ye(ge.toLowerCase());return De.duration.fn.asMilliseconds=function(){return this.as("ms")},De.duration.fn.asSeconds=function(){return this.as("s")},De.duration.fn.asMinutes=function(){return this.as("m")},De.duration.fn.asHours=function(){return this.as("h")},De.duration.fn.asDays=function(){return this.as("d")},De.duration.fn.asWeeks=function(){return this.as("weeks")},De.duration.fn.asMonths=function(){return this.as("M")},De.duration.fn.asYears=function(){return this.as("y")},De.locale("en",{ordinal:function(t){var e=t%10,n=1===S(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),De}.call(this),t.Utils.moment=n,t.datepicker}); \ No newline at end of file diff --git a/media/uikit-v2/js/components/form-password.js b/media/uikit-v2/js/components/form-password.js new file mode 100644 index 0000000..f225d65 --- /dev/null +++ b/media/uikit-v2/js/components/form-password.js @@ -0,0 +1,67 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +(function(addon) { + + var component; + + if (window.UIkit2) { + component = addon(UIkit2); + } + + if (typeof define == 'function' && define.amd) { + define('uikit-form-password', ['uikit'], function(){ + return component || addon(UIkit2); + }); + } + +})(function(UI){ + + "use strict"; + + UI.component('formPassword', { + + defaults: { + lblShow: 'Show', + lblHide: 'Hide' + }, + + boot: function() { + // init code + UI.$html.on('click.formpassword.uikit', '[data-uk-form-password]', function(e) { + + var ele = UI.$(this); + + if (!ele.data('formPassword')) { + + e.preventDefault(); + + UI.formPassword(ele, UI.Utils.options(ele.attr('data-uk-form-password'))); + ele.trigger('click'); + } + }); + }, + + init: function() { + + var $this = this; + + this.on('click', function(e) { + + e.preventDefault(); + + if($this.input.length) { + var type = $this.input.attr('type'); + $this.input.attr('type', type=='text' ? 'password':'text'); + $this.element.html($this.options[type=='text' ? 'lblShow':'lblHide']); + } + }); + + this.input = this.element.next('input').length ? this.element.next('input') : this.element.prev('input'); + this.element.html(this.options[this.input.is('[type="password"]') ? 'lblShow':'lblHide']); + + + this.element.data('formPassword', this); + } + }); + + return UI.formPassword; +}); diff --git a/media/uikit-v2/js/components/form-password.min.js b/media/uikit-v2/js/components/form-password.min.js new file mode 100644 index 0000000..649a981 --- /dev/null +++ b/media/uikit-v2/js/components/form-password.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var i;window.UIkit2&&(i=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-form-password",["uikit"],function(){return i||t(UIkit2)})}(function(t){"use strict";return t.component("formPassword",{defaults:{lblShow:"Show",lblHide:"Hide"},boot:function(){t.$html.on("click.formpassword.uikit","[data-uk-form-password]",function(i){var e=t.$(this);e.data("formPassword")||(i.preventDefault(),t.formPassword(e,t.Utils.options(e.attr("data-uk-form-password"))),e.trigger("click"))})},init:function(){var t=this;this.on("click",function(i){if(i.preventDefault(),t.input.length){var e=t.input.attr("type");t.input.attr("type","text"==e?"password":"text"),t.element.html(t.options["text"==e?"lblShow":"lblHide"])}}),this.input=this.element.next("input").length?this.element.next("input"):this.element.prev("input"),this.element.html(this.options[this.input.is('[type="password"]')?"lblShow":"lblHide"]),this.element.data("formPassword",this)}}),t.formPassword}); \ No newline at end of file diff --git a/media/uikit-v2/js/components/form-select.js b/media/uikit-v2/js/components/form-select.js new file mode 100644 index 0000000..5612d33 --- /dev/null +++ b/media/uikit-v2/js/components/form-select.js @@ -0,0 +1,85 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +(function(addon) { + + var component; + + if (window.UIkit2) { + component = addon(UIkit2); + } + + if (typeof define == 'function' && define.amd) { + define('uikit-form-select', ['uikit'], function(){ + return component || addon(UIkit2); + }); + } + +})(function(UI){ + + "use strict"; + + UI.component('formSelect', { + + defaults: { + target: '>span:first', + activeClass: 'uk-active' + }, + + boot: function() { + // init code + UI.ready(function(context) { + + UI.$('[data-uk-form-select]', context).each(function(){ + + var ele = UI.$(this); + + if (!ele.data('formSelect')) { + UI.formSelect(ele, UI.Utils.options(ele.attr('data-uk-form-select'))); + } + }); + }); + }, + + init: function() { + + var $this = this; + + this.target = this.find(this.options.target); + this.select = this.find('select'); + + // init + on change event + this.select.on({ + + change: (function(){ + + var select = $this.select[0], fn = function(){ + + try { + + if($this.options.target === 'input') { + $this.target.val(select.options[select.selectedIndex].text); + } else { + $this.target.text(select.options[select.selectedIndex].text); + } + + } catch(e) {} + + $this.element[$this.select.val() ? 'addClass':'removeClass']($this.options.activeClass); + + return fn; + }; + + return fn(); + })(), + + focus: function(){ $this.target.addClass('uk-focus') }, + blur: function(){ $this.target.removeClass('uk-focus') }, + mouseenter: function(){ $this.target.addClass('uk-hover') }, + mouseleave: function(){ $this.target.removeClass('uk-hover') } + }); + + this.element.data("formSelect", this); + } + }); + + return UI.formSelect; +}); diff --git a/media/uikit-v2/js/components/form-select.min.js b/media/uikit-v2/js/components/form-select.min.js new file mode 100644 index 0000000..22f8b0e --- /dev/null +++ b/media/uikit-v2/js/components/form-select.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-form-select",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";return t.component("formSelect",{defaults:{target:">span:first",activeClass:"uk-active"},boot:function(){t.ready(function(e){t.$("[data-uk-form-select]",e).each(function(){var e=t.$(this);e.data("formSelect")||t.formSelect(e,t.Utils.options(e.attr("data-uk-form-select")))})})},init:function(){var t=this;this.target=this.find(this.options.target),this.select=this.find("select"),this.select.on({change:function(){var e=t.select[0],n=function(){try{"input"===t.options.target?t.target.val(e.options[e.selectedIndex].text):t.target.text(e.options[e.selectedIndex].text)}catch(s){}return t.element[t.select.val()?"addClass":"removeClass"](t.options.activeClass),n};return n()}(),focus:function(){t.target.addClass("uk-focus")},blur:function(){t.target.removeClass("uk-focus")},mouseenter:function(){t.target.addClass("uk-hover")},mouseleave:function(){t.target.removeClass("uk-hover")}}),this.element.data("formSelect",this)}}),t.formSelect}); \ No newline at end of file diff --git a/media/uikit-v2/js/components/grid-parallax.js b/media/uikit-v2/js/components/grid-parallax.js new file mode 100644 index 0000000..7151e87 --- /dev/null +++ b/media/uikit-v2/js/components/grid-parallax.js @@ -0,0 +1,168 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +(function(addon) { + + var component; + + if (window.UIkit2) { + component = addon(UIkit2); + } + + if (typeof define == 'function' && define.amd) { + define('uikit-grid-parallax', ['uikit'], function(){ + return component || addon(UIkit2); + }); + } + +})(function(UI){ + + var parallaxes = [], checkParallaxes = function() { + + requestAnimationFrame(function(){ + for (var i=0; i < parallaxes.length; i++) { + parallaxes[i].process(); + } + }); + }; + + + UI.component('gridparallax', { + + defaults: { + target : false, + smooth : 150, + translate : 150 + }, + + boot: function() { + + // listen to scroll and resize + UI.$doc.on('scrolling.uk.document', checkParallaxes); + UI.$win.on('load resize orientationchange', UI.Utils.debounce(function(){ + checkParallaxes(); + }, 50)); + + // init code + UI.ready(function(context) { + + UI.$('[data-uk-grid-parallax]', context).each(function() { + + var parallax = UI.$(this); + + if (!parallax.data('gridparallax')) { + UI.gridparallax(parallax, UI.Utils.options(parallax.attr('data-uk-grid-parallax'))); + } + }); + }); + }, + + init: function() { + + var $this = this; + + this.initItems().process(); + parallaxes.push(this); + + UI.$win.on('load resize orientationchange', (function() { + + var fn = function() { + var columns = getcolumns($this.element); + + $this.element.css('margin-bottom', ''); + + if (columns > 1) { + $this.element.css('margin-bottom', $this.options.translate + parseInt($this.element.css('margin-bottom'))); + } + }; + + UI.$(function() { fn(); }); + + return UI.Utils.debounce(fn, 50); + })()); + }, + + initItems: function() { + + var smooth = this.options.smooth; + + this.items = (this.options.target ? this.element.find(this.options.target) : this.element.children()).each(function(){ + UI.$(this).css({ + transition: 'transform '+smooth+'ms linear', + transform: '' + }); + }); + + return this; + }, + + process: function() { + + var percent = percentageInViewport(this.element), + columns = getcolumns(this.element), + items = this.items, + mods = [(columns-1)]; + + if (columns == 1 || !percent) { + items.css('transform', ''); + return; + } + + while(mods.length < columns) { + if (!(mods[mods.length-1] - 2)) break; + mods.push(mods[mods.length-1] - 2); + } + + var translate = this.options.translate, percenttranslate = percent * translate; + + items.each(function(idx, ele, translate){ + translate = mods.indexOf((idx+1) % columns) != -1 ? percenttranslate : percenttranslate / 8; + UI.$(this).css('transform', 'translate3d(0,'+(translate)+'px, 0)'); + }); + } + + }); + + + function getcolumns(element) { + + var children = element.children(), + first = children.filter(':visible:first'), + top = first[0].offsetTop + first.outerHeight(); + + for (var column=0;column= top) break; + } + + return column || 1; + } + + function percentageInViewport(element) { + + var top = element.offset().top, + height = element.outerHeight(), + scrolltop = UI.$win.scrollTop(), + wh = window.innerHeight, + distance, percentage, percent; + + if (top > (scrolltop + wh)) { + percent = 0; + } else if ((top + height) < scrolltop) { + percent = 1; + } else { + + if ((top + height) < wh) { + percent = (scrolltop < wh ? scrolltop : scrolltop - wh) / (top+height); + } else { + + distance = (scrolltop + wh) - top; + percentage = Math.round(distance / ((wh + height) / 100)); + percent = percentage/100; + } + + if (top < wh) { + percent = percent * scrolltop / ((top + height) - wh); + } + } + + return percent > 1 ? 1:percent; + } +}); diff --git a/media/uikit-v2/js/components/grid-parallax.min.js b/media/uikit-v2/js/components/grid-parallax.min.js new file mode 100644 index 0000000..b25ffb0 --- /dev/null +++ b/media/uikit-v2/js/components/grid-parallax.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var n;window.UIkit2&&(n=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-grid-parallax",["uikit"],function(){return n||t(UIkit2)})}(function(t){function n(t){for(var n=t.children(),i=n.filter(":visible:first"),e=i[0].offsetTop+i.outerHeight(),o=0;o=e);o++);return o||1}function i(n){var i,e,o,r=n.offset().top,s=n.outerHeight(),a=t.$win.scrollTop(),l=window.innerHeight;return r>a+l?o=0:a>r+s?o=1:(l>r+s?o=(l>a?a:a-l)/(r+s):(i=a+l-r,e=Math.round(i/((l+s)/100)),o=e/100),l>r&&(o=o*a/(r+s-l))),o>1?1:o}var e=[],o=function(){requestAnimationFrame(function(){for(var t=0;t1&&i.element.css("margin-bottom",i.options.translate+parseInt(i.element.css("margin-bottom")))};return t.$(function(){e()}),t.Utils.debounce(e,50)}())},initItems:function(){var n=this.options.smooth;return this.items=(this.options.target?this.element.find(this.options.target):this.element.children()).each(function(){t.$(this).css({transition:"transform "+n+"ms linear",transform:""})}),this},process:function(){var e=i(this.element),o=n(this.element),r=this.items,s=[o-1];if(1==o||!e)return r.css("transform",""),void 0;for(;s.lengthe;e++)if(i=h[e]+t,"string"==typeof u[i])return i}}function i(t){var i=parseFloat(t),e=-1===t.indexOf("%")&&!isNaN(i);return e&&i}function e(){}function n(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},i=0,e=c.length;e>i;i++){var n=c[i];t[n]=0}return t}function r(){if(!f){f=!0;var e=window.getComputedStyle;if(s=function(){var t=e?function(t){return e(t,null)}:function(t){return t.currentStyle};return function(i){var e=t(i);return e||l("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}}(),a=t("boxSizing")){var n=document.createElement("div");n.style.width="200px",n.style.padding="1px 2px 3px 4px",n.style.borderStyle="solid",n.style.borderWidth="1px 2px 3px 4px",n.style[a]="border-box";var r=document.body||document.documentElement;r.appendChild(n);var o=s(n);d=200===i(o.width),r.removeChild(n)}}}function o(t){if(r(),"string"==typeof t&&(t=document.querySelector(t)),t&&"object"==typeof t&&t.nodeType){var e=s(t);if("none"===e.display)return n();var o={};o.width=t.offsetWidth,o.height=t.offsetHeight;for(var h=o.isBorderBox=!(!a||!e[a]||"border-box"!==e[a]),u=0,l=c.length;l>u;u++){var f=c[u],p=e[f],g=parseFloat(p);o[f]=isNaN(g)?0:g}var m=o.paddingLeft+o.paddingRight,v=o.paddingTop+o.paddingBottom,b=o.marginLeft+o.marginRight,y=o.marginTop+o.marginBottom,k=o.borderLeftWidth+o.borderRightWidth,w=o.borderTopWidth+o.borderBottomWidth,x=h&&d,W=i(e.width);W!==!1&&(o.width=W+(x?0:m+k));var $=i(e.height);return $!==!1&&(o.height=$+(x?0:v+w)),o.innerWidth=o.width-(m+k),o.innerHeight=o.height-(v+w),o.outerWidth=o.width+b,o.outerHeight=o.height+y,o}}var s,a,d,h="Webkit Moz ms Ms O".split(" "),u=document.documentElement.style,l="undefined"==typeof console?e:function(t){console.error(t)},c=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],f=!1;return o}function e(t){return i()(t)}t.component("grid",{defaults:{colwidth:"auto",animation:!0,duration:300,gutter:0,controls:!1,filter:!1,origin:t.langdirection},boot:function(){t.ready(function(i){t.$("[data-uk-grid]",i).each(function(){var i=t.$(this);i.data("grid")||t.grid(i,t.Utils.options(i.attr("data-uk-grid")))})})},init:function(){var i=this,e=String(this.options.gutter).trim().split(" ");this.gutterv=parseInt(e[0],10),this.gutterh=parseInt(e[1]||e[0],10),this.element.css({position:"relative"}),this.controls=null,this.origin=this.options.origin,this.options.controls&&(this.controls=t.$(this.options.controls),this.controls.on("click","[data-uk-filter]",function(e){e.preventDefault(),i.filter(t.$(this).attr("data-uk-filter"))}),this.controls.on("click","[data-uk-sort]",function(e){e.preventDefault();var n=t.$(this).attr("data-uk-sort").split(":");i.sort(n[0],n[1])})),t.$win.on("load resize orientationchange",t.Utils.debounce(function(){i.currentfilter?i.filter(i.currentfilter):this.update()}.bind(this),100)),this.on("display.uk.check",function(){i.element.is(":visible")&&i.update()}),t.domObserve(this.element,function(){i.update()}),this.options.filter!==!1?this.filter(this.options.filter):this.update()},_prepareElements:function(){var t,i=this.element.children(":not([data-grid-prepared])");i.length&&(t={position:"absolute",boxSizing:"border-box",width:"auto"==this.options.colwidth?"":this.options.colwidth},this.options.gutter&&(t["padding-"+this.origin]=this.gutterh,t["padding-bottom"]=this.gutterv,this.element.css("margin-"+this.origin,-1*this.gutterh)),i.attr("data-grid-prepared","true").css(t))},update:function(i){var n=this;this._prepareElements(),i=i||this.element.children(":visible");var r,o,s,a,d,h,u,l,c,f=i,p=this.element.width()+2*this.gutterh+2,g=0,m=0,v=[];this.trigger("beforeupdate.uk.grid",[f]),f.each(function(){for(c=e(this),r=t.$(this),o=c.outerWidth,s=c.outerHeight,g=0,m=0,h=0,l=v.length;l>h;h++)a=v[h],g<=a.aX&&(g=a.aX),g+o>p&&(g=0),m<=a.aY&&(m=a.aY);d={ele:r,top:m,width:o,height:s,aY:m+s,aX:g+o},d[n.origin]=g,v.push(d)});var b,y,k=0;for(h=0,l=v.length;l>h;h++){for(a=v[h],m=0,u=0;h>u;u++)b=v[u],a[this.origin]-1&&(o=!0)})),r[o?"visible":"hidden"].push(e)}),r.hidden=t.$(r.hidden).map(function(){return this[0]}),r.visible=t.$(r.visible).map(function(){return this[0]}),r.hidden.attr("aria-hidden","true").filter(":visible").fadeOut(this.options.duration),r.visible.attr("aria-hidden","false").filter(":hidden").css("opacity",0).show(),e.update(r.visible),this.controls&&this.controls.length&&this.controls.find("[data-uk-filter]").removeClass("uk-active").filter('[data-uk-filter="'+i+'"]').addClass("uk-active")},sort:function(i,e){e=e||1,"string"==typeof e&&(e="desc"==e.toLowerCase()?-1:1);var n=this.element.children();n.sort(function(n,r){return n=t.$(n),r=t.$(r),(r.data(i)||"")<(n.data(i)||"")?e:-1*e}).appendTo(this.element),this.update(n.filter(":visible")),this.controls&&this.controls.length&&this.controls.find("[data-uk-sort]").removeClass("uk-active").filter('[data-uk-sort="'+i+":"+(-1==e?"desc":"asc")+'"]').addClass("uk-active")}})}); \ No newline at end of file diff --git a/media/uikit/js/components/htmleditor.js b/media/uikit-v2/js/components/htmleditor.js similarity index 81% rename from media/uikit/js/components/htmleditor.js rename to media/uikit-v2/js/components/htmleditor.js index 08586bd..251005a 100644 --- a/media/uikit/js/components/htmleditor.js +++ b/media/uikit-v2/js/components/htmleditor.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-htmleditor", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-htmleditor', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -26,6 +26,7 @@ mode : 'split', markdown : false, autocomplete : true, + enablescripts: false, height : 500, maxsplitsize : 1000, codemirror : { mode: 'htmlmixed', lineWrapping: true, dragDrop: false, autoCloseTags: true, matchTags: true, autoCloseBrackets: true, matchBrackets: true, indentUnit: 4, indentWithTabs: false, tabSize: 4, hintOptions: {completionSingle:false} }, @@ -42,10 +43,10 @@ UI.$('textarea[data-uk-htmleditor]', context).each(function() { - var editor = UI.$(this), obj; + var editor = UI.$(this); if (!editor.data('htmleditor')) { - obj = UI.htmleditor(editor, UI.Utils.options(editor.attr('data-uk-htmleditor'))); + UI.htmleditor(editor, UI.Utils.options(editor.attr('data-uk-htmleditor'))); } }); }); @@ -58,8 +59,8 @@ this.CodeMirror = this.options.CodeMirror || CodeMirror; this.buttons = {}; - tpl = tpl.replace(/\{:lblPreview\}/g, this.options.lblPreview); - tpl = tpl.replace(/\{:lblCodeview\}/g, this.options.lblCodeview); + tpl = tpl.replace(/\{:lblPreview}/g, this.options.lblPreview); + tpl = tpl.replace(/\{:lblCodeview}/g, this.options.lblCodeview); this.htmleditor = UI.$(tpl); this.content = this.htmleditor.find('.uk-htmleditor-content'); @@ -91,7 +92,7 @@ // append custom stylesheet if (typeof(this.options.iframe) === 'string') { - this.preview.container.parent().append(''); + this.preview.container.parent().append(''); } } else { @@ -107,13 +108,13 @@ if ($this.htmleditor.attr('data-mode') == 'tab') return; // calc position - var codeHeight = codeContent.height() - codeScroll.height(), - previewHeight = previewContainer[0].scrollHeight - ($this.iframe ? $this.iframe.height() : previewContainer.height()), - ratio = previewHeight / codeHeight, - previewPostition = codeScroll.scrollTop() * ratio; + var codeHeight = codeContent.height() - codeScroll.height(), + previewHeight = previewContainer[0].scrollHeight - ($this.iframe ? $this.iframe.height() : previewContainer.height()), + ratio = previewHeight / codeHeight, + previewPosition = codeScroll.scrollTop() * ratio; // apply new scroll - previewContainer.scrollTop(previewPostition); + previewContainer.scrollTop(previewPosition); }, 10)); @@ -161,7 +162,7 @@ this.debouncedRedraw = UI.Utils.debounce(function () { $this.redraw(); }, 5); this.on('init.uk.component', function() { - $this.redraw(); + $this.debouncedRedraw(); }); this.element.attr('data-uk-check-display', 1).on('display.uk.check', function(e) { @@ -181,7 +182,7 @@ replaceInPreview: function(regexp, callback) { - var editor = this.editor, results = [], value = editor.getValue(), offset = -1; + var editor = this.editor, results = [], value = editor.getValue(), offset = -1, index = 0; this.currentvalue = this.currentvalue.replace(regexp, function() { @@ -206,12 +207,14 @@ } }; - var result = callback(match); + var result = typeof(callback) === 'string' ? callback : callback(match, index); - if (!result) { + if (!result && result !== '') { return arguments[0]; } + index++; + results.push(match); return result; }); @@ -288,6 +291,10 @@ this.currentvalue = this.editor.getValue(); + if (!this.options.enablescripts) { + this.currentvalue = this.currentvalue.replace(/<(script|style)\b[^<]*(?:(?!<\/(script|style)>)<[^<]*)*<\/(script|style)>/img, ''); + } + // empty code if (!this.currentvalue) { @@ -441,37 +448,82 @@ addAction('link', '$1'); addAction('image', '$1'); - var listfn = function() { + var listfn = function(tag) { if (editor.getCursorMode() == 'html') { - var cm = editor.editor, - pos = cm.getDoc().getCursor(true), - posend = cm.getDoc().getCursor(false); + tag = tag || 'ul'; + + var cm = editor.editor, + doc = cm.getDoc(), + pos = doc.getCursor(true), + posend = doc.getCursor(false), + im = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(cm.getCursor()).state), + inList = im && im.state && im.state.context && ['ul','ol'].indexOf(im.state.context.tagName) != -1; for (var i=pos.line; i<(posend.line+1);i++) { cm.replaceRange('
  • '+cm.getLine(i)+'
  • ', { line: i, ch: 0 }, { line: i, ch: cm.getLine(i).length }); } - cm.setCursor({ line: posend.line, ch: cm.getLine(posend.line).length }); + if (!inList) { + cm.replaceRange('<'+tag+'>'+"\n"+cm.getLine(pos.line), { line: pos.line, ch: 0 }, { line: pos.line, ch: cm.getLine(pos.line).length }); + cm.replaceRange(cm.getLine((posend.line+1))+"\n"+'', { line: (posend.line+1), ch: 0 }, { line: (posend.line+1), ch: cm.getLine((posend.line+1)).length }); + cm.setCursor({ line: posend.line+1, ch: cm.getLine(posend.line+1).length }); + } else { + cm.setCursor({ line: posend.line, ch: cm.getLine(posend.line).length }); + } + cm.focus(); } - } + }; editor.on('action.listUl', function() { - listfn(); + listfn('ul'); }); editor.on('action.listOl', function() { - listfn(); + listfn('ol'); }); editor.htmleditor.on('click', 'a[data-htmleditor-button="fullscreen"]', function() { + editor.htmleditor.toggleClass('uk-htmleditor-fullscreen'); var wrap = editor.editor.getWrapperElement(); if (editor.htmleditor.hasClass('uk-htmleditor-fullscreen')) { + var fixedParent = false, parents = editor.htmleditor.parents().each(function(){ + if (UI.$(this).css('position')=='fixed' && !UI.$(this).is('html')) { + fixedParent = UI.$(this); + } + }); + + editor.htmleditor.data('fixedParents', false); + + if (fixedParent) { + + var transformed = []; + + fixedParent = fixedParent.parent().find(parents).each(function(){ + + if (UI.$(this).css('transform') != 'none') { + transformed.push(UI.$(this).data('transform-reset', { + 'transform': this.style.transform, + '-webkit-transform': this.style.webkitTransform, + '-webkit-transition':this.style.webkitTransition, + 'transition':this.style.transition + }).css({ + 'transform': 'none', + '-webkit-transform': 'none', + '-webkit-transition':'none', + 'transition':'none' + })); + } + }); + + editor.htmleditor.data('fixedParents', transformed); + } + editor.editor.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, width: wrap.style.width, height: wrap.style.height}; wrap.style.width = ''; wrap.style.height = editor.content.height()+'px'; @@ -483,6 +535,12 @@ var info = editor.editor.state.fullScreenRestore; wrap.style.width = info.width; wrap.style.height = info.height; window.scrollTo(info.scrollLeft, info.scrollTop); + + if (editor.htmleditor.data('fixedParents')) { + editor.htmleditor.data('fixedParents').forEach(function(parent){ + parent.css(parent.data('transform-reset')); + }); + } } setTimeout(function() { @@ -508,7 +566,7 @@ init: function(editor) { - var parser = editor.options.mdparser || marked || null; + var parser = editor.options.mdparser || window.marked || null; if (!parser) return; @@ -585,7 +643,7 @@ UI.$.extend(editor, { enableMarkdown: function() { - enableMarkdown() + enableMarkdown(); this.render(); }, disableMarkdown: function() { diff --git a/media/uikit-v2/js/components/htmleditor.min.js b/media/uikit-v2/js/components/htmleditor.min.js new file mode 100644 index 0000000..c64a097 --- /dev/null +++ b/media/uikit-v2/js/components/htmleditor.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-htmleditor",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";var e=[];return t.component("htmleditor",{defaults:{iframe:!1,mode:"split",markdown:!1,autocomplete:!0,enablescripts:!1,height:500,maxsplitsize:1e3,codemirror:{mode:"htmlmixed",lineWrapping:!0,dragDrop:!1,autoCloseTags:!0,matchTags:!0,autoCloseBrackets:!0,matchBrackets:!0,indentUnit:4,indentWithTabs:!1,tabSize:4,hintOptions:{completionSingle:!1}},toolbar:["bold","italic","strike","link","image","blockquote","listUl","listOl"],lblPreview:"Preview",lblCodeview:"HTML",lblMarkedview:"Markdown"},boot:function(){t.ready(function(e){t.$("textarea[data-uk-htmleditor]",e).each(function(){var e=t.$(this);e.data("htmleditor")||t.htmleditor(e,t.Utils.options(e.attr("data-uk-htmleditor")))})})},init:function(){var i=this,o=t.components.htmleditor.template;this.CodeMirror=this.options.CodeMirror||CodeMirror,this.buttons={},o=o.replace(/\{:lblPreview}/g,this.options.lblPreview),o=o.replace(/\{:lblCodeview}/g,this.options.lblCodeview),this.htmleditor=t.$(o),this.content=this.htmleditor.find(".uk-htmleditor-content"),this.toolbar=this.htmleditor.find(".uk-htmleditor-toolbar"),this.preview=this.htmleditor.find(".uk-htmleditor-preview").children().eq(0),this.code=this.htmleditor.find(".uk-htmleditor-code"),this.element.before(this.htmleditor).appendTo(this.code),this.editor=this.CodeMirror.fromTextArea(this.element[0],this.options.codemirror),this.editor.htmleditor=this,this.editor.on("change",t.Utils.debounce(function(){i.render()},150)),this.editor.on("change",function(){i.editor.save(),i.element.trigger("input")}),this.code.find(".CodeMirror").css("height",this.options.height),this.options.iframe?(this.iframe=t.$(''),this.preview.append(this.iframe),this.iframe[0].contentWindow.document.open(),this.iframe[0].contentWindow.document.close(),this.preview.container=t.$(this.iframe[0].contentWindow.document).find("body"),"string"==typeof this.options.iframe&&this.preview.container.parent().append('')):this.preview.container=this.preview,t.$win.on("resize load",t.Utils.debounce(function(){i.fit()},200));var n=this.iframe?this.preview.container:i.preview.parent(),r=this.code.find(".CodeMirror-sizer"),l=this.code.find(".CodeMirror-scroll").on("scroll",t.Utils.debounce(function(){if("tab"!=i.htmleditor.attr("data-mode")){var t=r.height()-l.height(),e=n[0].scrollHeight-(i.iframe?i.iframe.height():n.height()),o=e/t,s=l.scrollTop()*o;n.scrollTop(s)}},10));this.htmleditor.on("click",".uk-htmleditor-button-code, .uk-htmleditor-button-preview",function(e){e.preventDefault(),"tab"==i.htmleditor.attr("data-mode")&&(i.htmleditor.find(".uk-htmleditor-button-code, .uk-htmleditor-button-preview").removeClass("uk-active").filter(this).addClass("uk-active"),i.activetab=t.$(this).hasClass("uk-htmleditor-button-code")?"code":"preview",i.htmleditor.attr("data-active-tab",i.activetab),i.editor.refresh())}),this.htmleditor.on("click","a[data-htmleditor-button]",function(){i.code.is(":visible")&&i.trigger("action."+t.$(this).data("htmleditor-button"),[i.editor])}),this.preview.parent().css("height",this.code.height()),this.options.autocomplete&&this.CodeMirror.showHint&&this.CodeMirror.hint&&this.CodeMirror.hint.html&&this.editor.on("inputRead",t.Utils.debounce(function(){var t=i.editor.getDoc(),e=t.getCursor(),o=i.CodeMirror.innerMode(i.editor.getMode(),i.editor.getTokenAt(e).state).mode.name;if("xml"==o){var n=i.editor.getCursor(),r=i.editor.getTokenAt(n);("<"==r.string.charAt(0)||"attribute"==r.type)&&i.CodeMirror.showHint(i.editor,i.CodeMirror.hint.html,{completeSingle:!1})}},100)),this.debouncedRedraw=t.Utils.debounce(function(){i.redraw()},5),this.on("init.uk.component",function(){i.debouncedRedraw()}),this.element.attr("data-uk-check-display",1).on("display.uk.check",function(){this.htmleditor.is(":visible")&&this.fit()}.bind(this)),e.push(this)},addButton:function(t,e){this.buttons[t]=e},addButtons:function(e){t.$.extend(this.buttons,e)},replaceInPreview:function(t,e){function i(t){var e=o.getValue().substring(0,t).split("\n");return{line:e.length-1,ch:e[e.length-1].length}}var o=this.editor,n=[],r=o.getValue(),l=-1,s=0;return this.currentvalue=this.currentvalue.replace(t,function(){l=r.indexOf(arguments[0],++l);var t={matches:arguments,from:i(l),to:i(l+arguments[0].length),replace:function(e){o.replaceRange(e,t.from,t.to)},inRange:function(e){return e.line===t.from.line&&e.line===t.to.line?e.ch>=t.from.ch&&e.ch=t.from.ch||e.line>t.from.line&&e.line'+t.buttons[i].label+"")}}),this.toolbar.html(e.join("\n"))}},fit:function(){var t=this.options.mode;"split"==t&&this.htmleditor.width())<[^<]*)*<\/(script|style)>/gim,"")),this.currentvalue?(this.trigger("render",[this]),this.trigger("renderLate",[this]),this.preview.container.html(this.currentvalue),void 0):(this.element.val(""),this.preview.container.html(""),void 0)},addShortcut:function(e,i){var o={};return t.$.isArray(e)||(e=[e]),e.forEach(function(t){o[t]=i}),this.editor.addKeyMap(o),o},addShortcutAction:function(t,e){var i=this;this.addShortcut(e,function(){i.element.trigger("action."+t,[i.editor])})},replaceSelection:function(t){var e=this.editor.getSelection();if(!e.length){for(var i=this.editor.getCursor(),o=this.editor.getLine(i.line),n=i.ch,r=n;r','
    ','
      ','
      ','","
      ","
      ",'
      ','
      ','
      ',"
      ",""].join(""),t.plugin("htmleditor","base",{init:function(e){function i(t,i,o){e.on("action."+t,function(){"html"==e.getCursorMode()&&e["replaceLine"==o?"replaceLine":"replaceSelection"](i)})}e.addButtons({fullscreen:{title:"Fullscreen",label:''},bold:{title:"Bold",label:''},italic:{title:"Italic",label:''},strike:{title:"Strikethrough",label:''},blockquote:{title:"Blockquote",label:''},link:{title:"Link",label:''},image:{title:"Image",label:''},listUl:{title:"Unordered List",label:''},listOl:{title:"Ordered List",label:''}}),i("bold","$1"),i("italic","$1"),i("strike","$1"),i("blockquote","

      $1

      ","replaceLine"),i("link",'$1'),i("image",'$1');var o=function(t){if("html"==e.getCursorMode()){t=t||"ul";for(var i=e.editor,o=i.getDoc(),n=o.getCursor(!0),r=o.getCursor(!1),l=CodeMirror.innerMode(i.getMode(),i.getTokenAt(i.getCursor()).state),s=l&&l.state&&l.state.context&&-1!=["ul","ol"].indexOf(l.state.context.tagName),a=n.line;a"+i.getLine(a)+"",{line:a,ch:0},{line:a,ch:i.getLine(a).length});s?i.setCursor({line:r.line,ch:i.getLine(r.line).length}):(i.replaceRange("<"+t+">\n"+i.getLine(n.line),{line:n.line,ch:0},{line:n.line,ch:i.getLine(n.line).length}),i.replaceRange(i.getLine(r.line+1)+"\n",{line:r.line+1,ch:0},{line:r.line+1,ch:i.getLine(r.line+1).length}),i.setCursor({line:r.line+1,ch:i.getLine(r.line+1).length})),i.focus()}};e.on("action.listUl",function(){o("ul")}),e.on("action.listOl",function(){o("ol")}),e.htmleditor.on("click",'a[data-htmleditor-button="fullscreen"]',function(){e.htmleditor.toggleClass("uk-htmleditor-fullscreen");var i=e.editor.getWrapperElement();if(e.htmleditor.hasClass("uk-htmleditor-fullscreen")){var o=!1,n=e.htmleditor.parents().each(function(){"fixed"!=t.$(this).css("position")||t.$(this).is("html")||(o=t.$(this))});if(e.htmleditor.data("fixedParents",!1),o){var r=[];o=o.parent().find(n).each(function(){"none"!=t.$(this).css("transform")&&r.push(t.$(this).data("transform-reset",{transform:this.style.transform,"-webkit-transform":this.style.webkitTransform,"-webkit-transition":this.style.webkitTransition,transition:this.style.transition}).css({transform:"none","-webkit-transform":"none","-webkit-transition":"none",transition:"none"}))}),e.htmleditor.data("fixedParents",r)}e.editor.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:i.style.width,height:i.style.height},i.style.width="",i.style.height=e.content.height()+"px",document.documentElement.style.overflow="hidden"}else{document.documentElement.style.overflow="";var l=e.editor.state.fullScreenRestore;i.style.width=l.width,i.style.height=l.height,window.scrollTo(l.scrollLeft,l.scrollTop),e.htmleditor.data("fixedParents")&&e.htmleditor.data("fixedParents").forEach(function(t){t.css(t.data("transform-reset"))})}setTimeout(function(){e.fit(),t.$win.trigger("resize")},50)}),e.addShortcut(["Ctrl-S","Cmd-S"],function(){e.element.trigger("htmleditor-save",[e])}),e.addShortcutAction("bold",["Ctrl-B","Cmd-B"])}}),t.plugin("htmleditor","markdown",{init:function(e){function i(){e.editor.setOption("mode","gfm"),e.htmleditor.find(".uk-htmleditor-button-code a").html(e.options.lblMarkedview)}function o(t,i,o){e.on("action."+t,function(){"markdown"==e.getCursorMode()&&e["replaceLine"==o?"replaceLine":"replaceSelection"](i)})}var n=e.options.mdparser||window.marked||null;n&&(e.options.markdown&&i(),o("bold","**$1**"),o("italic","*$1*"),o("strike","~~$1~~"),o("blockquote","> $1","replaceLine"),o("link","[$1](http://)"),o("image","![$1](http://)"),e.on("action.listUl",function(){if("markdown"==e.getCursorMode()){for(var t=e.editor,i=t.getDoc().getCursor(!0),o=t.getDoc().getCursor(!1),n=i.line;n0){var r,l=t.getLine(i.line-1);(r=l.match(/^(\d+)\./))&&(n=Number(r[1])+1)}for(var s=i.line;s \ No newline at end of file diff --git a/media/uikit/js/components/lightbox.js b/media/uikit-v2/js/components/lightbox.js similarity index 69% rename from media/uikit/js/components/lightbox.js rename to media/uikit-v2/js/components/lightbox.js index 1abb1a5..da81789 100644 --- a/media/uikit/js/components/lightbox.js +++ b/media/uikit-v2/js/components/lightbox.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { // AMD - define("uikit-lightbox", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { // AMD + define('uikit-lightbox', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -22,9 +22,10 @@ UI.component('lightbox', { defaults: { - "group" : false, - "duration" : 400, - "keyboard" : true + allowfullscreen : true, + duration : 400, + group : false, + keyboard : true }, index : 0, @@ -38,12 +39,12 @@ var link = UI.$(this); - if (!link.data("lightbox")) { + if (!link.data('lightbox')) { - UI.lightbox(link, UI.Utils.options(link.attr("data-uk-lightbox"))); + UI.lightbox(link, UI.Utils.options(link.attr('data-uk-lightbox'))); } - link.data("lightbox").show(link); + link.data('lightbox').show(link); }); // keyboard navigation @@ -67,27 +68,24 @@ init: function() { - var $this = this, siblings = []; + var siblings = []; this.index = 0; this.siblings = []; if (this.element && this.element.length) { - var domSiblings = this.options.group ? UI.$([ - '[data-uk-lightbox*="'+this.options.group+'"]', - "[data-uk-lightbox*='"+this.options.group+"']" - ].join(',')) : this.element; + var domSiblings = this.options.group ? UI.$('[data-uk-lightbox*="'+this.options.group+'"]') : this.element; domSiblings.each(function() { var ele = UI.$(this); siblings.push({ - 'source': ele.attr('href'), - 'title' : ele.attr('title'), - 'type' : ele.attr("data-lightbox-type") || 'auto', - 'link' : ele + source : ele.attr('href'), + title : ele.attr('data-title') || ele.attr('title'), + type : ele.attr("data-lightbox-type") || 'auto', + link : ele }); }); @@ -134,17 +132,17 @@ item = this.siblings[index]; data = { - "lightbox" : $this, - "source" : item.source, - "type" : item.type, - "index" : index, - "promise" : promise, - "title" : item.title, - "item" : item, - "meta" : { - "content" : '', - "width" : null, - "height" : null + lightbox : $this, + source : item.source, + type : item.type, + index : index, + promise : promise, + title : item.title, + item : item, + meta : { + content : '', + width : null, + height : null } }; @@ -199,14 +197,14 @@ // calculate width var tmp = UI.$('
       
      ').css({ - 'opacity' : 0, - 'position' : 'absolute', - 'top' : 0, - 'left' : 0, - 'width' : '100%', - 'max-width' : $this.modal.dialog.css('max-width'), - 'padding' : $this.modal.dialog.css('padding'), - 'margin' : $this.modal.dialog.css('margin') + opacity : 0, + position : 'absolute', + top : 0, + left : 0, + width : '100%', + maxWidth : $this.modal.dialog.css('max-width'), + padding : $this.modal.dialog.css('padding'), + margin : $this.modal.dialog.css('margin') }), maxwidth, maxheight, w = data.meta.width, h = data.meta.height; tmp.appendTo('body').width(); @@ -254,11 +252,11 @@ this.modal.dialog.animate({width: w + pad, height: h + pad, top: t }, duration, 'swing', function() { $this.modal.loader.addClass('uk-hidden'); - $this.modal.content.css({width:''}).animate({'opacity': 1}, function() { + $this.modal.content.css({width:''}).animate({opacity: 1}, function() { $this.modal.closer.removeClass('uk-hidden'); }); - $this.modal.data({'mwidth': w, 'mheight': h}); + $this.modal.data({mwidth: w, mheight: h}); }); }, @@ -278,16 +276,16 @@ init: function(lightbox) { - lightbox.on("showitem.uk.lightbox", function(e, data){ + lightbox.on('showitem.uk.lightbox', function(e, data){ if (data.type == 'image' || data.source && data.source.match(/\.(jpg|jpeg|png|gif|svg)$/i)) { var resolve = function(source, width, height) { data.meta = { - "content" : '', - "width" : width, - "height" : height + content : '', + width : width, + height : height }; data.type = 'image'; @@ -318,7 +316,7 @@ } }); - UI.plugin("lightbox", "youtube", { + UI.plugin('lightbox', 'youtube', { init: function(lightbox) { @@ -326,14 +324,14 @@ youtubeRegExpShort = /youtu\.be\/(.*)/; - lightbox.on("showitem.uk.lightbox", function(e, data){ + lightbox.on('showitem.uk.lightbox', function(e, data){ var id, matches, resolve = function(id, width, height) { data.meta = { - 'content': '', - 'width': width, - 'height': height + content: '', + width: width, + height: height }; data.type = 'iframe'; @@ -353,7 +351,7 @@ if(!cache[id]) { - var img = new Image(); + var img = new Image(), lowres = false; img.onerror = function(){ cache[id] = {width:640, height:320}; @@ -361,11 +359,22 @@ }; img.onload = function(){ - cache[id] = {width:img.width, height:img.height}; - resolve(id, img.width, img.height); + //youtube default 404 thumb, fall back to lowres + if (img.width == 120 && img.height == 90) { + if (!lowres) { + lowres = true; + img.src = '//img.youtube.com/vi/' + id + '/0.jpg'; + } else { + cache[id] = {width: 640, height: 320}; + resolve(id, cache[id].width, cache[id].height); + } + } else { + cache[id] = {width: img.width, height: img.height}; + resolve(id, img.width, img.height); + } }; - img.src = '//img.youtube.com/vi/'+id+'/0.jpg'; + img.src = '//img.youtube.com/vi/'+id+'/maxresdefault.jpg'; } else { resolve(id, cache[id].width, cache[id].height); @@ -378,21 +387,21 @@ }); - UI.plugin("lightbox", "vimeo", { + UI.plugin('lightbox', 'vimeo', { init: function(lightbox) { var regex = /(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/, matches; - lightbox.on("showitem.uk.lightbox", function(e, data){ + lightbox.on('showitem.uk.lightbox', function(e, data){ var id, resolve = function(id, width, height) { data.meta = { - 'content': '', - 'width': width, - 'height': height + content: '', + width: width, + height: height }; data.type = 'iframe'; @@ -408,7 +417,7 @@ UI.$.ajax({ type : 'GET', - url : 'http://vimeo.com/api/oembed.json?url=' + encodeURI(data.source), + url : '//vimeo.com/api/oembed.json?url=' + encodeURI(data.source), jsonp : 'callback', dataType : 'jsonp', success : function(data) { @@ -427,19 +436,19 @@ } }); - UI.plugin("lightbox", "video", { + UI.plugin('lightbox', 'video', { init: function(lightbox) { - lightbox.on("showitem.uk.lightbox", function(e, data){ + lightbox.on('showitem.uk.lightbox', function(e, data){ var resolve = function(source, width, height) { data.meta = { - 'content': '', - 'width': width, - 'height': height + content: '', + width: width, + height: height }; data.type = 'video'; @@ -473,6 +482,33 @@ }); + UI.plugin('lightbox', 'iframe', { + + init: function (lightbox) { + + lightbox.on('showitem.uk.lightbox', function (e, data) { + + var resolve = function (source, width, height) { + + data.meta = { + content: '', + width: width, + height: height + }; + + data.type = 'iframe'; + + data.promise.resolve(); + }; + + if (data.type === 'iframe' || data.source.match(/\.(html|php)$/)) { + resolve(data.source, (lightbox.options.width || 800), (lightbox.options.height || 600)); + } + }); + + } + }); + function getModal(lightbox) { if (modal) { @@ -498,21 +534,29 @@ modal.modal = UI.modal(modal, {modal:false}); // next / previous - modal.on("swipeRight swipeLeft", function(e) { + modal.on('swipeRight swipeLeft', function(e) { modal.lightbox[e.type=='swipeLeft' ? 'next':'previous'](); - }).on("click", "[data-lightbox-previous], [data-lightbox-next]", function(e){ + }).on('click', '[data-lightbox-previous], [data-lightbox-next]', function(e){ e.preventDefault(); modal.lightbox[UI.$(this).is('[data-lightbox-next]') ? 'next':'previous'](); }); // destroy content on modal hide - modal.on("hide.uk.modal", function(e) { + modal.on('hide.uk.modal', function(e) { modal.content.html(''); }); + var resizeCache = {w: window.innerWidth, h:window.innerHeight}; + UI.$win.on('load resize orientationchange', UI.Utils.debounce(function(e){ - if (modal.is(':visible') && !UI.Utils.isFullscreen()) modal.lightbox.fitSize(); - }.bind(this), 100)); + + if (resizeCache.w !== window.innerWidth && modal.is(':visible') && !UI.Utils.isFullscreen()) { + modal.lightbox.fitSize(); + } + + resizeCache = {w: window.innerWidth, h:window.innerHeight}; + + }, 100)); modal.lightbox = lightbox; @@ -528,10 +572,10 @@ items.forEach(function(item) { group.push(UI.$.extend({ - 'source' : '', - 'title' : '', - 'type' : 'auto', - 'link' : false + source : '', + title : '', + type : 'auto', + link : false }, (typeof(item) == 'string' ? {'source': item} : item))); }); diff --git a/media/uikit-v2/js/components/lightbox.min.js b/media/uikit-v2/js/components/lightbox.min.js new file mode 100644 index 0000000..73f95ac --- /dev/null +++ b/media/uikit-v2/js/components/lightbox.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(i){var t;window.UIkit2&&(t=i(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-lightbox",["uikit"],function(){return t||i(UIkit2)})}(function(i){"use strict";function t(t){if(e)return e.lightbox=t,e;e=i.$(['
      ','
      ','','
      ','
      ',"
      ","
      "].join("")).appendTo("body"),e.dialog=e.find(".uk-modal-dialog:first"),e.content=e.find(".uk-lightbox-content:first"),e.loader=e.find(".uk-modal-spinner:first"),e.closer=e.find(".uk-close.uk-close-alt"),e.modal=i.modal(e,{modal:!1}),e.on("swipeRight swipeLeft",function(i){e.lightbox["swipeLeft"==i.type?"next":"previous"]()}).on("click","[data-lightbox-previous], [data-lightbox-next]",function(t){t.preventDefault(),e.lightbox[i.$(this).is("[data-lightbox-next]")?"next":"previous"]()}),e.on("hide.uk.modal",function(){e.content.html("")});var o={w:window.innerWidth,h:window.innerHeight};return i.$win.on("load resize orientationchange",i.Utils.debounce(function(){o.w!==window.innerWidth&&e.is(":visible")&&!i.Utils.isFullscreen()&&e.lightbox.fitSize(),o={w:window.innerWidth,h:window.innerHeight}},100)),e.lightbox=t,e}var e,o={};return i.component("lightbox",{defaults:{allowfullscreen:!0,duration:400,group:!1,keyboard:!0},index:0,items:!1,boot:function(){i.$html.on("click","[data-uk-lightbox]",function(t){t.preventDefault();var e=i.$(this);e.data("lightbox")||i.lightbox(e,i.Utils.options(e.attr("data-uk-lightbox"))),e.data("lightbox").show(e)}),i.$doc.on("keyup",function(i){if(e&&e.is(":visible")&&e.lightbox.options.keyboard)switch(i.preventDefault(),i.keyCode){case 37:e.lightbox.previous();break;case 39:e.lightbox.next()}})},init:function(){var t=[];if(this.index=0,this.siblings=[],this.element&&this.element.length){var e=this.options.group?i.$('[data-uk-lightbox*="'+this.options.group+'"]'):this.element;e.each(function(){var e=i.$(this);t.push({source:e.attr("href"),title:e.attr("data-title")||e.attr("title"),type:e.attr("data-lightbox-type")||"auto",link:e})}),this.index=e.index(this.element),this.siblings=t}else this.options.group&&this.options.group.length&&(this.siblings=this.options.group);this.trigger("lightbox-init",[this])},show:function(e){this.modal=t(this),this.modal.dialog.stop(),this.modal.content.stop();var o,n,s=this,h=i.$.Deferred();e=e||0,"object"==typeof e&&this.siblings.forEach(function(i,t){e[0]===i.link[0]&&(e=t)}),0>e?e=this.siblings.length-e:this.siblings[e]||(e=0),n=this.siblings[e],o={lightbox:s,source:n.source,type:n.type,index:e,promise:h,title:n.title,item:n,meta:{content:"",width:null,height:null}},this.index=e,this.modal.content.empty(),this.modal.is(":visible")||(this.modal.content.css({width:"",height:""}).empty(),this.modal.modal.show()),this.modal.loader.removeClass("uk-hidden"),h.promise().done(function(){s.data=o,s.fitSize(o)}).fail(function(){o.meta.content='
      Loading resource failed!
      ',o.meta.width=400,o.meta.height=300,s.data=o,s.fitSize(o)}),s.trigger("showitem.uk.lightbox",[o])},fitSize:function(){var t=this,e=this.data,o=this.modal.dialog.outerWidth()-this.modal.dialog.width(),n=parseInt(this.modal.dialog.css("margin-top"),10),s=parseInt(this.modal.dialog.css("margin-bottom"),10),h=n+s,a=e.meta.content,l=t.options.duration;this.siblings.length>1&&(a=[a,'',''].join(""));var d,r,u=i.$("
       
      ").css({opacity:0,position:"absolute",top:0,left:0,width:"100%",maxWidth:t.modal.dialog.css("max-width"),padding:t.modal.dialog.css("padding"),margin:t.modal.dialog.css("margin")}),c=e.meta.width,g=e.meta.height;u.appendTo("body").width(),d=u.width(),r=window.innerHeight-h,u.remove(),this.modal.dialog.find(".uk-modal-caption").remove(),e.title&&(this.modal.dialog.append('
      '+e.title+"
      "),r-=this.modal.dialog.find(".uk-modal-caption").outerHeight()),dr&&(g=Math.floor(r),c=Math.ceil(e.meta.width*(r/e.meta.height))),this.modal.content.css("opacity",0).width(c).html(a),"iframe"==e.type&&this.modal.content.find("iframe:first").height(g);var m=g+o,p=Math.floor(window.innerHeight/2-m/2)-h;0>p&&(p=0),this.modal.closer.addClass("uk-hidden"),t.modal.data("mwidth")==c&&t.modal.data("mheight")==g&&(l=0),this.modal.dialog.animate({width:c+o,height:g+o,top:p},l,"swing",function(){t.modal.loader.addClass("uk-hidden"),t.modal.content.css({width:""}).animate({opacity:1},function(){t.modal.closer.removeClass("uk-hidden")}),t.modal.data({mwidth:c,mheight:g})})},next:function(){this.show(this.siblings[this.index+1]?this.index+1:0)},previous:function(){this.show(this.siblings[this.index-1]?this.index-1:this.siblings.length-1)}}),i.plugin("lightbox","image",{init:function(i){i.on("showitem.uk.lightbox",function(i,t){if("image"==t.type||t.source&&t.source.match(/\.(jpg|jpeg|png|gif|svg)$/i)){var e=function(i,e,o){t.meta={content:'',width:e,height:o},t.type="image",t.promise.resolve()};if(o[t.source])e(t.source,o[t.source].width,o[t.source].height);else{var n=new Image;n.onerror=function(){t.promise.reject("Loading image failed")},n.onload=function(){o[t.source]={width:n.width,height:n.height},e(t.source,o[t.source].width,o[t.source].height)},n.src=t.source}}})}}),i.plugin("lightbox","youtube",{init:function(i){var t=/(\/\/.*?youtube\.[a-z]+)\/watch\?v=([^&]+)&?(.*)/,n=/youtu\.be\/(.*)/;i.on("showitem.uk.lightbox",function(i,s){var h,a,l=function(i,t,o){s.meta={content:'",width:t,height:o},s.type="iframe",s.promise.resolve()};if((a=s.source.match(t))&&(h=a[2]),(a=s.source.match(n))&&(h=a[1]),h){if(o[h])l(h,o[h].width,o[h].height);else{var d=new Image,r=!1;d.onerror=function(){o[h]={width:640,height:320},l(h,o[h].width,o[h].height)},d.onload=function(){120==d.width&&90==d.height?r?(o[h]={width:640,height:320},l(h,o[h].width,o[h].height)):(r=!0,d.src="//img.youtube.com/vi/"+h+"/0.jpg"):(o[h]={width:d.width,height:d.height},l(h,d.width,d.height))},d.src="//img.youtube.com/vi/"+h+"/maxresdefault.jpg"}i.stopImmediatePropagation()}})}}),i.plugin("lightbox","vimeo",{init:function(t){var n,s=/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/;t.on("showitem.uk.lightbox",function(t,h){var a,l=function(i,t,o){h.meta={content:'",width:t,height:o},h.type="iframe",h.promise.resolve()};(n=h.source.match(s))&&(a=n[2],o[a]?l(a,o[a].width,o[a].height):i.$.ajax({type:"GET",url:"//vimeo.com/api/oembed.json?url="+encodeURI(h.source),jsonp:"callback",dataType:"jsonp",success:function(i){o[a]={width:i.width,height:i.height},l(a,o[a].width,o[a].height)}}),t.stopImmediatePropagation())})}}),i.plugin("lightbox","video",{init:function(t){t.on("showitem.uk.lightbox",function(t,e){var n=function(i,t,o){e.meta={content:'',width:t,height:o},e.type="video",e.promise.resolve()};if("video"==e.type||e.source.match(/\.(mp4|webm|ogv)$/i))if(o[e.source])n(e.source,o[e.source].width,o[e.source].height);else var s=i.$('').attr("src",e.source).appendTo("body"),h=setInterval(function(){s[0].videoWidth&&(clearInterval(h),o[e.source]={width:s[0].videoWidth,height:s[0].videoHeight},n(e.source,o[e.source].width,o[e.source].height),s.remove())},20)})}}),i.plugin("lightbox","iframe",{init:function(i){i.on("showitem.uk.lightbox",function(t,o){var n=function(i,t,n){o.meta={content:'",width:t,height:n},o.type="iframe",o.promise.resolve()};("iframe"===o.type||o.source.match(/\.(html|php)$/))&&n(o.source,i.options.width||800,i.options.height||600)})}}),i.lightbox.create=function(t,e){if(t){var o,n=[];return t.forEach(function(t){n.push(i.$.extend({source:"",title:"",type:"auto",link:!1},"string"==typeof t?{source:t}:t))}),o=i.lightbox(i.$.extend({},e,{group:n}))}},i.lightbox}); \ No newline at end of file diff --git a/media/uikit/js/components/nestable.js b/media/uikit-v2/js/components/nestable.js similarity index 85% rename from media/uikit/js/components/nestable.js rename to media/uikit-v2/js/components/nestable.js index a7f423f..f47b4d9 100644 --- a/media/uikit/js/components/nestable.js +++ b/media/uikit-v2/js/components/nestable.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* * Based on Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/ */ @@ -6,13 +6,13 @@ var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-nestable", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-nestable', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -24,7 +24,7 @@ html = UI.$html, touchedlists = [], $win = UI.$win, - draggingElement, dragSource; + draggingElement; var eStart = hasTouch ? 'touchstart' : 'mousedown', eMove = hasTouch ? 'touchmove' : 'mousemove', @@ -40,6 +40,8 @@ listItemClass : 'uk-nestable-item', dragClass : 'uk-nestable-dragged', movingClass : 'uk-nestable-moving', + noChildrenClass : 'uk-nestable-nochildren', + emptyClass : 'uk-nestable-empty', handleClass : '', collapsedClass : 'uk-collapsed', placeholderClass: 'uk-nestable-placeholder', @@ -47,7 +49,7 @@ group : false, maxDepth : 10, threshold : 20, - idlethreshold : 10 + idlethreshold : 10, }, boot: function() { @@ -128,7 +130,8 @@ var onStartEvent = function(e) { - var handle = UI.$(e.target); + var handle = UI.$(e.target), + link = handle.is('a[href]') ? handle:handle.parents('a[href]'); if (e.target === $this.element[0]) { return; @@ -159,6 +162,8 @@ $this.delayMove = function(evt) { + link = false; + evt.preventDefault(); $this.dragStart(e); $this.trigger('start.uk.nestable', [$this]); @@ -170,6 +175,15 @@ $this.delayMove.y = parseInt(e.pageY, 10); $this.delayMove.threshold = $this.options.idlethreshold; + if (link.length && eEnd == 'touchend') { + + $this.one(eEnd, function(){ + if (link && link.attr('href').trim()) { + location.href = link.attr('href'); + } + }); + } + e.preventDefault(); }; @@ -234,10 +248,12 @@ item = {}, attribute, sub = li.children(list.options._listClass); - for (var i = 0; i < li[0].attributes.length; i++) { + for (var i = 0, attr, val; i < li[0].attributes.length; i++) { attribute = li[0].attributes[i]; if (attribute.name.indexOf('data-') === 0) { - item[attribute.name.substr(5)] = UI.Utils.str2json(attribute.value); + attr = attribute.name.substr(5); + val = UI.Utils.str2json(attribute.value); + item[attr] = (val || attribute.value=='false' || attribute.value=='0') ? val:attribute.value; } } @@ -321,7 +337,7 @@ }, toggleItem: function(li) { - this[li.hasClass(this.options.collapsedClass) ? "expandItem":"collapseItem"](li); + this[li.hasClass(this.options.collapsedClass) ? 'expandItem':'collapseItem'](li); }, expandItem: function(li) { @@ -352,7 +368,7 @@ setParent: function(li) { if (li.children(this.options._listClass).length) { - li.addClass("uk-parent"); + li.addClass('uk-parent'); } }, @@ -408,7 +424,7 @@ dragStop: function(e) { - var el = this.placeEl, + var el = UI.$(this.placeEl), root = this.placeEl.parents(this.options._listBaseClass+':first'); this.placeEl.removeClass(this.options.placeholderClass); @@ -416,11 +432,11 @@ if (this.element[0] !== root[0]) { - root.trigger('change.uk.nestable',[el, "added", root, root.data('nestable')]); - this.element.trigger('change.uk.nestable', [el, "removed", this.element, this]); + root.trigger('change.uk.nestable',[root.data('nestable'), el, 'added']); + this.element.trigger('change.uk.nestable', [this, el, 'removed']); } else { - this.element.trigger('change.uk.nestable',[el, "moved", this.element, this]); + this.element.trigger('change.uk.nestable',[this, el, "moved"]); } this.trigger('stop.uk.nestable', [this, el]); @@ -490,8 +506,8 @@ mouse.distAxX = 0; prev = this.placeEl.prev('li'); - // increase horizontal level if previous sibling exists and is not collapsed - if (mouse.distX > 0 && prev.length && !prev.hasClass(opt.collapsedClass)) { + // increase horizontal level if previous sibling exists, is not collapsed, and does not have a 'no children' class + if (mouse.distX > 0 && prev.length && !prev.hasClass(opt.collapsedClass) && !prev.hasClass(opt.noChildrenClass)) { // cannot increase level when item above is collapsed list = prev.find(opt._listClass).last(); @@ -514,15 +530,27 @@ } } } + // decrease horizontal level if (mouse.distX < 0) { - // we can't decrease a level if an item preceeds the current one - next = this.placeEl.next('li'); + + // we cannot decrease the level if an item precedes the current one + next = this.placeEl.next(opt._listItemClass); if (!next.length) { - parent = this.placeEl.parent(); - this.placeEl.closest(opt._listItemClass).after(this.placeEl); - if (!parent.children().length) { - this.unsetParent(parent.parent()); + + // get parent ul of the list item + var parentUl = this.placeEl.closest([opt._listBaseClass, opt._listClass].join(',')); + // try to get the li surrounding the ul + var surroundingLi = parentUl.closest(opt._listItemClass); + + // if the ul is inside of a li (meaning it is nested) + if (surroundingLi.length) { + // we can decrease the horizontal level + surroundingLi.after(this.placeEl); + // if the previous parent ul is now empty + if (!parentUl.children().length) { + this.unsetParent(surroundingLi); + } } } } @@ -531,7 +559,7 @@ var isEmpty = false; // find list item under cursor - var pointX = this.dragEl.offset().left - (window.pageXOffset || document.scrollLeft || 0), + var pointX = e.pageX - (window.pageXOffset || document.scrollLeft || 0), pointY = e.pageY - (window.pageYOffset || document.documentElement.scrollTop); this.pointEl = UI.$(document.elementFromPoint(pointX, pointY)); @@ -562,7 +590,7 @@ // find parent list of item under cursor var pointElRoot = this.element, tmpRoot = this.pointEl.closest(this.options._listBaseClass), - isNewRoot = pointElRoot[0] !== this.pointEl.closest(this.options._listBaseClass)[0]; + isNewRoot = pointElRoot[0] != tmpRoot[0]; /** * move vertical @@ -596,7 +624,7 @@ } if (!parent.children().length) { - if (!parent.data("nestable")) this.unsetParent(parent.parent()); + if (!parent.data('nestable')) this.unsetParent(parent.parent()); } this.checkEmptyList(this.dragRootEl); @@ -614,8 +642,8 @@ list = list ? UI.$(list) : this.element; - if (!list.children().length) { - list.html(''); + if (this.options.emptyClass) { + list[!list.children().length ? 'addClass':'removeClass'](this.options.emptyClass); } } diff --git a/media/uikit-v2/js/components/nestable.min.js b/media/uikit-v2/js/components/nestable.min.js new file mode 100644 index 0000000..8901d2f --- /dev/null +++ b/media/uikit-v2/js/components/nestable.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var s;window.UIkit2&&(s=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-nestable",["uikit"],function(){return s||t(UIkit2)})}(function(t){"use strict";var s,e="ontouchstart"in window,i=t.$html,l=[],a=t.$win,n=e?"touchstart":"mousedown",o=e?"touchmove":"mousemove",h=e?"touchend":"mouseup",r=e?"touchcancel":"mouseup";return t.component("nestable",{defaults:{listBaseClass:"uk-nestable",listClass:"uk-nestable-list",listItemClass:"uk-nestable-item",dragClass:"uk-nestable-dragged",movingClass:"uk-nestable-moving",noChildrenClass:"uk-nestable-nochildren",emptyClass:"uk-nestable-empty",handleClass:"",collapsedClass:"uk-collapsed",placeholderClass:"uk-nestable-placeholder",noDragClass:"uk-nestable-nodrag",group:!1,maxDepth:10,threshold:20,idlethreshold:10},boot:function(){t.$html.on("mousemove touchmove",function(){if(s){var e=s.offset().top;ewindow.innerHeight+t.$win.scrollTop()&&t.$win.scrollTop(t.$win.scrollTop()+Math.ceil(s.height()/2))}}),t.ready(function(s){t.$("[data-uk-nestable]",s).each(function(){var s=t.$(this);s.data("nestable")||t.nestable(s,t.Utils.options(s.attr("data-uk-nestable")))})})},init:function(){var i=this;Object.keys(this.options).forEach(function(t){-1!=String(t).indexOf("Class")&&(i.options["_"+t]="."+i.options[t])}),this.find(this.options._listItemClass).find(">ul").addClass(this.options.listClass),this.checkEmptyList(),this.reset(),this.element.data("nestable-group",this.options.group||t.Utils.uid("nestable-group")),this.find(this.options._listItemClass).each(function(){i.setParent(t.$(this))}),this.on("click","[data-nestable-action]",function(s){if(!i.dragEl&&(e||0===s.button)){s.preventDefault();var l=t.$(s.currentTarget),a=l.data("nestableAction"),n=l.closest(i.options._listItemClass);"collapse"===a&&i.collapseItem(n),"expand"===a&&i.expandItem(n),"toggle"===a&&i.toggleItem(n)}});var l=function(s){var l=t.$(s.target),a=l.is("a[href]")?l:l.parents("a[href]");s.target!==i.element[0]&&(l.is(i.options._noDragClass)||l.closest(i.options._noDragClass).length||l.is("[data-nestable-action]")||l.closest("[data-nestable-action]").length||(i.options.handleClass&&!l.hasClass(i.options.handleClass)&&i.options.handleClass&&(l=l.closest(i.options._handleClass)),!l.length||i.dragEl||!e&&0!==s.button||e&&1!==s.touches.length||(s.originalEvent&&s.originalEvent.touches&&(s=evt.originalEvent.touches[0]),i.delayMove=function(t){a=!1,t.preventDefault(),i.dragStart(s),i.trigger("start.uk.nestable",[i]),i.delayMove=!1},i.delayMove.x=parseInt(s.pageX,10),i.delayMove.y=parseInt(s.pageY,10),i.delayMove.threshold=i.options.idlethreshold,a.length&&"touchend"==h&&i.one(h,function(){a&&a.attr("href").trim()&&(location.href=a.attr("href"))}),s.preventDefault())))},d=function(t){t.originalEvent&&t.originalEvent.touches&&(t=t.originalEvent.touches[0]),i.delayMove&&(Math.abs(t.pageX-i.delayMove.x)>i.delayMove.threshold||Math.abs(t.pageY-i.delayMove.y)>i.delayMove.threshold)&&(window.getSelection().toString()?i.delayMove=!1:i.delayMove(t)),i.dragEl&&(t.preventDefault(),i.dragMove(t),i.trigger("move.uk.nestable",[i]))},p=function(t){i.dragEl&&(t.preventDefault(),i.dragStop(e?t.touches[0]:t)),s=!1,i.delayMove=!1};e?(this.element[0].addEventListener(n,l,!1),window.addEventListener(o,d,!1),window.addEventListener(h,p,!1),window.addEventListener(r,p,!1)):(this.on(n,l),a.on(o,d),a.on(h,p))},serialize:function(){var s,e=0,i=this,l=function(s,e){var a=[],n=s.children(i.options._listItemClass);return n.each(function(){for(var s,n,o,h=t.$(this),r={},d=h.children(i.options._listClass),p=0;p").addClass(this.options.listClass+" "+this.options.dragClass).append(n.clone()),this.dragEl.css("width",n.width()),this.placeEl.addClass(this.options.placeholderClass),s=this.dragEl,this.tmpDragOnSiblings=[n[0].previousSibling,n[0].nextSibling],t.$body.append(this.dragEl),this.dragEl.css({left:o.left,top:o.top});var h,r,d=this.dragEl.find(this.options._listItemClass);for(h=0;hthis.dragDepth&&(this.dragDepth=r);i.addClass(this.options.movingClass)},dragStop:function(){var s=t.$(this.placeEl),e=this.placeEl.parents(this.options._listBaseClass+":first");this.placeEl.removeClass(this.options.placeholderClass),this.dragEl.remove(),this.element[0]!==e[0]?(e.trigger("change.uk.nestable",[e.data("nestable"),s,"added"]),this.element.trigger("change.uk.nestable",[this,s,"removed"])):this.element.trigger("change.uk.nestable",[this,s,"moved"]),this.trigger("stop.uk.nestable",[this,s]),this.reset(),i.removeClass(this.options.movingClass)},dragMove:function(s){var e,i,a,n,o,h=this.options,r=this.mouse,d=this.dragRootEl?this.dragRootEl.data("nestable").options.maxDepth:h.maxDepth;this.dragEl.css({left:s.pageX-r.offsetX,top:s.pageY-r.offsetY}),r.lastX=r.nowX,r.lastY=r.nowY,r.nowX=s.pageX,r.nowY=s.pageY,r.distX=r.nowX-r.lastX,r.distY=r.nowY-r.lastY,r.lastDirX=r.dirX,r.lastDirY=r.dirY,r.dirX=0===r.distX?0:r.distX>0?1:-1,r.dirY=0===r.distY?0:r.distY>0?1:-1;var p=Math.abs(r.distX)>Math.abs(r.distY)?1:0;if(!r.moving)return r.dirAx=p,r.moving=!0,void 0;if(r.dirAx!==p?(r.distAxX=0,r.distAxY=0):(r.distAxX+=Math.abs(r.distX),0!==r.dirX&&r.dirX!==r.lastDirX&&(r.distAxX=0),r.distAxY+=Math.abs(r.distY),0!==r.dirY&&r.dirY!==r.lastDirY&&(r.distAxY=0)),r.dirAx=p,r.dirAx&&r.distAxX>=h.threshold&&(r.distAxX=0,a=this.placeEl.prev("li"),r.distX>0&&a.length&&!a.hasClass(h.collapsedClass)&&!a.hasClass(h.noChildrenClass)&&(e=a.find(h._listClass).last(),o=this.placeEl.parents(h._listClass+","+h._listBaseClass).length,o+this.dragDepth<=d&&(e.length?(e=a.children(h._listClass).last(),e.append(this.placeEl)):(e=t.$("
        ").addClass(h.listClass),e.append(this.placeEl),a.append(e),this.setParent(a)))),r.distX<0&&(n=this.placeEl.next(h._listItemClass),!n.length))){var c=this.placeEl.closest([h._listBaseClass,h._listClass].join(",")),g=c.closest(h._listItemClass);g.length&&(g.after(this.placeEl),c.children().length||this.unsetParent(g))}var u=!1,f=s.pageX-(window.pageXOffset||document.scrollLeft||0),m=s.pageY-(window.pageYOffset||document.documentElement.scrollTop);if(this.pointEl=t.$(document.elementFromPoint(f,m)),h.handleClass&&this.pointEl.hasClass(h.handleClass))this.pointEl=this.pointEl.closest(h._listItemClass);else{var C=this.pointEl.closest(h._listItemClass);C.length&&(this.pointEl=C)}if(!this.placeEl.find(this.pointEl).length){if(this.pointEl.data("nestable")&&!this.pointEl.children().length)u=!0,this.checkEmptyList(this.pointEl);else if(!this.pointEl.length||!this.pointEl.hasClass(h.listItemClass))return;var v=this.element,E=this.pointEl.closest(this.options._listBaseClass),b=v[0]!=E[0];if(!r.dirAx||b||u){if(b&&h.group!==E.data("nestable-group"))return;if(l.push(v),o=this.dragDepth-1+this.pointEl.parents(h._listClass+","+h._listBaseClass).length,o>d)return;var X=s.pageY', @@ -74,7 +72,7 @@ if(!containers[this.options.pos]) { containers[this.options.pos] = UI.$('
        ').appendTo('body').on("click", ".uk-notify-message", function(){ - var message = UI.$(this).data("notifyMessage"); + var message = UI.$(this).data('notifyMessage'); message.element.trigger('manualclose.uk.notify', [message]); message.close(); @@ -93,15 +91,15 @@ show: function() { - if (this.element.is(":visible")) return; + if (this.element.is(':visible')) return; var $this = this; containers[this.options.pos].show().prepend(this.element); - var marginbottom = parseInt(this.element.css("margin-bottom"), 10); + var marginbottom = parseInt(this.element.css('margin-bottom'), 10); - this.element.css({"opacity":0, "margin-top": -1*this.element.outerHeight(), "margin-bottom":0}).animate({"opacity":1, "margin-top": 0, "margin-bottom":marginbottom}, function(){ + this.element.css({opacity:0, marginTop: -1*this.element.outerHeight(), marginBottom:0}).animate({opacity:1, marginTop:0, marginBottom:marginbottom}, function(){ if ($this.options.timeout) { @@ -141,7 +139,7 @@ if (instantly) { finalize(); } else { - this.element.animate({"opacity":0, "margin-top": -1* this.element.outerHeight(), "margin-bottom":0}, function(){ + this.element.animate({opacity:0, marginTop: -1* this.element.outerHeight(), marginBottom:0}, function(){ finalize(); }); } diff --git a/media/uikit-v2/js/components/notify.min.js b/media/uikit-v2/js/components/notify.min.js new file mode 100644 index 0000000..bd32f5f --- /dev/null +++ b/media/uikit-v2/js/components/notify.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-notify",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";var e={},i={},s=function(e){return"string"==t.$.type(e)&&(e={message:e}),arguments[1]&&(e=t.$.extend(e,"string"==t.$.type(arguments[1])?{status:arguments[1]}:arguments[1])),new n(e).show()},o=function(t,e){var s;if(t)for(s in i)t===i[s].group&&i[s].close(e);else for(s in i)i[s].close(e)},n=function(s){this.options=t.$.extend({},n.defaults,s),this.uuid=t.Utils.uid("notifymsg"),this.element=t.$(['
        ','',"
        ","
        "].join("")).data("notifyMessage",this),this.content(this.options.message),this.options.status&&(this.element.addClass("uk-notify-message-"+this.options.status),this.currentstatus=this.options.status),this.group=this.options.group,i[this.uuid]=this,e[this.options.pos]||(e[this.options.pos]=t.$('
        ').appendTo("body").on("click",".uk-notify-message",function(){var e=t.$(this).data("notifyMessage");e.element.trigger("manualclose.uk.notify",[e]),e.close()}))};return t.$.extend(n.prototype,{uuid:!1,element:!1,timout:!1,currentstatus:"",group:!1,show:function(){if(!this.element.is(":visible")){var t=this;e[this.options.pos].show().prepend(this.element);var i=parseInt(this.element.css("margin-bottom"),10);return this.element.css({opacity:0,marginTop:-1*this.element.outerHeight(),marginBottom:0}).animate({opacity:1,marginTop:0,marginBottom:i},function(){if(t.options.timeout){var e=function(){t.close()};t.timeout=setTimeout(e,t.options.timeout),t.element.hover(function(){clearTimeout(t.timeout)},function(){t.timeout=setTimeout(e,t.options.timeout)})}}),this}},close:function(t){var s=this,o=function(){s.element.remove(),e[s.options.pos].children().length||e[s.options.pos].hide(),s.options.onClose.apply(s,[]),s.element.trigger("close.uk.notify",[s]),delete i[s.uuid]};this.timeout&&clearTimeout(this.timeout),t?o():this.element.animate({opacity:0,marginTop:-1*this.element.outerHeight(),marginBottom:0},function(){o()})},content:function(t){var e=this.element.find(">div");return t?(e.html(t),this):e.html()},status:function(t){return t?(this.element.removeClass("uk-notify-message-"+this.currentstatus).addClass("uk-notify-message-"+t),this.currentstatus=t,this):this.currentstatus}}),n.defaults={message:"",status:"",timeout:5e3,group:null,pos:"top-center",onClose:function(){}},t.notify=s,t.notify.message=n,t.notify.closeAll=o,s}); \ No newline at end of file diff --git a/media/uikit/js/components/pagination.js b/media/uikit-v2/js/components/pagination.js similarity index 76% rename from media/uikit/js/components/pagination.js rename to media/uikit-v2/js/components/pagination.js index fa01908..5dde9f4 100644 --- a/media/uikit/js/components/pagination.js +++ b/media/uikit-v2/js/components/pagination.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* * Based on simplePagination - Copyright (c) 2012 Flavius Matis - http://flaviusmatis.github.com/simplePagination.js/ (MIT) */ @@ -6,13 +6,13 @@ var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-pagination", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-pagination', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -26,9 +26,9 @@ items : 1, itemsOnPage : 1, pages : 0, - displayedPages : 3, - edges : 3, - currentPage : 1, + displayedPages : 7, + edges : 1, + currentPage : 0, lblPrev : false, lblNext : false, onSelectPage : function() {} @@ -39,11 +39,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-pagination]", context).each(function(){ + UI.$('[data-uk-pagination]', context).each(function(){ var ele = UI.$(this); - if (!ele.data("pagination")) { - var obj = UI.pagination(ele, UI.Utils.options(ele.attr("data-uk-pagination"))); + if (!ele.data('pagination')) { + UI.pagination(ele, UI.Utils.options(ele.attr('data-uk-pagination'))); } }); }); @@ -54,12 +54,12 @@ var $this = this; this.pages = this.options.pages ? this.options.pages : Math.ceil(this.options.items / this.options.itemsOnPage) ? Math.ceil(this.options.items / this.options.itemsOnPage) : 1; - this.currentPage = this.options.currentPage - 1; + this.currentPage = this.options.currentPage; this.halfDisplayed = this.options.displayedPages / 2; - this.on("click", "a[data-page]", function(e){ + this.on('click', 'a[data-page]', function(e){ e.preventDefault(); - $this.selectPage(UI.$(this).data("page")); + $this.selectPage(UI.$(this).data('page')); }); this._render(); @@ -93,7 +93,7 @@ this.element.empty(); // Generate Prev link - if (o.lblPrev) this._append(o.currentPage - 1, {text: o.lblPrev}); + if (o.lblPrev) this._append(this.currentPage - 1, {text: o.lblPrev}); // Generate start edges if (interval.start > 0 && o.edges > 0) { @@ -127,18 +127,17 @@ } // Generate Next link (unless option is set for at front) - if (o.lblNext) this._append(o.currentPage + 1, {text: o.lblNext}); + if (o.lblNext) this._append(this.currentPage + 1, {text: o.lblNext}); }, _append: function(pageIndex, opts) { - var $this = this, item, link, options; + var item, options; pageIndex = pageIndex < 0 ? 0 : (pageIndex < this.pages ? pageIndex : this.pages - 1); options = UI.$.extend({ text: pageIndex + 1 }, opts); - item = (pageIndex == this.currentPage) ? '
      • ' + (options.text) + '
      • ' - : '
      • '+options.text+'
      • '; + item = (pageIndex == this.currentPage) ? '
      • ' + (options.text) + '
      • ' : '
      • '+options.text+'
      • '; this.element.append(item); } diff --git a/media/uikit-v2/js/components/pagination.min.js b/media/uikit-v2/js/components/pagination.min.js new file mode 100644 index 0000000..52dafc1 --- /dev/null +++ b/media/uikit-v2/js/components/pagination.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-pagination",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";return t.component("pagination",{defaults:{items:1,itemsOnPage:1,pages:0,displayedPages:7,edges:1,currentPage:0,lblPrev:!1,lblNext:!1,onSelectPage:function(){}},boot:function(){t.ready(function(e){t.$("[data-uk-pagination]",e).each(function(){var e=t.$(this);e.data("pagination")||t.pagination(e,t.Utils.options(e.attr("data-uk-pagination")))})})},init:function(){var e=this;this.pages=this.options.pages?this.options.pages:Math.ceil(this.options.items/this.options.itemsOnPage)?Math.ceil(this.options.items/this.options.itemsOnPage):1,this.currentPage=this.options.currentPage,this.halfDisplayed=this.options.displayedPages/2,this.on("click","a[data-page]",function(i){i.preventDefault(),e.selectPage(t.$(this).data("page"))}),this._render()},_getInterval:function(){return{start:Math.ceil(this.currentPage>this.halfDisplayed?Math.max(Math.min(this.currentPage-this.halfDisplayed,this.pages-this.options.displayedPages),0):0),end:Math.ceil(this.currentPage>this.halfDisplayed?Math.min(this.currentPage+this.halfDisplayed,this.pages):Math.min(this.options.displayedPages,this.pages))}},render:function(t){this.pages=t?t:this.pages,this._render()},selectPage:function(t,e){this.currentPage=t,this.render(e),this.options.onSelectPage.apply(this,[t]),this.trigger("select.uk.pagination",[t,this])},_render:function(){var t,e=this.options,i=this._getInterval();if(this.element.empty(),e.lblPrev&&this._append(this.currentPage-1,{text:e.lblPrev}),i.start>0&&e.edges>0){var s=Math.min(e.edges,i.start);for(t=0;s>t;t++)this._append(t);e.edges..."):i.start-e.edges==1&&this._append(e.edges)}for(t=i.start;t0){this.pages-e.edges>i.end&&this.pages-e.edges-i.end!=1?this.element.append("
      • ...
      • "):this.pages-e.edges-i.end==1&&this._append(i.end++);var a=Math.max(this.pages-e.edges,i.end);for(t=a;te?0:e'+a.text+"":'
      • '+a.text+"
      • ",this.element.append(s)}}),t.pagination}); \ No newline at end of file diff --git a/media/uikit/js/components/parallax.js b/media/uikit-v2/js/components/parallax.js similarity index 77% rename from media/uikit/js/components/parallax.js rename to media/uikit-v2/js/components/parallax.js index 3175027..02fe65a 100644 --- a/media/uikit/js/components/parallax.js +++ b/media/uikit-v2/js/components/parallax.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-parallax", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-parallax', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -25,11 +25,11 @@ scrolltop = UI.$win.scrollTop(); - window.requestAnimationFrame.apply(window, [function(){ + window.requestAnimationFrame(function(){ for (var i=0; i < parallaxes.length; i++) { parallaxes[i].process(); } - }]); + }); }; @@ -60,7 +60,7 @@ for (var t in transforms) { if (el.style[t] !== undefined) { - el.style[t] = "translate3d(1px,1px,1px)"; + el.style[t] = 'translate3d(1px,1px,1px)'; has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]); } } @@ -71,8 +71,8 @@ })(); // listen to scroll and resize - UI.$doc.on("scrolling.uk.document", checkParallaxes); - UI.$win.on("load resize orientationchange", UI.Utils.debounce(function(){ + UI.$doc.on('scrolling.uk.document', checkParallaxes); + UI.$win.on('load resize orientationchange', UI.Utils.debounce(function(){ wh = window.innerHeight; checkParallaxes(); }, 50)); @@ -84,8 +84,8 @@ var parallax = UI.$(this); - if (!parallax.data("parallax")) { - var obj = UI.parallax(parallax, UI.Utils.options(parallax.attr("data-uk-parallax"))); + if (!parallax.data('parallax')) { + UI.parallax(parallax, UI.Utils.options(parallax.attr('data-uk-parallax'))); } }); }); @@ -122,7 +122,7 @@ dir = (start < end ? 1:-1); } - this.props[prop] = { 'start': start, 'end': end, 'dir': dir, 'diff': diff }; + this.props[prop] = { start: start, end: end, dir: dir, diff: diff }; }.bind(this)); @@ -185,7 +185,8 @@ update: function(percent) { - var css = {'transform':''}, + var $this = this, + css = {transform:'', filter:''}, compercent = percent * (1 - (this.velocity - (this.velocity * percent))), opts, val; @@ -215,40 +216,69 @@ switch(prop) { // transforms - case "x": + case 'x': css.transform += supports3d ? ' translate3d('+val+'px, 0, 0)':' translateX('+val+'px)'; break; - case "xp": + case 'xp': css.transform += supports3d ? ' translate3d('+val+'%, 0, 0)':' translateX('+val+'%)'; break; - case "y": + case 'y': css.transform += supports3d ? ' translate3d(0, '+val+'px, 0)':' translateY('+val+'px)'; break; - case "yp": + case 'yp': css.transform += supports3d ? ' translate3d(0, '+val+'%, 0)':' translateY('+val+'%)'; break; - case "rotate": + case 'rotate': css.transform += ' rotate('+val+'deg)'; break; - case "scale": + case 'scale': css.transform += ' scale('+val+')'; break; // bg image - case "bg": + case 'bg': + + // don't move if image height is too small + // if ($this.element.data('bgsize') && ($this.element.data('bgsize').h + val - window.innerHeight) < 0) { + // break; + // } + css['background-position'] = '50% '+val+'px'; break; - case "bgp": + case 'bgp': css['background-position'] = '50% '+val+'%'; break; // color - case "color": - case "background-color": - case "border-color": + case 'color': + case 'background-color': + case 'border-color': css[prop] = calcColor(opts.start, opts.end, compercent); break; + // CSS Filter + case 'blur': + css.filter += ' blur('+val+'px)'; + break; + case 'hue': + css.filter += ' hue-rotate('+val+'deg)'; + break; + case 'grayscale': + css.filter += ' grayscale('+val+'%)'; + break; + case 'invert': + css.filter += ' invert('+val+'%)'; + break; + case 'fopacity': + css.filter += ' opacity('+val+'%)'; + break; + case 'saturate': + css.filter += ' saturate('+val+'%)'; + break; + case 'sepia': + css.filter += ' sepia('+val+'%)'; + break; + default: css[prop] = val; break; @@ -256,6 +286,10 @@ }.bind(this)); + if (css.filter) { + css['-webkit-filter'] = css.filter; + } + this.element.css(css); this._percent = compercent; @@ -283,29 +317,40 @@ function initBgImageParallax(obj, prop, opts) { - var img = new Image(), url, loaded, element, size, check, ratio, width, height; + var img = new Image(), url, element, size, check, ratio, width, height; - element = obj.element.css({'background-size': 'cover', 'background-repeat': 'no-repeat'}); + element = obj.element.css({backgroundSize: 'cover', backgroundRepeat: 'no-repeat'}); url = element.css('background-image').replace(/^url\(/g, '').replace(/\)$/g, '').replace(/("|')/g, ''); check = function() { - var w = element.width(), h = element.height(), extra = (prop=='bg') ? opts.diff : (opts.diff/100) * h; + var w = element.innerWidth(), h = element.innerHeight(), extra = (prop=='bg') ? opts.diff : (opts.diff/100) * h; h += extra; w += Math.ceil(extra * ratio); + if (w-extra < size.w && h < size.h) { + return obj.element.css({backgroundSize: 'auto'}); + } + // if element height < parent height (gap underneath) if ((w / ratio) < h) { + width = Math.ceil(h * ratio); height = h; + if (h > window.innerHeight) { + width = width * 1.2; + height = height * 1.2; + } + // element width < parent width (gap to right) } else { + width = w; height = Math.ceil(w / ratio); } - obj.element.css({'background-size': (width+'px '+height+'px')}); + element.css({backgroundSize: (width+'px '+height+'px')}).data('bgsize', {w:width,h:height}); }; img.onerror = function(){ @@ -313,10 +358,10 @@ }; img.onload = function(){ - size = {w:img.width, height:img.height}; + size = {w:img.width, h:img.height}; ratio = img.width / img.height; - UI.$win.on("load resize orientationchange", UI.Utils.debounce(function(){ + UI.$win.on('load resize orientationchange', UI.Utils.debounce(function(){ check(); }, 50)); diff --git a/media/uikit-v2/js/components/parallax.min.js b/media/uikit-v2/js/components/parallax.min.js new file mode 100644 index 0000000..993c3b9 --- /dev/null +++ b/media/uikit-v2/js/components/parallax.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(e){var t;window.UIkit2&&(t=e(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-parallax",["uikit"],function(){return t||e(UIkit2)})}(function(e){"use strict";function t(t,a,r){var i,n,s,o,c,l,p,f=new Image;return n=t.element.css({backgroundSize:"cover",backgroundRepeat:"no-repeat"}),i=n.css("background-image").replace(/^url\(/g,"").replace(/\)$/g,"").replace(/("|')/g,""),o=function(){var e=n.innerWidth(),i=n.innerHeight(),o="bg"==a?r.diff:r.diff/100*i;return i+=o,e+=Math.ceil(o*c),e-oe/c?(l=Math.ceil(i*c),p=i,i>window.innerHeight&&(l=1.2*l,p=1.2*p)):(l=e,p=Math.ceil(e/c)),n.css({backgroundSize:l+"px "+p+"px"}).data("bgsize",{w:l,h:p}),void 0)},f.onerror=function(){},f.onload=function(){s={w:f.width,h:f.height},c=f.width/f.height,e.$win.on("load resize orientationchange",e.Utils.debounce(function(){o()},50)),o()},f.src=i,!0}function a(e,t,a){return e=i(e),t=i(t),a=a||0,r(e,t,a)}function r(e,t,a){var r="rgba("+parseInt(e[0]+a*(t[0]-e[0]),10)+","+parseInt(e[1]+a*(t[1]-e[1]),10)+","+parseInt(e[2]+a*(t[2]-e[2]),10)+","+(e&&t?parseFloat(e[3]+a*(t[3]-e[3])):1);return r+=")"}function i(e){var t,a;return a=(t=/#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/.exec(e))?[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16),1]:(t=/#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/.exec(e))?[17*parseInt(t[1],16),17*parseInt(t[2],16),17*parseInt(t[3],16),1]:(t=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(e))?[parseInt(t[1]),parseInt(t[2]),parseInt(t[3]),1]:(t=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9\.]*)\s*\)/.exec(e))?[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10),parseFloat(t[4])]:p[e]||[255,255,255,0]}var n=[],s=!1,o=0,c=window.innerHeight,l=function(){o=e.$win.scrollTop(),window.requestAnimationFrame(function(){for(var e=0;e0&&"none"!==e}(),e.$doc.on("scrolling.uk.document",l),e.$win.on("load resize orientationchange",e.Utils.debounce(function(){c=window.innerHeight,l()},50)),e.ready(function(t){e.$("[data-uk-parallax]",t).each(function(){var t=e.$(this);t.data("parallax")||e.parallax(t,e.Utils.options(t.attr("data-uk-parallax")))})})},init:function(){this.base=this.options.target?e.$(this.options.target):this.element,this.props={},this.velocity=this.options.velocity||1;var t=["target","velocity","viewport","plugins","media"];Object.keys(this.options).forEach(function(e){if(-1===t.indexOf(e)){var a,r,i,n,s=String(this.options[e]).split(",");e.match(/color/i)?(a=s[1]?s[0]:this._getStartValue(e),r=s[1]?s[1]:s[0],a||(a="rgba(255,255,255,0)")):(a=parseFloat(s[1]?s[0]:this._getStartValue(e)),r=parseFloat(s[1]?s[1]:s[0]),n=r>a?r-a:a-r,i=r>a?1:-1),this.props[e]={start:a,end:r,dir:i,diff:n}}}.bind(this)),n.push(this)},process:function(){if(this.options.media)switch(typeof this.options.media){case"number":if(window.innerWidtho+c?a=0:o>r+i?a=1:c>r+i?a=(c>o?o:o-c)/(r+i):(e=o+c-r,t=Math.round(e/((c+i)/100)),a=t/100),a},update:function(e){var r,i,n={transform:"",filter:""},o=e*(1-(this.velocity-this.velocity*e));0>o&&(o=0),o>1&&(o=1),(void 0===this._percent||this._percent!=o)&&(Object.keys(this.props).forEach(function(c){switch(r=this.props[c],0===e?i=r.start:1===e?i=r.end:void 0!==r.diff&&(i=r.start+r.diff*o*r.dir),"bg"!=c&&"bgp"!=c||this._bgcover||(this._bgcover=t(this,c,r)),c){case"x":n.transform+=s?" translate3d("+i+"px, 0, 0)":" translateX("+i+"px)";break;case"xp":n.transform+=s?" translate3d("+i+"%, 0, 0)":" translateX("+i+"%)";break;case"y":n.transform+=s?" translate3d(0, "+i+"px, 0)":" translateY("+i+"px)";break;case"yp":n.transform+=s?" translate3d(0, "+i+"%, 0)":" translateY("+i+"%)";break;case"rotate":n.transform+=" rotate("+i+"deg)";break;case"scale":n.transform+=" scale("+i+")";break;case"bg":n["background-position"]="50% "+i+"px";break;case"bgp":n["background-position"]="50% "+i+"%";break;case"color":case"background-color":case"border-color":n[c]=a(r.start,r.end,o);break;case"blur":n.filter+=" blur("+i+"px)";break;case"hue":n.filter+=" hue-rotate("+i+"deg)";break;case"grayscale":n.filter+=" grayscale("+i+"%)";break;case"invert":n.filter+=" invert("+i+"%)";break;case"fopacity":n.filter+=" opacity("+i+"%)";break;case"saturate":n.filter+=" saturate("+i+"%)";break;case"sepia":n.filter+=" sepia("+i+"%)";break;default:n[c]=i}}.bind(this)),n.filter&&(n["-webkit-filter"]=n.filter),this.element.css(n),this._percent=o)},_getStartValue:function(e){var t=0;switch(e){case"scale":t=1;break;default:t=this.element.css(e)}return t||0}});var p={black:[0,0,0,1],blue:[0,0,255,1],brown:[165,42,42,1],cyan:[0,255,255,1],fuchsia:[255,0,255,1],gold:[255,215,0,1],green:[0,128,0,1],indigo:[75,0,130,1],khaki:[240,230,140,1],lime:[0,255,0,1],magenta:[255,0,255,1],maroon:[128,0,0,1],navy:[0,0,128,1],olive:[128,128,0,1],orange:[255,165,0,1],pink:[255,192,203,1],purple:[128,0,128,1],violet:[128,0,128,1],red:[255,0,0,1],silver:[192,192,192,1],white:[255,255,255,1],yellow:[255,255,0,1],transparent:[255,255,255,0]};return e.parallax}); \ No newline at end of file diff --git a/media/uikit/js/components/search.js b/media/uikit-v2/js/components/search.js similarity index 74% rename from media/uikit/js/components/search.js rename to media/uikit-v2/js/components/search.js index 8de251c..88373f0 100644 --- a/media/uikit/js/components/search.js +++ b/media/uikit-v2/js/components/search.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-search", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-search', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -45,9 +45,9 @@ renderer: function(data) { - var $this = this, opts = this.options; + var opts = this.options; - this.dropdown.append(this.template({"items":data.results || [], "msgResultsHeader":opts.msgResultsHeader, "msgMoreResults": opts.msgMoreResults, "msgNoResults": opts.msgNoResults})); + this.dropdown.append(this.template({items:data.results || [], msgResultsHeader:opts.msgResultsHeader, msgMoreResults: opts.msgMoreResults, msgNoResults: opts.msgNoResults})); this.show(); } }, @@ -55,11 +55,11 @@ boot: function() { // init code - UI.$html.on("focus.search.uikit", "[data-uk-search]", function(e) { + UI.$html.on('focus.search.uikit', '[data-uk-search]', function(e) { var ele =UI.$(this); - if (!ele.data("search")) { - var obj = UI.search(ele, UI.Utils.options(ele.attr("data-uk-search"))); + if (!ele.data('search')) { + UI.search(ele, UI.Utils.options(ele.attr('data-uk-search'))); } }); }, @@ -72,10 +72,10 @@ this.autocomplete.dropdown.addClass('uk-dropdown-search'); this.autocomplete.input.on("keyup", function(){ - $this.element[$this.autocomplete.input.val() ? "addClass":"removeClass"]("uk-active"); + $this.element[$this.autocomplete.input.val() ? 'addClass':'removeClass']('uk-active'); }).closest("form").on("reset", function(){ - $this.value=""; - $this.element.removeClass("uk-active"); + $this.value = ''; + $this.element.removeClass('uk-active'); }); this.on('selectitem.uk.autocomplete', function(e, data) { @@ -86,7 +86,7 @@ } }); - this.element.data("search", this); + this.element.data('search', this); } }); }); diff --git a/media/uikit-v2/js/components/search.min.js b/media/uikit-v2/js/components/search.min.js new file mode 100644 index 0000000..ddf4585 --- /dev/null +++ b/media/uikit-v2/js/components/search.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(e){var s;window.UIkit2&&(s=e(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-search",["uikit"],function(){return s||e(UIkit2)})}(function(e){"use strict";e.component("search",{defaults:{msgResultsHeader:"Search Results",msgMoreResults:"More Results",msgNoResults:"No results found",template:'',renderer:function(e){var s=this.options;this.dropdown.append(this.template({items:e.results||[],msgResultsHeader:s.msgResultsHeader,msgMoreResults:s.msgMoreResults,msgNoResults:s.msgNoResults})),this.show()}},boot:function(){e.$html.on("focus.search.uikit","[data-uk-search]",function(){var s=e.$(this);s.data("search")||e.search(s,e.Utils.options(s.attr("data-uk-search")))})},init:function(){var s=this;this.autocomplete=e.autocomplete(this.element,this.options),this.autocomplete.dropdown.addClass("uk-dropdown-search"),this.autocomplete.input.on("keyup",function(){s.element[s.autocomplete.input.val()?"addClass":"removeClass"]("uk-active")}).closest("form").on("reset",function(){s.value="",s.element.removeClass("uk-active")}),this.on("selectitem.uk.autocomplete",function(e,t){t.url?location.href=t.url:t.moreresults&&s.autocomplete.input.closest("form").submit()}),this.element.data("search",this)}})}); \ No newline at end of file diff --git a/media/uikit/js/components/slider.js b/media/uikit-v2/js/components/slider.js similarity index 63% rename from media/uikit/js/components/slider.js rename to media/uikit-v2/js/components/slider.js index dc77cd4..ee5dfa6 100644 --- a/media/uikit/js/components/slider.js +++ b/media/uikit-v2/js/components/slider.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-slider", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-slider', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -22,10 +22,13 @@ UI.component('slider', { defaults: { - center : false, - threshold : 10, - infinite : true, - activecls : 'uk-active' + center : false, + threshold : 10, + infinite : true, + autoplay : false, + autoplayInterval : 7000, + pauseOnHover : true, + activecls : 'uk-active' }, boot: function() { @@ -35,11 +38,11 @@ setTimeout(function(){ - UI.$("[data-uk-slider]", context).each(function(){ + UI.$('[data-uk-slider]', context).each(function(){ var ele = UI.$(this); - if (!ele.data("slider")) { + if (!ele.data('slider')) { UI.slider(ele, UI.Utils.options(ele.attr('data-uk-slider'))); } }); @@ -55,11 +58,11 @@ this.container = this.element.find('.uk-slider'); this.focus = 0; - UI.$win.on("resize load", UI.Utils.debounce(function() { - $this.resize(true); + UI.$win.on('resize load', UI.Utils.debounce(function() { + $this.update(true); }, 100)); - this.on("click.uikit.slider", '[data-uk-slider-item]', function(e) { + this.on('click.uk.slider', '[data-uk-slider-item]', function(e) { e.preventDefault(); @@ -67,80 +70,104 @@ if ($this.focus == item) return; + // stop autoplay + $this.stop(); + switch(item) { case 'next': case 'previous': $this[item=='next' ? 'next':'previous'](); break; default: - $this.updateFocus(parseInt(slide, 10)); + $this.updateFocus(parseInt(item, 10)); } }); - this.container.on('touchstart mousedown', function(evt) { + this.container.on({ - if (evt.originalEvent && evt.originalEvent.touches) { - evt = evt.originalEvent.touches[0]; - } + 'touchstart mousedown': function(evt) { - // ignore right click button - if (evt.button && evt.button==2 || !$this.active) { - return; - } - - anchor = UI.$(evt.target).is('a') ? UI.$(evt.target) : UI.$(evt.target).parents('a:first'); - dragged = false; - - if (anchor.length) { - - anchor.one('click', function(e){ - if (dragged) e.preventDefault(); - }); - } - - delayIdle = function(e) { - - dragged = true; - dragging = $this; - store = { - touchx : parseInt(e.pageX, 10), - dir : 1, - focus : $this.focus, - base : $this.options.center ? 'center':'area' - }; - - if (e.originalEvent && e.originalEvent.touches) { - e = e.originalEvent.touches[0]; + if (evt.originalEvent && evt.originalEvent.touches) { + evt = evt.originalEvent.touches[0]; } - dragging.element.data({ - 'pointer-start': {x: parseInt(e.pageX, 10), y: parseInt(e.pageY, 10)}, - 'pointer-pos-start': $this.pos - }); + // ignore right click button + if (evt.button && evt.button==2 || !$this.active) { + return; + } - $this.container.addClass('uk-drag'); + // stop autoplay + $this.stop(); - delayIdle = false; - }; + anchor = UI.$(evt.target).is('a') ? UI.$(evt.target) : UI.$(evt.target).parents('a:first'); + dragged = false; - delayIdle.x = parseInt(evt.pageX, 10); - delayIdle.threshold = $this.options.threshold; + if (anchor.length) { + anchor.one('click', function(e){ + if (dragged) e.preventDefault(); + }); + } + + delayIdle = function(e) { + + dragged = true; + dragging = $this; + store = { + touchx : parseInt(e.pageX, 10), + dir : 1, + focus : $this.focus, + base : $this.options.center ? 'center':'area' + }; + + if (e.originalEvent && e.originalEvent.touches) { + e = e.originalEvent.touches[0]; + } + + dragging.element.data({ + 'pointer-start': {x: parseInt(e.pageX, 10), y: parseInt(e.pageY, 10)}, + 'pointer-pos-start': $this.pos + }); + + $this.container.addClass('uk-drag'); + + delayIdle = false; + }; + + delayIdle.x = parseInt(evt.pageX, 10); + delayIdle.threshold = $this.options.threshold; + + }, + + mouseenter: function() { if ($this.options.pauseOnHover) $this.hovering = true; }, + mouseleave: function() { $this.hovering = false; } }); - this.resize(true); + this.update(true); this.on('display.uk.check', function(){ if ($this.element.is(":visible")) { - $this.resize(true); + $this.update(true); } }); // prevent dragging links + images this.element.find('a,img').attr('draggable', 'false'); + + // Set autoplay + if (this.options.autoplay) { + this.start(); + } + + UI.domObserve(this.element, function(e) { + if ($this.element.children(':not([data-slider-slide])').length) { + $this.update(true); + } + }); + }, - resize: function(focus) { + update: function(focus) { var $this = this, pos = 0, maxheight = 0, item, width, cwidth, size; @@ -151,7 +178,7 @@ this.items.each(function(idx){ - item = UI.$(this); + item = UI.$(this).attr('data-slider-slide', idx); size = item.css({'left': '', 'width':''})[0].getBoundingClientRect(); width = size.width; cwidth = item.width(); @@ -164,7 +191,7 @@ this.container.css({'min-width': pos, 'min-height': maxheight}); - if (this.options.infinite && pos <= (2*this.vp) && !this.itemsResized) { + if (this.options.infinite && (pos <= (2*this.vp) || this.items.length < 5) && !this.itemsResized) { // fill with cloned items this.container.children().each(function(idx){ @@ -175,7 +202,7 @@ this.itemsResized = true; - return this.resize(); + return this.update(); } this.cw = pos; @@ -188,7 +215,7 @@ 'transform': '' }); - this.updateFocus(0); + if (focus) this.updateFocus(this.focus); }, updatePos: function(pos) { @@ -208,7 +235,7 @@ dir = dir || (idx > this.focus ? 1:-1); - var $this = this, item = this.items.eq(idx), area, i; + var item = this.items.eq(idx), area, i; if (this.options.infinite) { this.infinite(idx, dir); @@ -250,18 +277,36 @@ area += this.items.eq(i).data('width'); - if (area >= this.vp) { + if (area == this.vp) { idx = i; break; } + + if (area > this.vp) { + idx = (i < this.items.length-1) ? i+1 : i; + break; + } } - this.updatePos(this.items.eq(idx).data('left')*-1); + if (area > this.vp) { + this.updatePos((this.container.width() - this.vp) * -1); + } else { + this.updatePos(this.items.eq(idx).data('left')*-1); + } } } } } + // mark elements + var left = this.items.eq(idx).data('left'); + + this.items.removeClass('uk-slide-before uk-slide-after').each(function(i){ + if (i!==idx) { + UI.$(this).addClass(UI.$(this).data('left') < left ? 'uk-slide-before':'uk-slide-after'); + } + }); + this.focus = idx; this.trigger('focusitem.uk.slider', [idx,this.items.eq(idx),this]); @@ -281,9 +326,25 @@ this.updateFocus(focus, -1); }, + start: function() { + + this.stop(); + + var $this = this; + + this.interval = setInterval(function() { + if (!$this.hovering) $this.next(); + }, this.options.autoplayInterval); + + }, + + stop: function() { + if (this.interval) clearInterval(this.interval); + }, + infinite: function(baseidx, direction) { - var $this = this, item = this.items.eq(baseidx), i, z = baseidx, move = [], lastvisible, area = 0; + var $this = this, item = this.items.eq(baseidx), i, z = baseidx, move = [], area = 0; if (direction == 1) { @@ -309,9 +370,9 @@ var left = item.data('area'); itm.css({'left': left}).data({ - 'left' : left, - 'area' : (left+itm.data('width')), - 'center': (left - ($this.vp/2 - itm.data('cwidth')/2)) + left : left, + area : (left+itm.data('width')), + center: (left - ($this.vp/2 - itm.data('cwidth')/2)) }); item = itm; @@ -343,9 +404,9 @@ var left = item.data('left') - itm.data('width'); itm.css({'left': left}).data({ - 'left' : left, - 'area' : (left+itm.data('width')), - 'center': (left - ($this.vp/2 - itm.data('cwidth')/2)) + left : left, + area : (left+itm.data('width')), + center: (left - ($this.vp/2 - itm.data('cwidth')/2)) }); item = itm; @@ -356,7 +417,7 @@ }); // handle dragging - UI.$doc.on('mousemove.uikit.slider touchmove.uikit.slider', function(e) { + UI.$doc.on('mousemove.uk.slider touchmove.uk.slider', function(e) { if (e.originalEvent && e.originalEvent.touches) { e = e.originalEvent.touches[0]; @@ -434,13 +495,16 @@ store.diff = diff; }); - UI.$doc.on('mouseup.uikit.slider touchend.uikit.slider', function(e) { + UI.$doc.on('mouseup.uk.slider touchend.uk.slider', function(e) { if (dragging) { dragging.container.removeClass('uk-drag'); - var item = dragging.items.eq(store.focus), itm, focus = false, i, z; + // TODO is this needed? + dragging.items.eq(store.focus); + + var itm, focus = false, i, z; if (store.dir == 1) { @@ -455,6 +519,9 @@ z = z+1 == dragging.items.length ? 0:z+1; } + if (!dragging.options.infinite && !focus) { + focus = dragging.items.length; + } } else { @@ -469,6 +536,9 @@ z = z-1 == -1 ? dragging.items.length-1:z-1; } + if (!dragging.options.infinite && !focus) { + focus = 0 + } } dragging.updateFocus(focus!==false ? focus:store._focus); diff --git a/media/uikit-v2/js/components/slider.min.js b/media/uikit-v2/js/components/slider.min.js new file mode 100644 index 0000000..1dc7e2d --- /dev/null +++ b/media/uikit-v2/js/components/slider.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-slider",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";var e,i,s,n,a={};return t.component("slider",{defaults:{center:!1,threshold:10,infinite:!0,autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0,activecls:"uk-active"},boot:function(){t.ready(function(e){setTimeout(function(){t.$("[data-uk-slider]",e).each(function(){var e=t.$(this);e.data("slider")||t.slider(e,t.Utils.options(e.attr("data-uk-slider")))})},0)})},init:function(){var o=this;this.container=this.element.find(".uk-slider"),this.focus=0,t.$win.on("resize load",t.Utils.debounce(function(){o.update(!0)},100)),this.on("click.uk.slider","[data-uk-slider-item]",function(e){e.preventDefault();var i=t.$(this).attr("data-uk-slider-item");if(o.focus!=i)switch(o.stop(),i){case"next":case"previous":o["next"==i?"next":"previous"]();break;default:o.updateFocus(parseInt(i,10))}}),this.container.on({"touchstart mousedown":function(h){h.originalEvent&&h.originalEvent.touches&&(h=h.originalEvent.touches[0]),h.button&&2==h.button||!o.active||(o.stop(),s=t.$(h.target).is("a")?t.$(h.target):t.$(h.target).parents("a:first"),n=!1,s.length&&s.one("click",function(t){n&&t.preventDefault()}),i=function(t){n=!0,e=o,a={touchx:parseInt(t.pageX,10),dir:1,focus:o.focus,base:o.options.center?"center":"area"},t.originalEvent&&t.originalEvent.touches&&(t=t.originalEvent.touches[0]),e.element.data({"pointer-start":{x:parseInt(t.pageX,10),y:parseInt(t.pageY,10)},"pointer-pos-start":o.pos}),o.container.addClass("uk-drag"),i=!1},i.x=parseInt(h.pageX,10),i.threshold=o.options.threshold)},mouseenter:function(){o.options.pauseOnHover&&(o.hovering=!0)},mouseleave:function(){o.hovering=!1}}),this.update(!0),this.on("display.uk.check",function(){o.element.is(":visible")&&o.update(!0)}),this.element.find("a,img").attr("draggable","false"),this.options.autoplay&&this.start(),t.domObserve(this.element,function(){o.element.children(":not([data-slider-slide])").length&&o.update(!0)})},update:function(e){var i,s,n,a,o=this,h=0,r=0;return this.items=this.container.children().filter(":visible"),this.vp=this.element[0].getBoundingClientRect().width,this.container.css({"min-width":"","min-height":""}),this.items.each(function(e){i=t.$(this).attr("data-slider-slide",e),a=i.css({left:"",width:""})[0].getBoundingClientRect(),s=a.width,n=i.width(),r=Math.max(r,a.height),i.css({left:h,width:s}).data({idx:e,left:h,width:s,cwidth:n,area:h+s,center:h-(o.vp/2-n/2)}),h+=s}),this.container.css({"min-width":h,"min-height":r}),this.options.infinite&&(h<=2*this.vp||this.items.length<5)&&!this.itemsResized?(this.container.children().each(function(t){o.container.append(o.items.eq(t).clone(!0).attr("id",""))}).each(function(t){o.container.append(o.items.eq(t).clone(!0).attr("id",""))}),this.itemsResized=!0,this.update()):(this.cw=h,this.pos=0,this.active=h>=this.vp,this.container.css({"-ms-transform":"","-webkit-transform":"",transform:""}),e&&this.updateFocus(this.focus),void 0)},updatePos:function(t){this.pos=t,this.container.css({"-ms-transform":"translateX("+t+"px)","-webkit-transform":"translateX("+t+"px)",transform:"translateX("+t+"px)"})},updateFocus:function(e,i){if(this.active){i=i||(e>this.focus?1:-1);var s,n,a=this.items.eq(e);if(this.options.infinite&&this.infinite(e,i),this.options.center)this.updatePos(-1*a.data("center")),this.items.filter("."+this.options.activecls).removeClass(this.options.activecls),a.addClass(this.options.activecls);else if(this.options.infinite)this.updatePos(-1*a.data("left"));else{for(s=0,n=e;nthis.vp)this.updatePos(-1*a.data("left"));else if(1==i){for(s=0,n=this.items.length-1;n>=0;n--){if(s+=this.items.eq(n).data("width"),s==this.vp){e=n;break}if(s>this.vp){e=nthis.vp?this.updatePos(-1*(this.container.width()-this.vp)):this.updatePos(-1*this.items.eq(e).data("left"))}}var o=this.items.eq(e).data("left");this.items.removeClass("uk-slide-before uk-slide-after").each(function(i){i!==e&&t.$(this).addClass(t.$(this).data("left")this.vp));i++)a=a+1==this.items.length?0:a+1;o.length&&o.forEach(function(t){var e=n.data("area");t.css({left:e}).data({left:e,area:e+t.data("width"),center:e-(s.vp/2-t.data("cwidth")/2)}),n=t})}else{for(i=this.items.length-1;i>-1&&(h+=this.items.eq(a).data("width"),a!=t&&o.push(this.items.eq(a)),!(h>this.vp));i--)a=a-1==-1?this.items.length-1:a-1;o.length&&o.forEach(function(t){var e=n.data("left")-t.data("width");t.css({left:e}).data({left:e,area:e+t.data("width"),center:e-(s.vp/2-t.data("cwidth")/2)}),n=t})}}}),t.$doc.on("mousemove.uk.slider touchmove.uk.slider",function(t){if(t.originalEvent&&t.originalEvent.touches&&(t=t.originalEvent.touches[0]),i&&Math.abs(t.pageX-i.x)>i.threshold&&(window.getSelection().toString()?e=i=!1:i(t)),e){var s,n,o,h,r,c,d,u,f,l;if(t.clientX||t.clientY?s=t.clientX:(t.pageX||t.pageY)&&(s=t.pageX-document.body.scrollLeft-document.documentElement.scrollLeft),r=a.focus,n=s-e.element.data("pointer-start").x,o=e.element.data("pointer-pos-start")+n,h=s>e.element.data("pointer-start").x?-1:1,c=e.items.eq(a.focus),1==h)for(d=c.data("left")+Math.abs(n),u=0,f=a.focus;ud){r=f;break}f=f+1==e.items.length?0:f+1}else for(d=c.data("left")-Math.abs(n),u=0,f=a.focus;ua.diff){o=n;break}n=n+1==e.items.length?0:n+1}e.options.infinite||o||(o=e.items.length)}else{for(s=0,n=a.focus;si)return null;for(;a>n;)e=n%i,e?o[s][e]=t[n]:o[++s]=[t[n]],n++;for(n=0,a=o.length;a>n;)o[n]=jQuery(o[n]),n++;return o}var n;t.component("slideset",{defaults:{"default":1,animation:"fade",duration:200,filter:"",delay:!1,controls:!1,autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0},sets:[],boot:function(){t.ready(function(i){t.$("[data-uk-slideset]",i).each(function(){var i=t.$(this);i.data("slideset")||t.slideset(i,t.Utils.options(i.attr("data-uk-slideset")))})})},init:function(){var i=this;this.activeSet=!1,this.list=this.element.find(".uk-slideset"),this.nav=this.element.find(".uk-slideset-nav"),this.controls=this.options.controls?t.$(this.options.controls):this.element,t.$win.on("resize load",t.Utils.debounce(function(){i.update()},100)),i.list.addClass("uk-grid-width-1-"+i.options.default),["xlarge","large","medium","small"].forEach(function(t){i.options[t]&&i.list.addClass("uk-grid-width-"+t+"-1-"+i.options[t])}),this.on("click.uk.slideset","[data-uk-slideset-item]",function(e){if(e.preventDefault(),!i.animating){var n=t.$(this).attr("data-uk-slideset-item");if(i.activeSet!==n)switch(n){case"next":case"previous":i["next"==n?"next":"previous"]();break;default:i.show(parseInt(n,10))}}}),this.controls.on("click.uk.slideset","[data-uk-filter]",function(e){var n=t.$(this);n.parent().hasClass("uk-slideset")||(e.preventDefault(),i.animating||i.currentFilter==n.attr("data-uk-filter")||(i.updateFilter(n.attr("data-uk-filter")),i._hide().then(function(){i.update(!0,!0)})))}),this.on("swipeRight swipeLeft",function(t){i["swipeLeft"==t.type?"next":"previous"]()}),this.updateFilter(this.options.filter),this.update(),this.element.on({mouseenter:function(){i.options.pauseOnHover&&(i.hovering=!0)},mouseleave:function(){i.hovering=!1}}),this.options.autoplay&&this.start(),t.domObserve(this.list,function(){i.list.children(":visible:not(.uk-active)").length&&i.update(!1,!0)})},update:function(t,i){var n,s=this.visible;if(this.visible=this.getVisibleOnCurrenBreakpoint(),s!=this.visible||i){for(this.children=this.list.children().hide(),this.items=this.getItems(),this.sets=e(this.items,this.visible),n=0;n');this.nav[1==this.nav.children().length?"addClass":"removeClass"]("uk-invisible")}this.activeSet=!1,this.show(0,!t)}},updateFilter:function(i){var e,n=this;this.currentFilter=i,this.controls.find("[data-uk-filter]").each(function(){e=t.$(this),e.parent().hasClass("uk-slideset")||(e.attr("data-uk-filter")==n.currentFilter?e.addClass("uk-active"):e.removeClass("uk-active"))})},getVisibleOnCurrenBreakpoint:function(){var i=null,e=t.$('
        ').appendTo("body"),n=e.children().eq(0),s=this.options;return["xlarge","large","medium","small"].forEach(function(t){s[t]&&!i&&(e.attr("class","uk-grid-width-"+t+"-1-2").width(),50==n.width()&&(i=t))}),e.remove(),this.options[i]||this.options["default"]},getItems:function(){var i,e=[];return this.currentFilter?(i=this.currentFilter||[],"string"==typeof i&&(i=i.split(/,/).map(function(t){return t.trim()})),this.children.each(function(){var n=t.$(this),s=n.attr("data-uk-filter"),a=i.length?!1:!0;s&&(s=s.split(/,/).map(function(t){return t.trim()}),i.forEach(function(t){s.indexOf(t)>-1&&(a=!0)})),a&&e.push(n[0])}),e=t.$(e)):e=this.list.children(),e},show:function(i,e,s){var a=this;if(this.activeSet!==i&&!this.animating){s=s||(i').css({ + ghost = UI.$('
      • ').css({ top : 0, left : 0, width : this.container.width(), @@ -80,19 +80,18 @@ this.container.append(ghost); ghost.children().last().on(UI.support.transition.end, function() { - ghost.remove(); - d.resolve(); + + setTimeout(function() { + ghost.remove(); + d.resolve(); + }, 0); }); ghost.width(); ghost.children().each(function() { - var bar = UI.$(this); - - bar.css({ - 'clip': bar.data('clip'), - 'opacity': 1 - }); + bar = UI.$(this); + bar.css({ clip: bar.data('clip'), opacity: 1 }); }); return d.promise(); @@ -110,7 +109,7 @@ return Animations.slice.apply(this, [current, next, dir, 'slice-up-down']); }, - 'fold': function(current, next, dir) { + fold: function(current, next, dir) { if (!next.data('cover')) { return Animations.fade.apply(this, arguments); @@ -120,7 +119,7 @@ var sliceWidth = Math.ceil(this.element.width() / this.options.slices), bgimage = next.data('cover').css('background-image'), - ghost = UI.$('
      • ').css({ + ghost = UI.$('
      • ').css({ width : next.width(), height : next.height(), opacity: 1, @@ -132,8 +131,6 @@ for (var i = 0; i < this.options.slices; i++) { - var width = (i == this.options.slices-1) ? (ghostWidth - (sliceWidth*i)) : sliceWidth; - bar = UI.$('
        ').css({ 'position' : 'absolute', 'top' : 0, @@ -157,17 +154,19 @@ ghost.width(); ghost.children().first().on(UI.support.transition.end, function() { - ghost.remove(); - d.resolve(); + setTimeout(function() { + ghost.remove(); + d.resolve(); + }, 0); }).end().css({ - 'transform': 'scaleX(1)', - 'opacity': 1 + transform: 'scaleX(1)', + opacity: 1 }); return d.promise(); }, - 'puzzle': function(current, next, dir) { + puzzle: function(current, next, dir) { if (!next.data('cover')) { return Animations.fade.apply(this, arguments); @@ -180,7 +179,7 @@ boxRows = Math.round(next.height()/boxWidth), boxHeight = Math.round(next.height()/boxRows)+1, bgimage = next.data('cover').css('background-image'), - ghost = UI.$('
      • ').css({ + ghost = UI.$('
      • ').css({ width : this.container.width(), height : this.container.height(), opacity : 1, @@ -230,18 +229,21 @@ '-webkit-transition': 'all '+$this.options.duration+'ms ease-in-out '+(50+i*25)+'ms' }); }).last().on(UI.support.transition.end, function() { - ghost.remove(); - d.resolve(); + + setTimeout(function() { + ghost.remove(); + d.resolve(); + }, 0); }); ghost.width(); - boxes.css({'opacity': 1}); + boxes.css({opacity: 1}); return d.promise(); }, - 'boxes': function(current, next, dir, fromfx) { + boxes: function(current, next, dir, fromfx) { if (!next.data('cover')) { return Animations.fade.apply(this, arguments); @@ -254,7 +256,7 @@ boxRows = Math.round(next.height()/boxWidth), boxHeight = Math.round(next.height()/boxRows)+1, bgimage = next.data('cover').css('background-image'), - ghost = UI.$('
      • ').css({ + ghost = UI.$('
      • ').css({ width : next.width(), height : next.height(), opacity : 1, @@ -334,8 +336,11 @@ } boxes.last().on(UI.support.transition.end, function() { - ghost.remove(); - d.resolve(); + + setTimeout(function() { + ghost.remove(); + d.resolve(); + }, 0); }); ghost.width(); @@ -361,7 +366,7 @@ if (!animations[this.fxIndex]) this.fxIndex = 0; return Animations[animations[this.fxIndex]].apply(this, arguments); - }, + } }); diff --git a/media/uikit-v2/js/components/slideshow-fx.min.js b/media/uikit-v2/js/components/slideshow-fx.min.js new file mode 100644 index 0000000..d7a20a4 --- /dev/null +++ b/media/uikit-v2/js/components/slideshow-fx.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(i){var t;window.UIkit2&&(t=i(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-slideshow-fx",["uikit"],function(){return t||i(UIkit2)})}(function(i){"use strict";var t=i.slideshow.animations;i.$.extend(i.slideshow.animations,{slice:function(e,s,n,o){if(!e.data("cover"))return t.fade.apply(this,arguments);for(var r,a=i.$.Deferred(),c=Math.ceil(this.element.width()/this.options.slices),h=s.data("cover").css("background-image"),d=i.$('
      • ').css({top:0,left:0,width:this.container.width(),height:this.container.height(),opacity:1,zIndex:15}),p=d.width(),l=d.height(),u="slice-up"==o?l:"0",f=0;f').css({position:"absolute",top:0,left:0,width:p,height:l,"background-image":h,clip:m,opacity:0,transition:"all "+this.options.duration+"ms ease-in-out "+60*f+"ms","-webkit-transition":"all "+this.options.duration+"ms ease-in-out "+60*f+"ms"}).data("clip",x),d.append(r)}return this.container.append(d),d.children().last().on(i.support.transition.end,function(){setTimeout(function(){d.remove(),a.resolve()},0)}),d.width(),d.children().each(function(){r=i.$(this),r.css({clip:r.data("clip"),opacity:1})}),a.promise()},"slice-up":function(i,e,s){return t.slice.apply(this,[i,e,s,"slice-up"])},"slice-down":function(i,e,s){return t.slice.apply(this,[i,e,s,"slice-down"])},"slice-up-down":function(i,e,s){return t.slice.apply(this,[i,e,s,"slice-up-down"])},fold:function(e,s){if(!s.data("cover"))return t.fade.apply(this,arguments);for(var n,o=i.$.Deferred(),r=Math.ceil(this.element.width()/this.options.slices),a=s.data("cover").css("background-image"),c=i.$('
      • ').css({width:s.width(),height:s.height(),opacity:1,zIndex:15}),h=s.width(),d=s.height(),p=0;p').css({position:"absolute",top:0,left:0,width:h,height:d,"background-image":a,"transform-origin":r*p+"px 0 0",clip:"rect(0px, "+r*(p+1)+"px, "+d+"px, "+r*p+"px)",opacity:0,transform:"scaleX(0.000001)",transition:"all "+this.options.duration+"ms ease-in-out "+(100+60*p)+"ms","-webkit-transition":"all "+this.options.duration+"ms ease-in-out "+(100+60*p)+"ms"}),c.prepend(n);return this.container.append(c),c.width(),c.children().first().on(i.support.transition.end,function(){setTimeout(function(){c.remove(),o.resolve()},0)}).end().css({transform:"scaleX(1)",opacity:1}),o.promise()},puzzle:function(s,n){if(!n.data("cover"))return t.fade.apply(this,arguments);for(var o,r,a,c=i.$.Deferred(),h=this,d=Math.round(this.options.slices/2),p=Math.round(n.width()/d),l=Math.round(n.height()/p),u=Math.round(n.height()/l)+1,f=n.data("cover").css("background-image"),m=i.$('
      • ').css({width:this.container.width(),height:this.container.height(),opacity:1,zIndex:15}),g=this.container.width(),x=this.container.height(),w=0;l>w;w++)for(var v=0;d>v;v++)a=v==d-1?p+2:p,r=[u*w+"px",a*(v+1)+"px",u*(w+1)+"px",p*v+"px"],o=i.$('
        ').css({position:"absolute",top:0,left:0,opacity:0,width:g,height:x,"background-image":f,clip:"rect("+r.join(",")+")","-webkit-transform":"translateZ(0)",transform:"translateZ(0)"}),m.append(o);this.container.append(m);var k=e(m.children());return k.each(function(t){i.$(this).css({transition:"all "+h.options.duration+"ms ease-in-out "+(50+25*t)+"ms","-webkit-transition":"all "+h.options.duration+"ms ease-in-out "+(50+25*t)+"ms"})}).last().on(i.support.transition.end,function(){setTimeout(function(){m.remove(),c.resolve()},0)}),m.width(),k.css({opacity:1}),c.promise()},boxes:function(e,s,n,o){if(!s.data("cover"))return t.fade.apply(this,arguments);for(var r,a,c,h,d=i.$.Deferred(),p=Math.round(this.options.slices/2),l=Math.round(s.width()/p),u=Math.round(s.height()/l),f=Math.round(s.height()/u)+1,m=s.data("cover").css("background-image"),g=i.$('
      • ').css({width:s.width(),height:s.height(),opacity:1,zIndex:15}),x=s.width(),w=s.height(),v=0;u>v;v++)for(h=0;p>h;h++)c=h==p-1?l+2:l,a=[f*v+"px",c*(h+1)+"px",f*(v+1)+"px",l*h+"px"],r=i.$('
        ').css({position:"absolute",top:0,left:0,opacity:1,width:x,height:w,"background-image":m,"transform-origin":a[3]+" "+a[0]+" 0",clip:"rect("+a.join(",")+")","-webkit-transform":"scale(0.0000000000000001)",transform:"scale(0.0000000000000001)"}),g.append(r);this.container.append(g);var k,b=0,y=0,$=0,I=[[]],M=g.children();for("boxes-reverse"==o&&(M=[].reverse.apply(M)),M.each(function(){I[b][y]=i.$(this),y++,y==p&&(b++,y=0,I[b]=[])}),h=0,k=0;p*u>h;h++){k=h;for(var z=0;u>z;z++)k>=0&&p>k&&I[z][k].css({transition:"all "+this.options.duration+"ms linear "+(50+$)+"ms","-webkit-transition":"all "+this.options.duration+"ms linear "+(50+$)+"ms"}),k--;$+=100}return M.last().on(i.support.transition.end,function(){setTimeout(function(){g.remove(),d.resolve()},0)}),g.width(),M.css({"-webkit-transform":"scale(1)",transform:"scale(1)"}),d.promise()},"boxes-reverse":function(i,e,s){return t.boxes.apply(this,[i,e,s,"boxes-reverse"])},"random-fx":function(){var i=["slice-up","fold","puzzle","slice-down","boxes","slice-up-down","boxes-reverse"];return this.fxIndex=(void 0===this.fxIndex?-1:this.fxIndex)+1,i[this.fxIndex]||(this.fxIndex=0),t[i[this.fxIndex]].apply(this,arguments)}});var e=function(i){for(var t,e,s=i.length;s;t=parseInt(Math.random()*s),e=i[--s],i[s]=i[t],i[t]=e);return i};return i.slideshow.animations}); \ No newline at end of file diff --git a/media/uikit/js/components/slideshow.js b/media/uikit-v2/js/components/slideshow.js similarity index 75% rename from media/uikit/js/components/slideshow.js rename to media/uikit-v2/js/components/slideshow.js index d897bc9..076c8fe 100644 --- a/media/uikit/js/components/slideshow.js +++ b/media/uikit-v2/js/components/slideshow.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-slideshow", ["uikit"], function() { - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-slideshow', ['uikit'], function() { + return component || addon(UIkit2); }); } @@ -22,9 +22,9 @@ UI.component('slideshow', { defaults: { - animation : "fade", + animation : 'fade', duration : 500, - height : "auto", + height : 'auto', start : 0, autoplay : false, autoplayInterval : 7000, @@ -40,7 +40,7 @@ 'uk-animation-top-center', '', // middle-center 'uk-animation-bottom-right' - ], + ] }, current : false, @@ -56,8 +56,8 @@ var slideshow = UI.$(this); - if (!slideshow.data("slideshow")) { - var obj = UI.slideshow(slideshow, UI.Utils.options(slideshow.attr("data-uk-slideshow"))); + if (!slideshow.data('slideshow')) { + UI.slideshow(slideshow, UI.Utils.options(slideshow.attr('data-uk-slideshow'))); } }); }); @@ -65,22 +65,20 @@ init: function() { - var $this = this, canvas, kbanimduration; + var $this = this; - this.container = this.element.hasClass('uk-slideshow') ? this.element : UI.$(this.find('.uk-slideshow')); - this.slides = this.container.children(); - this.slidesCount = this.slides.length; + this.container = this.element.hasClass('uk-slideshow') ? this.element : UI.$(this.find('.uk-slideshow:first')); this.current = this.options.start; this.animating = false; - this.triggers = this.find('[data-uk-slideshow-item]'); + this.fixFullscreen = navigator.userAgent.match(/(iPad|iPhone|iPod)/g) && this.container.hasClass('uk-slideshow-fullscreen'); // viewport unit fix for height:100vh - should be fixed in iOS 8 if (this.options.kenburns) { - kbanimduration = this.options.kenburns === true ? '15s': this.options.kenburns; + this.kbanimduration = this.options.kenburns === true ? '15s': this.options.kenburns; - if (!String(kbanimduration).match(/(ms|s)$/)) { - kbanimduration += 'ms'; + if (!String(this.kbanimduration).match(/(ms|s)$/)) { + this.kbanimduration += 'ms'; } if (typeof(this.options.kenburnsanimations) == 'string') { @@ -88,10 +86,103 @@ } } + this.update(); + + this.on('click.uk.slideshow', '[data-uk-slideshow-item]', function(e) { + + e.preventDefault(); + + var slide = UI.$(this).attr('data-uk-slideshow-item'); + + if ($this.current == slide) return; + + switch(slide) { + case 'next': + case 'previous': + $this[slide=='next' ? 'next':'previous'](); + break; + default: + $this.show(parseInt(slide, 10)); + } + + $this.stop(); + }); + + UI.$win.on("resize load", UI.Utils.debounce(function() { + $this.resize(); + + if ($this.fixFullscreen) { + $this.container.css('height', window.innerHeight); + $this.slides.css('height', window.innerHeight); + } + }, 100)); + + // chrome image load fix + setTimeout(function(){ + $this.resize(); + }, 80); + + // Set autoplay + if (this.options.autoplay) { + this.start(); + } + + if (this.options.videoautoplay && this.slides.eq(this.current).data('media')) { + this.playmedia(this.slides.eq(this.current).data('media')); + } + + if (this.options.kenburns) { + this.applyKenBurns(this.slides.eq(this.current)); + } + + this.container.on({ + mouseenter: function() { if ($this.options.pauseOnHover) $this.hovering = true; }, + mouseleave: function() { $this.hovering = false; } + }); + + this.on('swipeRight swipeLeft', function(e) { + $this[e.type=='swipeLeft' ? 'next' : 'previous'](); + }); + + this.on('display.uk.check', function(){ + if ($this.element.is(':visible')) { + + $this.resize(); + + if ($this.fixFullscreen) { + $this.container.css('height', window.innerHeight); + $this.slides.css('height', window.innerHeight); + } + } + }); + + UI.domObserve(this.element, function(e) { + if ($this.container.children(':not([data-slideshow-slide])').not('.uk-slideshow-ghost').length) { + $this.update(true); + } + }); + }, + + update: function(resize) { + + var $this = this, canvas, processed = 0; + + this.slides = this.container.children(); + this.slidesCount = this.slides.length; + + if (!this.slides.eq(this.current).length) { + this.current = 0; + } + this.slides.each(function(index) { - var slide = UI.$(this), - media = slide.children('img,video,iframe').eq(0); + var slide = UI.$(this); + + if (slide.data('processed')) { + return; + } + + var media = slide.children('img,video,iframe').eq(0), type = 'html'; slide.data('media', media); slide.data('sizer', media); @@ -100,12 +191,21 @@ var placeholder; + type = media[0].nodeName.toLowerCase(); + switch(media[0].nodeName) { case 'IMG': var cover = UI.$('
        ').css({'background-image':'url('+ media.attr('src') + ')'}); - media.css({'width': '100%','height': 'auto'}); + if (media.attr('width') && media.attr('height')) { + placeholder = UI.$('').attr({width:media.attr('width'), height:media.attr('height')}); + media.replaceWith(placeholder); + media = placeholder; + placeholder = undefined; + } + + media.css({width: '100%',height: 'auto', opacity:0}); slide.prepend(cover).data('cover', cover); break; @@ -173,91 +273,34 @@ if ($this.hasKenBurns(slide)) { slide.data('cover').css({ - '-webkit-animation-duration': kbanimduration, - 'animation-duration': kbanimduration + '-webkit-animation-duration': $this.kbanimduration, + 'animation-duration': $this.kbanimduration }); } + + slide.data('processed', ++processed); + slide.attr('data-slideshow-slide', type); }); - this.on("click.uikit.slideshow", '[data-uk-slideshow-item]', function(e) { + if (processed) { - e.preventDefault(); + this.triggers = this.find('[data-uk-slideshow-item]'); - var slide = UI.$(this).attr('data-uk-slideshow-item'); - - if ($this.current == slide) return; - - switch(slide) { - case 'next': - case 'previous': - $this[slide=='next' ? 'next':'previous'](); - break; - default: - $this.show(parseInt(slide, 10)); - } - - $this.stop(); - }); - - // Set start slide - this.slides.attr('aria-hidden', 'true').eq(this.current).addClass('uk-active').attr('aria-hidden', 'false'); - this.triggers.filter('[data-uk-slideshow-item="'+this.current+'"]').addClass('uk-active'); - - UI.$win.on("resize load", UI.Utils.debounce(function() { - $this.resize(); - - if ($this.fixFullscreen) { - $this.container.css('height', window.innerHeight); - $this.slides.css('height', window.innerHeight); - } - }, 100)); - - // chrome image load fix - setTimeout(function(){ - $this.resize(); - }, 80); - - // Set autoplay - if (this.options.autoplay) { - this.start(); + // Set start slide + this.slides.attr('aria-hidden', 'true').removeClass('uk-active').eq(this.current).addClass('uk-active').attr('aria-hidden', 'false'); + this.triggers.filter('[data-uk-slideshow-item="'+this.current+'"]').addClass('uk-active'); } - if (this.options.videoautoplay && this.slides.eq(this.current).data('media')) { - this.playmedia(this.slides.eq(this.current).data('media')); + if (resize && processed) { + this.resize(); } - - if (this.options.kenburns) { - this.applyKenBurns(this.slides.eq(this.current)); - } - - this.container.on({ - mouseenter: function() { if ($this.options.pauseOnHover) $this.hovering = true; }, - mouseleave: function() { $this.hovering = false; } - }); - - this.on('swipeRight swipeLeft', function(e) { - $this[e.type=='swipeLeft' ? 'next' : 'previous'](); - }); - - this.on('display.uk.check', function(){ - if ($this.element.is(":visible")) { - - $this.resize(); - - if ($this.fixFullscreen) { - $this.container.css('height', window.innerHeight); - $this.slides.css('height', window.innerHeight); - } - } - }); }, - resize: function() { if (this.container.hasClass('uk-slideshow-fullscreen')) return; - var $this = this, height = this.options.height; + var height = this.options.height; if (this.options.height === 'auto') { @@ -281,7 +324,7 @@ var $this = this, current = this.slides.eq(this.current), next = this.slides.eq(index), - dir = direction ? direction : this.current < index ? -1 : 1, + dir = direction ? direction : this.current < index ? 1 : -1, currentmedia = current.data('media'), animation = Animations[this.options.animation] ? this.options.animation : 'fade', nextmedia = next.data('media'), @@ -297,15 +340,15 @@ $this.playmedia(nextmedia); } - next.addClass("uk-active").attr('aria-hidden', 'false'); - current.removeClass("uk-active").attr('aria-hidden', 'true'); + next.addClass('uk-active').attr('aria-hidden', 'false'); + current.removeClass('uk-active').attr('aria-hidden', 'true'); $this.animating = false; $this.current = index; UI.Utils.checkDisplay(next, '[class*="uk-animation-"]:not(.uk-cover-background.uk-position-cover)'); - $this.trigger('show.uk.slideshow', [next]); + $this.trigger('show.uk.slideshow', [next, current, $this]); }; $this.applyKenBurns(next); @@ -318,6 +361,8 @@ current = UI.$(current); next = UI.$(next); + $this.trigger('beforeshow.uk.slideshow', [next, current, $this]); + Animations[animation].apply(this, [current, next, dir]).then(finalize); $this.triggers.removeClass('uk-active'); @@ -345,11 +390,11 @@ }, next: function() { - this.show(this.slides[this.current + 1] ? (this.current + 1) : 0); + this.show(this.slides[this.current + 1] ? (this.current + 1) : 0, 1); }, previous: function() { - this.show(this.slides[this.current - 1] ? (this.current - 1) : (this.slides.length - 1)); + this.show(this.slides[this.current - 1] ? (this.current - 1) : (this.slides.length - 1), -1); }, start: function() { @@ -435,14 +480,14 @@ next.css('opacity', 1).one(UI.support.animation.end, function() { - current.removeClass(dir === 1 ? 'uk-slideshow-scroll-backward-out' : 'uk-slideshow-scroll-forward-out'); - next.css('opacity', '').removeClass(dir === 1 ? 'uk-slideshow-scroll-backward-in' : 'uk-slideshow-scroll-forward-in'); + current.css('opacity', 0).removeClass(dir == -1 ? 'uk-slideshow-scroll-backward-out' : 'uk-slideshow-scroll-forward-out'); + next.removeClass(dir == -1 ? 'uk-slideshow-scroll-backward-in' : 'uk-slideshow-scroll-forward-in'); d.resolve(); }.bind(this)); - current.addClass(dir == 1 ? 'uk-slideshow-scroll-backward-out' : 'uk-slideshow-scroll-forward-out'); - next.addClass(dir == 1 ? 'uk-slideshow-scroll-backward-in' : 'uk-slideshow-scroll-forward-in'); + current.addClass(dir == -1 ? 'uk-slideshow-scroll-backward-out' : 'uk-slideshow-scroll-forward-out'); + next.addClass(dir == -1 ? 'uk-slideshow-scroll-backward-in' : 'uk-slideshow-scroll-forward-in'); next.width(); // force redraw return d.promise(); @@ -457,14 +502,14 @@ next.css('opacity', 1).one(UI.support.animation.end, function() { - current.removeClass(dir === 1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out'); - next.css('opacity', '').removeClass(dir === 1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in'); + current.css('opacity', 0).removeClass(dir === -1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out'); + next.removeClass(dir === -1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in'); d.resolve(); }.bind(this)); - current.addClass(dir == 1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out'); - next.addClass(dir == 1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in'); + current.addClass(dir == -1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out'); + next.addClass(dir == -1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in'); next.width(); // force redraw return d.promise(); @@ -481,8 +526,7 @@ current.one(UI.support.animation.end, function() { - current.removeClass('uk-slideshow-scale-out'); - next.css('opacity', ''); + current.css('opacity', 0).removeClass('uk-slideshow-scale-out'); d.resolve(); }.bind(this)); @@ -502,10 +546,17 @@ next.css('opacity', 1); + // for plain text content slides - looks smoother + if (!(next.data('cover') || next.data('placeholder'))) { + + next.css('opacity', 1).one(UI.support.animation.end, function() { + next.removeClass('uk-slideshow-fade-in'); + }).addClass('uk-slideshow-fade-in'); + } + current.one(UI.support.animation.end, function() { - current.removeClass('uk-slideshow-fade-out'); - next.css('opacity', ''); + current.css('opacity', 0).removeClass('uk-slideshow-fade-out'); d.resolve(); }.bind(this)); diff --git a/media/uikit-v2/js/components/slideshow.min.js b/media/uikit-v2/js/components/slideshow.min.js new file mode 100644 index 0000000..db29553 --- /dev/null +++ b/media/uikit-v2/js/components/slideshow.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(i){var t;window.UIkit2&&(t=i(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-slideshow",["uikit"],function(){return t||i(UIkit2)})}(function(i){"use strict";var t,s=0;i.component("slideshow",{defaults:{animation:"fade",duration:500,height:"auto",start:0,autoplay:!1,autoplayInterval:7e3,videoautoplay:!0,videomute:!0,slices:15,pauseOnHover:!0,kenburns:!1,kenburnsanimations:["uk-animation-middle-left","uk-animation-top-right","uk-animation-bottom-left","uk-animation-top-center","","uk-animation-bottom-right"]},current:!1,interval:null,hovering:!1,boot:function(){i.ready(function(t){i.$("[data-uk-slideshow]",t).each(function(){var t=i.$(this);t.data("slideshow")||i.slideshow(t,i.Utils.options(t.attr("data-uk-slideshow")))})})},init:function(){var t=this;this.container=this.element.hasClass("uk-slideshow")?this.element:i.$(this.find(".uk-slideshow:first")),this.current=this.options.start,this.animating=!1,this.fixFullscreen=navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&this.container.hasClass("uk-slideshow-fullscreen"),this.options.kenburns&&(this.kbanimduration=this.options.kenburns===!0?"15s":this.options.kenburns,String(this.kbanimduration).match(/(ms|s)$/)||(this.kbanimduration+="ms"),"string"==typeof this.options.kenburnsanimations&&(this.options.kenburnsanimations=this.options.kenburnsanimations.split(","))),this.update(),this.on("click.uk.slideshow","[data-uk-slideshow-item]",function(s){s.preventDefault();var e=i.$(this).attr("data-uk-slideshow-item");if(t.current!=e){switch(e){case"next":case"previous":t["next"==e?"next":"previous"]();break;default:t.show(parseInt(e,10))}t.stop()}}),i.$win.on("resize load",i.Utils.debounce(function(){t.resize(),t.fixFullscreen&&(t.container.css("height",window.innerHeight),t.slides.css("height",window.innerHeight))},100)),setTimeout(function(){t.resize()},80),this.options.autoplay&&this.start(),this.options.videoautoplay&&this.slides.eq(this.current).data("media")&&this.playmedia(this.slides.eq(this.current).data("media")),this.options.kenburns&&this.applyKenBurns(this.slides.eq(this.current)),this.container.on({mouseenter:function(){t.options.pauseOnHover&&(t.hovering=!0)},mouseleave:function(){t.hovering=!1}}),this.on("swipeRight swipeLeft",function(i){t["swipeLeft"==i.type?"next":"previous"]()}),this.on("display.uk.check",function(){t.element.is(":visible")&&(t.resize(),t.fixFullscreen&&(t.container.css("height",window.innerHeight),t.slides.css("height",window.innerHeight)))}),i.domObserve(this.element,function(){t.container.children(":not([data-slideshow-slide])").not(".uk-slideshow-ghost").length&&t.update(!0)})},update:function(t){var e,a=this,n=0;this.slides=this.container.children(),this.slidesCount=this.slides.length,this.slides.eq(this.current).length||(this.current=0),this.slides.each(function(t){var o=i.$(this);if(!o.data("processed")){var r=o.children("img,video,iframe").eq(0),d="html";if(o.data("media",r),o.data("sizer",r),r.length){var u;switch(d=r[0].nodeName.toLowerCase(),r[0].nodeName){case"IMG":var h=i.$('
        ').css({"background-image":"url("+r.attr("src")+")"});r.attr("width")&&r.attr("height")&&(u=i.$("").attr({width:r.attr("width"),height:r.attr("height")}),r.replaceWith(u),r=u,u=void 0),r.css({width:"100%",height:"auto",opacity:0}),o.prepend(h).data("cover",h);break;case"IFRAME":var c=r[0].src,l="sw-"+ ++s;r.attr("src","").on("load",function(){if((t!==a.current||t==a.current&&!a.options.videoautoplay)&&a.pausemedia(r),a.options.videomute){a.mutemedia(r);var i=setInterval(function(t){return function(){a.mutemedia(r),++t>=4&&clearInterval(i)}}(0),250)}}).data("slideshow",a).attr("data-player-id",l).attr("src",[c,c.indexOf("?")>-1?"&":"?","enablejsapi=1&api=1&player_id="+l].join("")).addClass("uk-position-absolute"),i.support.touch||r.css("pointer-events","none"),u=!0,i.cover&&(i.cover(r),r.attr("data-uk-cover","{}"));break;case"VIDEO":r.addClass("uk-cover-object uk-position-absolute"),u=!0,a.options.videomute&&a.mutemedia(r)}if(u){e=i.$("").attr({width:r[0].width,height:r[0].height});var p=i.$('').attr("src",e[0].toDataURL());o.prepend(p),o.data("sizer",p)}}else o.data("sizer",o);a.hasKenBurns(o)&&o.data("cover").css({"-webkit-animation-duration":a.kbanimduration,"animation-duration":a.kbanimduration}),o.data("processed",++n),o.attr("data-slideshow-slide",d)}}),n&&(this.triggers=this.find("[data-uk-slideshow-item]"),this.slides.attr("aria-hidden","true").removeClass("uk-active").eq(this.current).addClass("uk-active").attr("aria-hidden","false"),this.triggers.filter('[data-uk-slideshow-item="'+this.current+'"]').addClass("uk-active")),t&&n&&this.resize()},resize:function(){if(!this.container.hasClass("uk-slideshow-fullscreen")){var t=this.options.height;"auto"===this.options.height&&(t=0,this.slides.css("height","").each(function(){t=Math.max(t,i.$(this).height())})),this.container.css("height",t),this.slides.css("height",t)}},show:function(s,e){if(!this.animating&&this.current!=s){this.animating=!0;var a=this,n=this.slides.eq(this.current),o=this.slides.eq(s),r=e?e:this.current-1&&"ready"==e.event&&e.player_id&&(s=i.$('[data-player-id="'+e.player_id+'"]'),s.length&&s.data("slideshow").mutemedia(s))},!1)}); \ No newline at end of file diff --git a/media/uikit/js/components/sortable.js b/media/uikit-v2/js/components/sortable.js similarity index 70% rename from media/uikit/js/components/sortable.js rename to media/uikit-v2/js/components/sortable.js index 37a369b..cfefb3b 100644 --- a/media/uikit/js/components/sortable.js +++ b/media/uikit-v2/js/components/sortable.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ /* * Based on nativesortable - Copyright (c) Brian Grinstead - https://github.com/bgrins/nativesortable */ @@ -6,13 +6,13 @@ var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-sortable", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-sortable', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -20,8 +20,12 @@ "use strict"; - var supportsTouch = ('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch), - draggingPlaceholder, currentlyDraggingElement, currentlyDraggingTarget, dragging, moving, clickedlink, delayIdle, touchedlists, moved; + var supportsTouch = ('ontouchstart' in window || 'MSGesture' in window) || (window.DocumentTouch && document instanceof DocumentTouch), + draggingPlaceholder, currentlyDraggingElement, currentlyDraggingTarget, dragging, moving, clickedlink, delayIdle, touchedlists, moved, overElement, startEvent; + + var POINTER_DOWN = supportsTouch ? ('MSGesture' in window ? 'pointerdown':'touchstart') : 'mousedown', + POINTER_MOVE = supportsTouch ? ('MSGesture' in window ? 'pointermove':'touchmove') : 'mousemove', + POINTER_UP = supportsTouch ? ('MSGesture' in window ? 'pointerup':'touchend') : 'mouseup'; function closestSortable(ele) { @@ -51,6 +55,7 @@ dragMovingClass : 'uk-sortable-moving', baseClass : 'uk-sortable', noDragClass : 'uk-sortable-nodrag', + emptyClass : 'uk-sortable-empty', dragCustomClass : '', handleClass : false, group : false, @@ -65,17 +70,17 @@ // auto init UI.ready(function(context) { - UI.$("[data-uk-sortable]", context).each(function(){ + UI.$('[data-uk-sortable]', context).each(function(){ var ele = UI.$(this); - if(!ele.data("sortable")) { - var plugin = UI.sortable(ele, UI.Utils.options(ele.attr("data-uk-sortable"))); + if(!ele.data('sortable')) { + UI.sortable(ele, UI.Utils.options(ele.attr('data-uk-sortable'))); } }); }); - UI.$html.on('mousemove touchmove', function(e) { + UI.$html.on(POINTER_MOVE, function(e) { if (delayIdle) { @@ -99,21 +104,27 @@ } var offset = draggingPlaceholder.data('mouse-offset'), - left = parseInt(e.originalEvent.pageX, 10) + offset.left, - top = parseInt(e.originalEvent.pageY, 10) + offset.top; + ev = e.originalEvent.touches && e.originalEvent.touches[0] || e.originalEvent, + left = parseInt(ev.pageX, 10) + offset.left, + top = parseInt(ev.pageY, 10) + offset.top; - draggingPlaceholder.css({'left': left, 'top': top }); + draggingPlaceholder.css({left: left, top: top }); // adjust document scrolling + + if (top + (draggingPlaceholder.height()/3) > document.body.offsetHeight) { + return; + } + if (top < UI.$win.scrollTop()) { - UI.$win.scrollTop(UI.$win.scrollTop() - Math.ceil(draggingPlaceholder.height()/2)); - } else if ( (top + draggingPlaceholder.height()) > (window.innerHeight + UI.$win.scrollTop()) ) { - UI.$win.scrollTop(UI.$win.scrollTop() + Math.ceil(draggingPlaceholder.height()/2)); + UI.$win.scrollTop(UI.$win.scrollTop() - Math.ceil(draggingPlaceholder.height()/3)); + } else if ( (top + (draggingPlaceholder.height()/3)) > (window.innerHeight + UI.$win.scrollTop()) ) { + UI.$win.scrollTop(UI.$win.scrollTop() + Math.ceil(draggingPlaceholder.height()/3)); } } }); - UI.$html.on('mouseup touchend', function(e) { + UI.$html.on(POINTER_UP, function(e) { delayIdle = clickedlink = false; @@ -125,7 +136,7 @@ } // inside or outside of sortable? - var sortable = closestSortable(e.target), + var sortable = closestSortable(currentlyDraggingElement), component = draggingPlaceholder.$sortable, ev = { type: e.type }; @@ -139,54 +150,56 @@ init: function() { var $this = this, - element = this.element[0], - children; + element = this.element[0]; touchedlists = []; - // make sure :empty selector works on empty lists - if (this.element.children().length === 0) { - this.element.html(''); - } + this.checkEmptyList(); this.element.data('sortable-group', this.options.group ? this.options.group : UI.Utils.uid('sortable-group')); var handleDragStart = delegate(function(e) { + if (e.data && e.data.sortable) { + return; + } + var $target = UI.$(e.target), $link = $target.is('a[href]') ? $target:$target.parents('a[href]'); - + if ($target.is(':input')) { return; } - + + if ($this.options.handleClass) { + var handle = $target.hasClass($this.options.handleClass) ? $target : $target.closest('.'+$this.options.handleClass, $this.element); + if (!handle.length) return; + } + e.preventDefault(); - if (!supportsTouch && $link.length) { + if ($link.length) { $link.one('click', function(e){ e.preventDefault(); - }).one('mouseup', function(){ - if(!moved) $link.trigger('click'); + }).one(POINTER_UP, function(){ + + if (!moved) { + $link.trigger('click'); + if (supportsTouch && $link.attr('href').trim()) { + location.href = $link.attr('href'); + } + } }); } + e.data = e.data || {}; + + e.data.sortable = element; + return $this.dragStart(e, this); }); - var handleDragOver = delegate(function(e) { - - if (!currentlyDraggingElement) { - return true; - } - - if (e.preventDefault) { - e.preventDefault(); - } - - return false; - }); - var handleDragEnter = delegate(UI.Utils.debounce(function(e) { return $this.dragEnter(e, this); }), 40); @@ -222,8 +235,9 @@ // Bind/unbind standard mouse/touch events as a polyfill. function addDragHandlers() { - if (supportsTouch) { - element.addEventListener("touchmove", handleTouchMove, false); + + if (supportsTouch && startEvent.touches && startEvent.touches.length) { + element.addEventListener(POINTER_MOVE, handleTouchMove, false); } else { element.addEventListener('mouseover', handleDragEnter, false); element.addEventListener('mouseout', handleDragLeave, false); @@ -233,8 +247,8 @@ } function removeDragHandlers() { - if (supportsTouch) { - element.removeEventListener("touchmove", handleTouchMove, false); + if (supportsTouch && startEvent.touches && startEvent.touches.length) { + element.removeEventListener(POINTER_MOVE, handleTouchMove, false); } else { element.removeEventListener('mouseover', handleDragEnter, false); element.removeEventListener('mouseout', handleDragLeave, false); @@ -261,17 +275,21 @@ var touch, target, context; + startEvent = e; + if (e) { - touch = (supportsTouch && e.touches && e.touches[0]) || { }; + touch = e.touches && e.touches[0] || e; target = touch.target || e.target; // Fix event.target for a touch event if (supportsTouch && document.elementFromPoint) { - target = document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - document.body.scrollTop); + target = document.elementFromPoint(touch.pageX - document.body.scrollLeft, touch.pageY - document.body.scrollTop); } + + overElement = UI.$(target); } - if (UI.$(target).hasClass($this.options.childClass)) { + if (UI.$(target).hasClass('.'+$this.options.childClass)) { fn.apply(target, [e]); } else if (target !== element) { @@ -285,8 +303,8 @@ }; } - window.addEventListener(supportsTouch ? 'touchmove' : 'mousemove', handleDragMove, false); - element.addEventListener(supportsTouch ? 'touchstart': 'mousedown', handleDragStart, false); + window.addEventListener(POINTER_MOVE, handleDragMove, false); + element.addEventListener(POINTER_DOWN, handleDragStart, false); }, dragStart: function(e, elem) { @@ -296,24 +314,13 @@ dragging = false; var $this = this, - target = UI.$(e.target), - children = $this.element.children(); + target = UI.$(e.target); if (!supportsTouch && e.button==2) { return; } - if ($this.options.handleClass) { - - var handle = target.hasClass($this.options.handleClass) ? target : target.closest('.'+$this.options.handleClass, $this.element); - - if (!handle.length) { - //e.preventDefault(); - return; - } - } - - if (target.is('.'+$this.options.noDragClass) || target.closest('.'+$this.options._noDragClass).length) { + if (target.is('.'+$this.options.noDragClass) || target.closest('.'+$this.options.noDragClass).length) { return; } @@ -329,12 +336,12 @@ draggingPlaceholder.remove(); } - var $current = UI.$(currentlyDraggingElement), offset = $current.offset(); + var $current = UI.$(currentlyDraggingElement), offset = $current.offset(), ev = e.touches && e.touches[0] || e; delayIdle = { - pos : { x:e.pageX, y:e.pageY }, - threshold : $this.options.threshold, + pos : { x:ev.pageX, y:ev.pageY }, + threshold : $this.options.handleClass ? 1 : $this.options.threshold, apply : function(evt) { draggingPlaceholder = UI.$('
        ').css({ @@ -346,21 +353,26 @@ padding : $current.css('padding') }).data({ 'mouse-offset': { - 'left' : offset.left - parseInt(evt.pageX, 10), - 'top' : offset.top - parseInt(evt.pageY, 10) + left : offset.left - parseInt(ev.pageX, 10), + top : offset.top - parseInt(ev.pageY, 10) }, - 'origin' : $this.element, - 'index' : $current.index() + origin : $this.element, + index : $current.index() }).append($current.html()).appendTo('body'); draggingPlaceholder.$current = $current; draggingPlaceholder.$sortable = $this; - $current.data('sortable-group', $this.options.group); + + $current.data({ + 'start-list': $current.parent(), + 'start-index': $current.index(), + 'sortable-group': $this.options.group + }); $this.addDragHandlers(); $this.options.start(this, currentlyDraggingElement); - $this.trigger('start.uk.sortable', [$this, currentlyDraggingElement]); + $this.trigger('start.uk.sortable', [$this, currentlyDraggingElement, draggingPlaceholder]); moved = true; delayIdle = false; @@ -369,15 +381,18 @@ }, dragMove: function(e, elem) { - var overEl = UI.$(document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - (window.pageYOffset || document.documentElement.scrollTop))), - overRoot = overEl.closest('.'+this.options.baseClass), - groupOver = overRoot.data("sortable-group"), + + overElement = UI.$(document.elementFromPoint(e.pageX - (document.body.scrollLeft || document.scrollLeft || 0), e.pageY - (document.body.scrollTop || document.documentElement.scrollTop || 0))); + + var overRoot = overElement.closest('.'+this.options.baseClass), + groupOver = overRoot.data('sortable-group'), $current = UI.$(currentlyDraggingElement), currentRoot = $current.parent(), - groupCurrent = $current.data("sortable-group"), + groupCurrent = $current.data('sortable-group'), overChild; if (overRoot[0] !== currentRoot[0] && groupCurrent !== undefined && groupOver === groupCurrent) { + overRoot.data('sortable').addDragHandlers(); touchedlists.push(overRoot); @@ -385,19 +400,23 @@ // swap root if (overRoot.children().length > 0) { - overChild = overEl.closest('.'+this.options.childClass); - overChild.before($current); + overChild = overElement.closest('.'+this.options.childClass); + + if (overChild.length) { + overChild.before($current); + } else { + overRoot.append($current); + } + } else { // empty list - overEl.append($current); + overElement.append($current); } - // list empty? remove inner whitespace to make sure :empty selector works - if (currentRoot.children().length === 0) { - currentRoot.html(''); - } - - UIkit.$doc.trigger('mouseover'); + UI.$doc.trigger('mouseover'); } + + this.checkEmptyList(); + this.checkEmptyList(currentRoot); }, dragEnter: function(e, elem) { @@ -406,15 +425,27 @@ return true; } - // Prevent dragenter on a child from allowing a dragleave on the container var previousCounter = this.dragenterData(elem); this.dragenterData(elem, previousCounter + 1); + // Prevent dragenter on a child from allowing a dragleave on the container if (previousCounter === 0) { - UI.$(elem).addClass(this.options.overClass); + var currentlist = UI.$(elem).parent(), + startlist = UI.$(currentlyDraggingElement).data('start-list'); + if (currentlist[0] !== startlist[0]) { + + var groupOver = currentlist.data('sortable-group'), + groupCurrent = UI.$(currentlyDraggingElement).data('sortable-group'); + + if ((groupOver || groupCurrent) && (groupOver != groupCurrent)) { + return false; + } + } + + UI.$(elem).addClass(this.options.overClass); this.moveElementNextTo(currentlyDraggingElement, elem); } @@ -481,19 +512,22 @@ if (!currentlyDraggingElement) return; var $current = UI.$(currentlyDraggingElement), - oldRoot = draggingPlaceholder.data("origin"), + oldRoot = draggingPlaceholder.data('origin'), newRoot = $current.closest('.'+this.options.baseClass), - triggers = []; + triggers = [], + el = UI.$(currentlyDraggingElement); // events depending on move inside lists or across lists if (oldRoot[0] === newRoot[0] && draggingPlaceholder.data('index') != $current.index() ) { - triggers.push({el: this, mode: 'moved'}); + triggers.push({sortable: this, mode: 'moved'}); } else if (oldRoot[0] != newRoot[0]) { - triggers.push({el: newRoot, mode: 'added'}, {el: oldRoot, mode: 'removed'}); + triggers.push({sortable: UI.$(newRoot).data('sortable'), mode: 'added'}, {sortable: UI.$(oldRoot).data('sortable'), mode: 'removed'}); } triggers.forEach(function (trigger, i) { - trigger.el.trigger('change.uk.sortable', [trigger.el, currentlyDraggingElement, trigger.mode]); + if (trigger.sortable) { + trigger.sortable.element.trigger('change.uk.sortable', [trigger.sortable, el, trigger.mode]); + } }); }, @@ -547,7 +581,7 @@ }).each(function() { var ele = UI.$(this), before = ele.data('offset-before'); - ele.css({'position':'absolute', 'top':before.top, 'left':before.left, 'min-width':before.width }); + ele.css({position:'absolute', top:before.top, left:before.left, minWidth:before.width }); }); children.each(function(){ @@ -560,7 +594,7 @@ setTimeout(function(){ ele.animate({'top':offset.top, 'left':offset.left}, $this.options.animation, function() { - ele.css({'position':'','top':'', 'left':'', 'min-width': '', 'pointer-events':''}).removeClass($this.options.overClass).removeData('child-dragenter'); + ele.css({position:'',top:'', left:'', minWidth: '', 'pointer-events':''}).removeClass($this.options.overClass).removeData('child-dragenter'); count--; if (!count) { list.css('min-height', ''); @@ -577,16 +611,27 @@ this.element.children().each(function(j, child) { item = {}; - for (var i = 0; i < child.attributes.length; i++) { + for (var i = 0, attr, val; i < child.attributes.length; i++) { attribute = child.attributes[i]; if (attribute.name.indexOf('data-') === 0) { - item[attribute.name.substr(5)] = UI.Utils.str2json(attribute.value); + attr = attribute.name.substr(5); + val = UI.Utils.str2json(attribute.value); + item[attr] = (val || attribute.value=='false' || attribute.value=='0') ? val:attribute.value; } } data.push(item); }); return data; + }, + + checkEmptyList: function(list) { + + list = list ? UI.$(list) : this.element; + + if (this.options.emptyClass) { + list[!list.children().length ? 'addClass':'removeClass'](this.options.emptyClass); + } } }); diff --git a/media/uikit-v2/js/components/sortable.min.js b/media/uikit-v2/js/components/sortable.min.js new file mode 100644 index 0000000..6905290 --- /dev/null +++ b/media/uikit-v2/js/components/sortable.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-sortable",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";function e(e){e=t.$(e);do{if(e.data("sortable"))return e;e=t.$(e).parent()}while(e.length);return e}function o(t,e){var o=t.parentNode;if(e.parentNode!=o)return!1;for(var n=t.previousSibling;n&&9!==n.nodeType;){if(n===e)return!0;n=n.previousSibling}return!1}function n(t,e){var o=e;if(o==t)return null;for(;o;){if(o.parentNode===t)return o;if(o=o.parentNode,!o||!o.ownerDocument||11===o.nodeType)break}return null}function s(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}var a,r,i,l,d,h,u,p,c,g,f,m="ontouchstart"in window||"MSGesture"in window||window.DocumentTouch&&document instanceof DocumentTouch,v=m?"MSGesture"in window?"pointerdown":"touchstart":"mousedown",b=m?"MSGesture"in window?"pointermove":"touchmove":"mousemove",C=m?"MSGesture"in window?"pointerup":"touchend":"mouseup";return t.component("sortable",{defaults:{animation:150,threshold:10,childClass:"uk-sortable-item",placeholderClass:"uk-sortable-placeholder",overClass:"uk-sortable-over",draggingClass:"uk-sortable-dragged",dragMovingClass:"uk-sortable-moving",baseClass:"uk-sortable",noDragClass:"uk-sortable-nodrag",emptyClass:"uk-sortable-empty",dragCustomClass:"",handleClass:!1,group:!1,stop:function(){},start:function(){},change:function(){}},boot:function(){t.ready(function(e){t.$("[data-uk-sortable]",e).each(function(){var e=t.$(this);e.data("sortable")||t.sortable(e,t.Utils.options(e.attr("data-uk-sortable")))})}),t.$html.on(b,function(e){if(u){var o=e.originalEvent.targetTouches?e.originalEvent.targetTouches[0]:e;(Math.abs(o.pageX-u.pos.x)>u.threshold||Math.abs(o.pageY-u.pos.y)>u.threshold)&&u.apply(o)}if(a){d||(d=!0,a.show(),a.$current.addClass(a.$sortable.options.placeholderClass),a.$sortable.element.children().addClass(a.$sortable.options.childClass),t.$html.addClass(a.$sortable.options.dragMovingClass));var n=a.data("mouse-offset"),s=e.originalEvent.touches&&e.originalEvent.touches[0]||e.originalEvent,r=parseInt(s.pageX,10)+n.left,i=parseInt(s.pageY,10)+n.top;if(a.css({left:r,top:i}),i+a.height()/3>document.body.offsetHeight)return;iwindow.innerHeight+t.$win.scrollTop()&&t.$win.scrollTop(t.$win.scrollTop()+Math.ceil(a.height()/3))}}),t.$html.on(C,function(t){if(u=h=!1,!r||!a)return r=a=null,void 0;var o=e(r),n=a.$sortable,s={type:t.type};o[0]&&n.dragDrop(s,n.element),n.dragEnd(s,n.element)})},init:function(){function e(){m&&f.touches&&f.touches.length?h.addEventListener(b,y,!1):(h.addEventListener("mouseover",$,!1),h.addEventListener("mouseout",w,!1))}function o(){m&&f.touches&&f.touches.length?h.removeEventListener(b,y,!1):(h.removeEventListener("mouseover",$,!1),h.removeEventListener("mouseout",w,!1))}function a(t){r&&d.dragMove(t,d)}function l(e){return function(o){var s,a,r;f=o,o&&(s=o.touches&&o.touches[0]||o,a=s.target||o.target,m&&document.elementFromPoint&&(a=document.elementFromPoint(s.pageX-document.body.scrollLeft,s.pageY-document.body.scrollTop)),g=t.$(a)),t.$(a).hasClass("."+d.options.childClass)?e.apply(a,[o]):a!==h&&(r=n(h,a),r&&e.apply(r,[o]))}}var d=this,h=this.element[0];p=[],this.checkEmptyList(),this.element.data("sortable-group",this.options.group?this.options.group:t.Utils.uid("sortable-group"));var u=l(function(e){if(!e.data||!e.data.sortable){var o=t.$(e.target),n=o.is("a[href]")?o:o.parents("a[href]");if(!o.is(":input")){if(d.options.handleClass){var s=o.hasClass(d.options.handleClass)?o:o.closest("."+d.options.handleClass,d.element);if(!s.length)return}return e.preventDefault(),n.length&&n.one("click",function(t){t.preventDefault()}).one(C,function(){c||(n.trigger("click"),m&&n.attr("href").trim()&&(location.href=n.attr("href")))}),e.data=e.data||{},e.data.sortable=h,d.dragStart(e,this)}}}),$=l(t.Utils.debounce(function(t){return d.dragEnter(t,this)}),40),w=l(function(){var e=d.dragenterData(this);d.dragenterData(this,e-1),d.dragenterData(this)||(t.$(this).removeClass(d.options.overClass),d.dragenterData(this,!1))}),y=l(function(t){return r&&r!==this&&i!==this?(d.element.children().removeClass(d.options.overClass),i=this,d.moveElementNextTo(r,this),s(t)):!0});this.addDragHandlers=e,this.removeDragHandlers=o,window.addEventListener(b,a,!1),h.addEventListener(v,u,!1)},dragStart:function(e,o){c=!1,d=!1,l=!1;var n=this,s=t.$(e.target);if(!(!m&&2==e.button||s.is("."+n.options.noDragClass)||s.closest("."+n.options.noDragClass).length||s.is(":input"))){r=o,a&&a.remove();var i=t.$(r),h=i.offset(),p=e.touches&&e.touches[0]||e;u={pos:{x:p.pageX,y:p.pageY},threshold:n.options.handleClass?1:n.options.threshold,apply:function(){a=t.$('
        ').css({display:"none",top:h.top,left:h.left,width:i.width(),height:i.height(),padding:i.css("padding")}).data({"mouse-offset":{left:h.left-parseInt(p.pageX,10),top:h.top-parseInt(p.pageY,10)},origin:n.element,index:i.index()}).append(i.html()).appendTo("body"),a.$current=i,a.$sortable=n,i.data({"start-list":i.parent(),"start-index":i.index(),"sortable-group":n.options.group}),n.addDragHandlers(),n.options.start(this,r),n.trigger("start.uk.sortable",[n,r,a]),c=!0,u=!1}}}},dragMove:function(e){g=t.$(document.elementFromPoint(e.pageX-(document.body.scrollLeft||document.scrollLeft||0),e.pageY-(document.body.scrollTop||document.documentElement.scrollTop||0)));var o,n=g.closest("."+this.options.baseClass),s=n.data("sortable-group"),a=t.$(r),i=a.parent(),l=a.data("sortable-group");n[0]!==i[0]&&void 0!==l&&s===l&&(n.data("sortable").addDragHandlers(),p.push(n),n.children().addClass(this.options.childClass),n.children().length>0?(o=g.closest("."+this.options.childClass),o.length?o.before(a):n.append(a)):g.append(a),t.$doc.trigger("mouseover")),this.checkEmptyList(),this.checkEmptyList(i)},dragEnter:function(e,o){if(!r||r===o)return!0;var n=this.dragenterData(o);if(this.dragenterData(o,n+1),0===n){var s=t.$(o).parent(),a=t.$(r).data("start-list");if(s[0]!==a[0]){var i=s.data("sortable-group"),l=t.$(r).data("sortable-group");if((i||l)&&i!=l)return!1}t.$(o).addClass(this.options.overClass),this.moveElementNextTo(r,o)}return!1},dragEnd:function(e,o){var n=this;r&&(this.options.stop(o),this.trigger("stop.uk.sortable",[this])),r=null,i=null,p.push(this.element),p.forEach(function(e){t.$(e).children().each(function(){1===this.nodeType&&(t.$(this).removeClass(n.options.overClass).removeClass(n.options.placeholderClass).removeClass(n.options.childClass),n.dragenterData(this,!1))})}),p=[],t.$html.removeClass(this.options.dragMovingClass),this.removeDragHandlers(),a&&(a.remove(),a=null)},dragDrop:function(t){"drop"===t.type&&(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault()),this.triggerChangeEvents()},triggerChangeEvents:function(){if(r){var e=t.$(r),o=a.data("origin"),n=e.closest("."+this.options.baseClass),s=[],i=t.$(r);o[0]===n[0]&&a.data("index")!=e.index()?s.push({sortable:this,mode:"moved"}):o[0]!=n[0]&&s.push({sortable:t.$(n).data("sortable"),mode:"added"},{sortable:t.$(o).data("sortable"),mode:"removed"}),s.forEach(function(t){t.sortable&&t.sortable.element.trigger("change.uk.sortable",[t.sortable,i,t.mode])})}},dragenterData:function(e,o){return e=t.$(e),1==arguments.length?parseInt(e.data("child-dragenter"),10)||0:(o?e.data("child-dragenter",Math.max(0,o)):e.removeData("child-dragenter"),void 0)},moveElementNextTo:function(e,n){l=!0;var s=this,a=t.$(e).parent().css("min-height",""),r=o(e,n)?n:n.nextSibling,i=a.children(),d=i.length;return s.options.animation?(a.css("min-height",a.height()),i.stop().each(function(){var e=t.$(this),o=e.position();o.width=e.width(),e.data("offset-before",o)}),n.parentNode.insertBefore(e,r),t.Utils.checkDisplay(s.element.parent()),i=a.children().each(function(){var e=t.$(this);e.data("offset-after",e.position())}).each(function(){var e=t.$(this),o=e.data("offset-before");e.css({position:"absolute",top:o.top,left:o.left,minWidth:o.width})}),i.each(function(){var e=t.$(this),o=(e.data("offset-before"),e.data("offset-after"));e.css("pointer-events","none").width(),setTimeout(function(){e.animate({top:o.top,left:o.left},s.options.animation,function(){e.css({position:"",top:"",left:"",minWidth:"","pointer-events":""}).removeClass(s.options.overClass).removeData("child-dragenter"),d--,d||(a.css("min-height",""),t.Utils.checkDisplay(s.element.parent()))})},0)}),void 0):(n.parentNode.insertBefore(e,r),t.Utils.checkDisplay(s.element.parent()),void 0)},serialize:function(){var e,o,n=[];return this.element.children().each(function(s,a){e={};for(var r,i,l=0;l'), boundary = this.options.boundary, boundtoparent; - - this.wrapper = this.element.css('margin', 0).wrap(wrapper).parent(); + var boundary = this.options.boundary, boundtoparent; + this.wrapper = this.element.wrap('
        ').parent(); this.computeWrapper(); + this.wrapper.css({ + 'margin-top' : this.element.css('margin-top'), + 'margin-bottom' : this.element.css('margin-bottom'), + 'margin-left' : this.element.css('margin-left'), + 'margin-right' : this.element.css('margin-right') + }) + this.element.css('margin', 0); if (boundary) { - if (boundary === true) { + if (boundary === true || boundary[0] === '!') { - boundary = this.wrapper.parent(); + boundary = boundary === true ? this.wrapper.parent() : this.wrapper.closest(boundary.substr(1)); boundtoparent = true; } else if (typeof boundary === "string") { @@ -98,21 +112,52 @@ currentTop : null, wrapper : this.wrapper, init : false, - getWidthFrom : this.options.getWidthFrom || this.wrapper, + getWidthFrom : UI.$(this.options.getWidthFrom || this.wrapper), boundary : boundary, boundtoparent : boundtoparent, - reset : function(force) { + top : 0, + calcTop : function() { + + var top = this.options.top; + + // dynamic top parameter + if (this.options.top && typeof(this.options.top) == 'string') { + + // e.g. 50vh + if (this.options.top.match(/^(-|)(\d+)vh$/)) { + top = window.innerHeight * parseInt(this.options.top, 10)/100; + // e.g. #elementId, or .class-1,class-2,.class-3 (first found is used) + } else { + + var topElement = UI.$(this.options.top).first(); + + if (topElement.length && topElement.is(':visible')) { + top = -1 * ((topElement.offset().top + topElement.outerHeight()) - this.wrapper.offset().top); + } + } + + } + + this.top = top; + }, + + reset: function(force) { + + this.calcTop(); var finalize = function() { - this.element.css({"position":"", "top":"", "width":"", "left":"", "margin":"0"}); + this.element.css({position:'', top:'', width:'', left:'', margin:'0'}); this.element.removeClass([this.options.animation, 'uk-animation-reverse', this.options.clsactive].join(' ')); + this.element.addClass(this.options.clsinactive); + this.element.trigger('inactive.uk.sticky'); this.currentTop = null; this.animate = false; + }.bind(this); - if (!force && this.options.animation && UI.support.animation) { + if (!force && this.options.animation && UI.support.animation && !UI.Utils.isInView(this.wrapper)) { this.animate = true; @@ -153,12 +198,28 @@ dwh = documentHeight - window.innerHeight, extra = (scrollTop > dwh) ? dwh - scrollTop : 0, elementTop = this.wrapper.offset().top, - etse = elementTop - this.options.top - extra; + etse = elementTop - this.top - extra, + active = (scrollTop >= etse); - return (scrollTop >= etse); + if (active && this.options.showup) { + + // set inactiv if scrolling down + if (direction == 1) { + active = false; + } + + // set inactive when wrapper is still in view + if (direction == -1 && !this.element.hasClass(this.options.clsactive) && UI.Utils.isInView(this.wrapper)) { + active = false; + } + } + + return active; } }; + this.sticky.calcTop(); + sticked.push(this.sticky); }, @@ -179,14 +240,19 @@ computeWrapper: function() { this.wrapper.css({ - 'height' : this.element.css('position') != 'absolute' ? this.element.outerHeight() : '', - 'float' : this.element.css("float") != "none" ? this.element.css("float") : '', - 'margin' : this.element.css("margin") + 'height' : ['absolute','fixed'].indexOf(this.element.css('position')) == -1 ? this.element.outerHeight() : '', + 'float' : this.element.css('float') != 'none' ? this.element.css('float') : '' }); + + if (this.element.css('position') == 'fixed') { + this.element.css({ + width: this.sticky.getWidthFrom.length ? this.sticky.getWidthFrom.width() : this.element.width() + }); + } } }); - function checkscrollposition() { + function checkscrollposition(direction) { var stickies = arguments.length ? arguments : sticked; @@ -203,7 +269,7 @@ sticky = stickies[i]; - if (!sticky.element.is(":visible") || sticky.animate) { + if (!sticky.element.is(':visible') || sticky.animate) { continue; } @@ -215,35 +281,34 @@ } else { - if (sticky.options.top < 0) { + if (sticky.top < 0) { newTop = 0; } else { stickyHeight = sticky.element.outerHeight(); - newTop = documentHeight - stickyHeight - sticky.options.top - sticky.options.bottom - scrollTop - extra; - newTop = newTop < 0 ? newTop + sticky.options.top : sticky.options.top; + newTop = documentHeight - stickyHeight - sticky.top - sticky.options.bottom - scrollTop - extra; + newTop = newTop < 0 ? newTop + sticky.top : sticky.top; } if (sticky.boundary && sticky.boundary.length) { - var bTop = sticky.boundary.position().top; + var bTop = sticky.boundary.offset().top; if (sticky.boundtoparent) { containerBottom = documentHeight - (bTop + sticky.boundary.outerHeight()) + parseInt(sticky.boundary.css('padding-bottom')); } else { - containerBottom = documentHeight - bTop - parseInt(sticky.boundary.css('margin-top')); + containerBottom = documentHeight - bTop; } - newTop = (scrollTop + stickyHeight) > (documentHeight - containerBottom - (sticky.options.top < 0 ? 0 : sticky.options.top)) ? (documentHeight - containerBottom) - (scrollTop + stickyHeight) : newTop; + newTop = (scrollTop + stickyHeight) > (documentHeight - containerBottom - (sticky.top < 0 ? 0 : sticky.top)) ? (documentHeight - containerBottom) - (scrollTop + stickyHeight) : newTop; } if (sticky.currentTop != newTop) { sticky.element.css({ - "position" : "fixed", - "top" : newTop, - "width" : (typeof sticky.getWidthFrom !== 'undefined') ? UI.$(sticky.getWidthFrom).width() : sticky.element.width(), - "left" : sticky.wrapper.offset().left + position : 'fixed', + top : newTop, + width : sticky.getWidthFrom.length ? sticky.getWidthFrom.width() : sticky.element.width() }); if (!sticky.init) { @@ -279,10 +344,11 @@ } } - sticky.element.addClass(sticky.options.clsactive); + sticky.element.addClass(sticky.options.clsactive).removeClass(sticky.options.clsinactive); + sticky.element.trigger('active.uk.sticky'); sticky.element.css('margin', ''); - if (sticky.options.animation && sticky.init) { + if (sticky.options.animation && sticky.init && !UI.Utils.isInView(sticky.wrapper)) { sticky.element.addClass(sticky.options.animation); } diff --git a/media/uikit-v2/js/components/sticky.min.js b/media/uikit-v2/js/components/sticky.min.js new file mode 100644 index 0000000..8443344 --- /dev/null +++ b/media/uikit-v2/js/components/sticky.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var i;window.UIkit2&&(i=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-sticky",["uikit"],function(){return i||t(UIkit2)})}(function(t){"use strict";function i(){var i=arguments.length?arguments:n;if(i.length&&!(e.scrollTop()<0))for(var o,a,r,h,p=e.scrollTop(),c=s.height(),l=e.height(),m=c-l,d=p>m?m-p:0,u=0;uo?o+h.top:h.top),h.boundary&&h.boundary.length){var f=h.boundary.offset().top;a=h.boundtoparent?c-(f+h.boundary.outerHeight())+parseInt(h.boundary.css("padding-bottom")):c-f,o=p+r>c-a-(h.top<0?0:h.top)?c-a-(p+r):o}if(h.currentTop!=o){if(h.element.css({position:"fixed",top:o,width:h.getWidthFrom.length?h.getWidthFrom.width():h.element.width()}),!h.init&&(h.element.addClass(h.options.clsinit),location.hash&&p>0&&h.options.target)){var g=t.$(location.hash);g.length&&setTimeout(function(t,i){return function(){i.element.width();var e=t.offset(),s=e.top+t.outerHeight(),n=i.element.offset(),o=i.element.outerHeight(),a=n.top+o;n.top').parent(),this.computeWrapper(),this.wrapper.css({"margin-top":this.element.css("margin-top"),"margin-bottom":this.element.css("margin-bottom"),"margin-left":this.element.css("margin-left"),"margin-right":this.element.css("margin-right")}),this.element.css("margin",0),a&&(a===!0||"!"===a[0]?(a=a===!0?this.wrapper.parent():this.wrapper.closest(a.substr(1)),i=!0):"string"==typeof a&&(a=t.$(a))),this.sticky={self:this,options:this.options,element:this.element,currentTop:null,wrapper:this.wrapper,init:!1,getWidthFrom:t.$(this.options.getWidthFrom||this.wrapper),boundary:a,boundtoparent:i,top:0,calcTop:function(){var i=this.options.top;if(this.options.top&&"string"==typeof this.options.top)if(this.options.top.match(/^(-|)(\d+)vh$/))i=window.innerHeight*parseInt(this.options.top,10)/100;else{var e=t.$(this.options.top).first();e.length&&e.is(":visible")&&(i=-1*(e.offset().top+e.outerHeight()-this.wrapper.offset().top))}this.top=i},reset:function(i){this.calcTop();var e=function(){this.element.css({position:"",top:"",width:"",left:"",margin:"0"}),this.element.removeClass([this.options.animation,"uk-animation-reverse",this.options.clsactive].join(" ")),this.element.addClass(this.options.clsinactive),this.element.trigger("inactive.uk.sticky"),this.currentTop=null,this.animate=!1}.bind(this);!i&&this.options.animation&&t.support.animation&&!t.Utils.isInView(this.wrapper)?(this.animate=!0,this.element.removeClass(this.options.animation).one(t.support.animation.end,function(){e()}).width(),this.element.addClass(this.options.animation+" uk-animation-reverse")):e()},check:function(){if(this.options.disabled)return!1;if(this.options.media)switch(typeof this.options.media){case"number":if(window.innerWidtha?a-i:0,h=this.wrapper.offset().top,p=h-this.top-r,c=i>=p;return c&&this.options.showup&&(1==o&&(c=!1),-1==o&&!this.element.hasClass(this.options.clsactive)&&t.Utils.isInView(this.wrapper)&&(c=!1)),c}},this.sticky.calcTop(),n.push(this.sticky)},update:function(){i(this.sticky)},enable:function(){this.options.disabled=!1,this.update()},disable:function(t){this.options.disabled=!0,this.sticky.reset(t)},computeWrapper:function(){this.wrapper.css({height:-1==["absolute","fixed"].indexOf(this.element.css("position"))?this.element.outerHeight():"","float":"none"!=this.element.css("float")?this.element.css("float"):""}),"fixed"==this.element.css("position")&&this.element.css({width:this.sticky.getWidthFrom.length?this.sticky.getWidthFrom.width():this.element.width()})}}),t.sticky}); \ No newline at end of file diff --git a/media/uikit/js/components/timepicker.js b/media/uikit-v2/js/components/timepicker.js similarity index 90% rename from media/uikit/js/components/timepicker.js rename to media/uikit-v2/js/components/timepicker.js index 4f48c3f..5ab3053 100644 --- a/media/uikit/js/components/timepicker.js +++ b/media/uikit-v2/js/components/timepicker.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-search", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-timepicker', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -30,12 +30,12 @@ boot: function() { // init code - UI.$html.on("focus.timepicker.uikit", "[data-uk-timepicker]", function(e) { + UI.$html.on('focus.timepicker.uikit', '[data-uk-timepicker]', function(e) { var ele = UI.$(this); - if (!ele.data("timepicker")) { - var obj = UI.timepicker(ele, UI.Utils.options(ele.attr("data-uk-timepicker"))); + if (!ele.data('timepicker')) { + var obj = UI.timepicker(ele, UI.Utils.options(ele.attr('data-uk-timepicker'))); setTimeout(function(){ obj.autocomplete.input.focus(); @@ -79,9 +79,9 @@ $this.autocomplete.value = Math.random(); $this.autocomplete.triggercomplete(); - }).on('blur', function() { + }).on('blur', UI.Utils.debounce(function() { $this.checkTime(); - }); + }, 100)); this.element.data("timepicker", this); }, diff --git a/media/uikit-v2/js/components/timepicker.min.js b/media/uikit-v2/js/components/timepicker.min.js new file mode 100644 index 0000000..dccd52f --- /dev/null +++ b/media/uikit-v2/js/components/timepicker.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var e;window.UIkit2&&(e=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-timepicker",["uikit"],function(){return e||t(UIkit2)})}(function(t){"use strict";function e(t,e){t=t||0,e=e||24;var i,o,a={"12h":[],"24h":[]};for(i=t,o="";e>i;i++)o=""+i,10>i&&(o="0"+o),a["24h"].push({value:o+":00"}),a["24h"].push({value:o+":30"}),0===i&&(o=12,a["12h"].push({value:o+":00 AM"}),a["12h"].push({value:o+":30 AM"})),i>0&&13>i&&12!==i&&(a["12h"].push({value:o+":00 AM"}),a["12h"].push({value:o+":30 AM"})),i>=12&&(o-=12,0===o&&(o=12),10>o&&(o="0"+String(o)),a["12h"].push({value:o+":00 PM"}),a["12h"].push({value:o+":30 PM"}));return a}t.component("timepicker",{defaults:{format:"24h",delay:0,start:0,end:24},boot:function(){t.$html.on("focus.timepicker.uikit","[data-uk-timepicker]",function(){var e=t.$(this);if(!e.data("timepicker")){var i=t.timepicker(e,t.Utils.options(e.attr("data-uk-timepicker")));setTimeout(function(){i.autocomplete.input.focus()},40)}})},init:function(){var i,o=this,a=e(this.options.start,this.options.end);this.options.minLength=0,this.options.template='',this.options.source=function(t){t(a[o.options.format]||a["12h"])},this.element.is("input")?(this.element.wrap('
        '),i=this.element.parent()):i=this.element.addClass("uk-autocomplete"),this.autocomplete=t.autocomplete(i,this.options),this.autocomplete.dropdown.addClass("uk-dropdown-small uk-dropdown-scrollable"),this.autocomplete.on("show.uk.autocomplete",function(){var t=o.autocomplete.dropdown.find('[data-value="'+o.autocomplete.input.val()+'"]');setTimeout(function(){o.autocomplete.pick(t,!0)},10)}),this.autocomplete.input.on("focus",function(){o.autocomplete.value=Math.random(),o.autocomplete.triggercomplete()}).on("blur",t.Utils.debounce(function(){o.checkTime()},100)),this.element.data("timepicker",this)},checkTime:function(){var t,e,i,o,a="AM",u=this.autocomplete.input.val();"12h"==this.options.format?(t=u.split(" "),e=t[0].split(":"),a=t[1]):e=u.split(":"),i=parseInt(e[0],10),o=parseInt(e[1],10),isNaN(i)&&(i=0),isNaN(o)&&(o=0),"12h"==this.options.format?(i>12?i=12:0>i&&(i=12),"am"===a||"a"===a?a="AM":("pm"===a||"p"===a)&&(a="PM"),"AM"!==a&&"PM"!==a&&(a="AM")):i>=24?i=23:0>i&&(i=0),0>o?o=0:o>=60&&(o=0),this.autocomplete.input.val(this.formatTime(i,o,a)).trigger("change")},formatTime:function(t,e,i){return t=10>t?"0"+t:t,e=10>e?"0"+e:e,t+":"+e+("12h"==this.options.format?" "+i:"")}})}); \ No newline at end of file diff --git a/media/uikit/js/components/tooltip.js b/media/uikit-v2/js/components/tooltip.js similarity index 61% rename from media/uikit/js/components/tooltip.js rename to media/uikit-v2/js/components/tooltip.js index 8e704f7..ff09dbd 100644 --- a/media/uikit/js/components/tooltip.js +++ b/media/uikit-v2/js/components/tooltip.js @@ -1,14 +1,14 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-tooltip", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-tooltip', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -17,22 +17,21 @@ "use strict"; var $tooltip, // tooltip container - tooltipdelay, checkdelay; + tooltipdelay, checkIdle; UI.component('tooltip', { defaults: { - "offset": 5, - "pos": "top", - "animation": false, - "delay": 0, // in miliseconds - "cls": "", - "activeClass": "uk-active", - "src": function(ele, title) { + offset: 5, + pos: 'top', + animation: false, + delay: 0, // in miliseconds + cls: '', + activeClass: 'uk-active', + src: function(ele) { + var title = ele.attr('title'); - title = ele.attr('title'); - - if (title) { + if (title !== undefined) { ele.data('cached-title', title).removeAttr('title'); } @@ -40,17 +39,17 @@ } }, - tip: "", + tip: '', boot: function() { // init code - UI.$html.on("mouseenter.tooltip.uikit focus.tooltip.uikit", "[data-uk-tooltip]", function(e) { + UI.$html.on('mouseenter.tooltip.uikit focus.tooltip.uikit', '[data-uk-tooltip]', function(e) { var ele = UI.$(this); - if (!ele.data("tooltip")) { - var obj = UI.tooltip(ele, UI.Utils.options(ele.attr("data-uk-tooltip"))); - ele.trigger("mouseenter"); + if (!ele.data('tooltip')) { + UI.tooltip(ele, UI.Utils.options(ele.attr('data-uk-tooltip'))); + ele.trigger('mouseenter'); } }); }, @@ -73,13 +72,14 @@ show: function() { - this.tip = typeof(this.options.src) === "function" ? this.options.src(this.element) : this.options.src; + this.tip = typeof(this.options.src) === 'function' ? this.options.src(this.element) : this.options.src; - if (tooltipdelay) clearTimeout(tooltipdelay); - if (checkdelay) clearTimeout(checkdelay); - if (!this.tip.length) return; + if (tooltipdelay) clearTimeout(tooltipdelay); + if (checkIdle) clearInterval(checkIdle); - $tooltip.stop().css({"top": -2000, "visibility": "hidden"}).removeClass(this.options.activeClass).show(); + if (typeof(this.tip) === 'string' ? !this.tip.length:true) return; + + $tooltip.stop().css({top: -2000, visibility: 'hidden'}).removeClass(this.options.activeClass).show(); $tooltip.html('
        ' + this.tip + '
        '); var $this = this, @@ -90,10 +90,10 @@ position = typeof(this.options.pos) === "function" ? this.options.pos.call(this.element) : this.options.pos, tmppos = position.split("-"), tcss = { - "display" : "none", - "visibility" : "visible", - "top" : (pos.top + pos.height + height), - "left" : pos.left + display : 'none', + visibility : 'visible', + top : (pos.top + pos.height + height), + left : pos.left }; @@ -102,22 +102,22 @@ if (UI.$html.css('position')=='fixed' || UI.$body.css('position')=='fixed'){ var bodyoffset = UI.$('body').offset(), htmloffset = UI.$('html').offset(), - docoffset = {'top': (htmloffset.top + bodyoffset.top), 'left': (htmloffset.left + bodyoffset.left)}; + docoffset = {top: (htmloffset.top + bodyoffset.top), left: (htmloffset.left + bodyoffset.left)}; pos.left -= docoffset.left; pos.top -= docoffset.top; } - if ((tmppos[0] == "left" || tmppos[0] == "right") && UI.langdirection == 'right') { - tmppos[0] = tmppos[0] == "left" ? "right" : "left"; + if ((tmppos[0] == 'left' || tmppos[0] == 'right') && UI.langdirection == 'right') { + tmppos[0] = tmppos[0] == 'left' ? 'right' : 'left'; } var variants = { - "bottom" : {top: pos.top + pos.height + offset, left: pos.left + pos.width / 2 - width / 2}, - "top" : {top: pos.top - height - offset, left: pos.left + pos.width / 2 - width / 2}, - "left" : {top: pos.top + pos.height / 2 - height / 2, left: pos.left - width - offset}, - "right" : {top: pos.top + pos.height / 2 - height / 2, left: pos.left + pos.width + offset} + bottom : {top: pos.top + pos.height + offset, left: pos.left + pos.width / 2 - width / 2}, + top : {top: pos.top - height - offset, left: pos.left + pos.width / 2 - width / 2}, + left : {top: pos.top + pos.height / 2 - height / 2, left: pos.left - width - offset}, + right : {top: pos.top + pos.height / 2 - height / 2, left: pos.left + pos.width + offset} }; UI.$.extend(tcss, variants[tmppos[0]]); @@ -129,37 +129,37 @@ if(boundary) { switch(boundary) { - case "x": + case 'x': if (tmppos.length == 2) { - position = tmppos[0]+"-"+(tcss.left < 0 ? "left": "right"); + position = tmppos[0]+"-"+(tcss.left < 0 ? 'left': 'right'); } else { - position = tcss.left < 0 ? "right": "left"; + position = tcss.left < 0 ? 'right': 'left'; } break; - case "y": + case 'y': if (tmppos.length == 2) { - position = (tcss.top < 0 ? "bottom": "top")+"-"+tmppos[1]; + position = (tcss.top < 0 ? 'bottom': 'top')+'-'+tmppos[1]; } else { - position = (tcss.top < 0 ? "bottom": "top"); + position = (tcss.top < 0 ? 'bottom': 'top'); } break; - case "xy": + case 'xy': if (tmppos.length == 2) { - position = (tcss.top < 0 ? "bottom": "top")+"-"+(tcss.left < 0 ? "left": "right"); + position = (tcss.top < 0 ? 'bottom': 'top')+'-'+(tcss.left < 0 ? 'left': 'right'); } else { - position = tcss.left < 0 ? "right": "left"; + position = tcss.left < 0 ? 'right': 'left'; } break; } - tmppos = position.split("-"); + tmppos = position.split('-'); UI.$.extend(tcss, variants[tmppos[0]]); @@ -171,7 +171,7 @@ tooltipdelay = setTimeout(function(){ - $tooltip.css(tcss).attr("class", ["uk-tooltip", "uk-tooltip-"+position, $this.options.cls].join(' ')); + $tooltip.css(tcss).attr('class', ['uk-tooltip', 'uk-tooltip-'+position, $this.options.cls].join(' ')); if ($this.options.animation) { $tooltip.css({opacity: 0, display: 'block'}).addClass($this.options.activeClass).animate({opacity: 1}, parseInt($this.options.animation, 10) || 400); @@ -182,7 +182,7 @@ tooltipdelay = false; // close tooltip if element was removed or hidden - checkdelay = setInterval(function(){ + checkIdle = setInterval(function(){ if(!$this.element.is(':visible')) $this.hide(); }, 150); @@ -190,10 +190,11 @@ }, hide: function() { - if(this.element.is("input") && this.element[0]===document.activeElement) return; - if(tooltipdelay) clearTimeout(tooltipdelay); - if (checkdelay) clearTimeout(checkdelay); + if (this.element.is('input') && this.element[0]===document.activeElement) return; + + if (tooltipdelay) clearTimeout(tooltipdelay); + if (checkIdle) clearInterval(checkIdle); $tooltip.stop(); diff --git a/media/uikit-v2/js/components/tooltip.min.js b/media/uikit-v2/js/components/tooltip.min.js new file mode 100644 index 0000000..b420ccd --- /dev/null +++ b/media/uikit-v2/js/components/tooltip.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var i;window.UIkit2&&(i=t(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-tooltip",["uikit"],function(){return i||t(UIkit2)})}(function(t){"use strict";var i,o,e;return t.component("tooltip",{defaults:{offset:5,pos:"top",animation:!1,delay:0,cls:"",activeClass:"uk-active",src:function(t){var i=t.attr("title");return void 0!==i&&t.data("cached-title",i).removeAttr("title"),t.data("cached-title")}},tip:"",boot:function(){t.$html.on("mouseenter.tooltip.uikit focus.tooltip.uikit","[data-uk-tooltip]",function(){var i=t.$(this);i.data("tooltip")||(t.tooltip(i,t.Utils.options(i.attr("data-uk-tooltip"))),i.trigger("mouseenter"))})},init:function(){var o=this;i||(i=t.$('
        ').appendTo("body")),this.on({focus:function(){o.show()},blur:function(){o.hide()},mouseenter:function(){o.show()},mouseleave:function(){o.hide()}})},show:function(){if(this.tip="function"==typeof this.options.src?this.options.src(this.element):this.options.src,o&&clearTimeout(o),e&&clearInterval(e),"string"==typeof this.tip?this.tip.length:0){i.stop().css({top:-2e3,visibility:"hidden"}).removeClass(this.options.activeClass).show(),i.html('
        '+this.tip+"
        ");var s=this,n=t.$.extend({},this.element.offset(),{width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}),l=i[0].offsetWidth,f=i[0].offsetHeight,a="function"==typeof this.options.offset?this.options.offset.call(this.element):this.options.offset,p="function"==typeof this.options.pos?this.options.pos.call(this.element):this.options.pos,h=p.split("-"),c={display:"none",visibility:"visible",top:n.top+n.height+f,left:n.left};if("fixed"==t.$html.css("position")||"fixed"==t.$body.css("position")){var r=t.$("body").offset(),d=t.$("html").offset(),u={top:d.top+r.top,left:d.left+r.left};n.left-=u.left,n.top-=u.top}"left"!=h[0]&&"right"!=h[0]||"right"!=t.langdirection||(h[0]="left"==h[0]?"right":"left");var m={bottom:{top:n.top+n.height+a,left:n.left+n.width/2-l/2},top:{top:n.top-f-a,left:n.left+n.width/2-l/2},left:{top:n.top+n.height/2-f/2,left:n.left-l-a},right:{top:n.top+n.height/2-f/2,left:n.left+n.width+a}};t.$.extend(c,m[h[0]]),2==h.length&&(c.left="left"==h[1]?n.left:n.left+n.width-l);var v=this.checkBoundary(c.left,c.top,l,f);if(v){switch(v){case"x":p=2==h.length?h[0]+"-"+(c.left<0?"left":"right"):c.left<0?"right":"left";break;case"y":p=2==h.length?(c.top<0?"bottom":"top")+"-"+h[1]:c.top<0?"bottom":"top";break;case"xy":p=2==h.length?(c.top<0?"bottom":"top")+"-"+(c.left<0?"left":"right"):c.left<0?"right":"left"}h=p.split("-"),t.$.extend(c,m[h[0]]),2==h.length&&(c.left="left"==h[1]?n.left:n.left+n.width-l)}c.left-=t.$body.position().left,o=setTimeout(function(){i.css(c).attr("class",["uk-tooltip","uk-tooltip-"+p,s.options.cls].join(" ")),s.options.animation?i.css({opacity:0,display:"block"}).addClass(s.options.activeClass).animate({opacity:1},parseInt(s.options.animation,10)||400):i.show().addClass(s.options.activeClass),o=!1,e=setInterval(function(){s.element.is(":visible")||s.hide()},150)},parseInt(this.options.delay,10)||0)}},hide:function(){if(!this.element.is("input")||this.element[0]!==document.activeElement)if(o&&clearTimeout(o),e&&clearInterval(e),i.stop(),this.options.animation){var t=this;i.fadeOut(parseInt(this.options.animation,10)||400,function(){i.removeClass(t.options.activeClass)})}else i.hide().removeClass(this.options.activeClass)},content:function(){return this.tip},checkBoundary:function(i,o,e,s){var n="";return(0>i||i-t.$win.scrollLeft()+e>window.innerWidth)&&(n+="x"),(0>o||o-t.$win.scrollTop()+s>window.innerHeight)&&(n+="y"),n}}),t.tooltip}); \ No newline at end of file diff --git a/media/uikit/js/components/upload.js b/media/uikit-v2/js/components/upload.js similarity index 71% rename from media/uikit/js/components/upload.js rename to media/uikit-v2/js/components/upload.js index 21699b0..ba0f906 100644 --- a/media/uikit/js/components/upload.js +++ b/media/uikit-v2/js/components/upload.js @@ -1,15 +1,15 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(addon) { var component; - if (window.UIkit) { - component = addon(UIkit); + if (window.UIkit2) { + component = addon(UIkit2); } - if (typeof define == "function" && define.amd) { - define("uikit-upload", ["uikit"], function(){ - return component || addon(UIkit); + if (typeof define == 'function' && define.amd) { + define('uikit-upload', ['uikit'], function(){ + return component || addon(UIkit2); }); } @@ -23,7 +23,7 @@ var $this = this; - this.on("change", function() { + this.on('change', function() { xhrupload($this.element[0].files, $this.options); var twin = $this.element.clone(true).data('uploadSelect', $this); $this.element.replaceWith(twin); @@ -42,23 +42,23 @@ var $this = this, hasdragCls = false; - this.on("drop", function(e){ + this.on('drop', function(e){ - if (e.dataTransfer && e.dataTransfer.files) { + if (e.originalEvent.dataTransfer && e.originalEvent.dataTransfer.files) { e.stopPropagation(); e.preventDefault(); $this.element.removeClass($this.options.dragoverClass); - $this.element.trigger('dropped.uk.upload', [e.dataTransfer.files]); + $this.element.trigger('dropped.uk.upload', [e.originalEvent.dataTransfer.files]); - xhrupload(e.dataTransfer.files, $this.options); + xhrupload(e.originalEvent.dataTransfer.files, $this.options); } - }).on("dragenter", function(e){ + }).on('dragenter', function(e){ e.stopPropagation(); e.preventDefault(); - }).on("dragover", function(e){ + }).on('dragover', function(e){ e.stopPropagation(); e.preventDefault(); @@ -66,7 +66,7 @@ $this.element.addClass($this.options.dragoverClass); hasdragCls = true; } - }).on("dragleave", function(e){ + }).on('dragleave', function(e){ e.stopPropagation(); e.preventDefault(); $this.element.removeClass($this.options.dragoverClass); @@ -93,9 +93,6 @@ return supportFileAPI() && supportAjaxUploadProgressEvents() && supportFormData(); })(); - if (UI.support.ajaxupload){ - UI.$.event.props.push("dataTransfer"); - } function xhrupload(files, settings) { @@ -175,19 +172,27 @@ for (var p in settings.params) { formData.append(p, settings.params[p]); } // Add any event handlers here... - xhr.upload.addEventListener("progress", function(e){ + xhr.upload.addEventListener('progress', function(e){ var percent = (e.loaded / e.total)*100; settings.progress(percent, e); }, false); - xhr.addEventListener("loadstart", function(e){ settings.loadstart(e); }, false); - xhr.addEventListener("load", function(e){ settings.load(e); }, false); - xhr.addEventListener("loadend", function(e){ settings.loadend(e); }, false); - xhr.addEventListener("error", function(e){ settings.error(e); }, false); - xhr.addEventListener("abort", function(e){ settings.abort(e); }, false); + xhr.addEventListener('loadstart', function(e){ settings.loadstart(e); }, false); + xhr.addEventListener('load', function(e){ settings.load(e); }, false); + xhr.addEventListener('loadend', function(e){ settings.loadend(e); }, false); + xhr.addEventListener('error', function(e){ settings.error(e); }, false); + xhr.addEventListener('abort', function(e){ settings.abort(e); }, false); xhr.open(settings.method, settings.action, true); + if (settings.type=='json') { + xhr.setRequestHeader('Accept', 'application/json'); + } + + for (var h in settings.headers) { + xhr.setRequestHeader(h, settings.headers[h]); + } + xhr.onreadystatechange = function() { settings.readystatechange(xhr); @@ -196,7 +201,7 @@ var response = xhr.responseText; - if (settings.type=="json") { + if (settings.type=='json') { try { response = UI.$.parseJSON(response); } catch(e) { @@ -213,29 +218,30 @@ } xhrupload.defaults = { - 'action': '', - 'single': true, - 'method': 'POST', - 'param' : 'files[]', - 'params': {}, - 'allow' : '*.*', - 'type' : 'text', - 'filelimit': false, + action: '', + single: true, + method: 'POST', + param : 'files[]', + params: {}, + allow : '*.*', + type : 'text', + filelimit: false, + headers: {}, // events - 'before' : function(o){}, - 'beforeSend' : function(xhr){}, - 'beforeAll' : function(){}, - 'loadstart' : function(){}, - 'load' : function(){}, - 'loadend' : function(){}, - 'error' : function(){}, - 'abort' : function(){}, - 'progress' : function(){}, - 'complete' : function(){}, - 'allcomplete' : function(){}, - 'readystatechange': function(){}, - 'notallowed' : function(file, settings){ alert('Only the following file types are allowed: '+settings.allow); } + before : function(o){}, + beforeSend : function(xhr){}, + beforeAll : function(){}, + loadstart : function(){}, + load : function(){}, + loadend : function(){}, + error : function(){}, + abort : function(){}, + progress : function(){}, + complete : function(){}, + allcomplete : function(){}, + readystatechange: function(){}, + notallowed : function(file, settings){ alert('Only the following file types are allowed: '+settings.allow); } }; function matchName(pattern, path) { diff --git a/media/uikit-v2/js/components/upload.min.js b/media/uikit-v2/js/components/upload.min.js new file mode 100644 index 0000000..26d4c02 --- /dev/null +++ b/media/uikit-v2/js/components/upload.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(e){var t;window.UIkit2&&(t=e(UIkit2)),"function"==typeof define&&define.amd&&define("uikit-upload",["uikit"],function(){return t||e(UIkit2)})}(function(e){"use strict";function t(o,a){function r(t,n){var o=new FormData,a=new XMLHttpRequest;if(n.before(n,t)!==!1){for(var r,i=0;r=t[i];i++)o.append(n.param,r);for(var l in n.params)o.append(l,n.params[l]);a.upload.addEventListener("progress",function(e){var t=e.loaded/e.total*100;n.progress(t,e)},!1),a.addEventListener("loadstart",function(e){n.loadstart(e)},!1),a.addEventListener("load",function(e){n.load(e)},!1),a.addEventListener("loadend",function(e){n.loadend(e)},!1),a.addEventListener("error",function(e){n.error(e)},!1),a.addEventListener("abort",function(e){n.abort(e)},!1),a.open(n.method,n.action,!0),"json"==n.type&&a.setRequestHeader("Accept","application/json");for(var s in n.headers)a.setRequestHeader(s,n.headers[s]);a.onreadystatechange=function(){if(n.readystatechange(a),4==a.readyState){var t=a.responseText;if("json"==n.type)try{t=e.$.parseJSON(t)}catch(o){t=!1}n.complete(t,a)}},n.beforeSend(a),a.send(o)}}if(!e.support.ajaxupload)return this;if(a=e.$.extend({},t.defaults,a),o.length){if("*.*"!==a.allow)for(var i,l=0;i=o[l];l++)if(!n(a.allow,i.name))return"string"==typeof a.notallowed?alert(a.notallowed):a.notallowed(i,a),void 0;var s=a.complete;if(a.single){var d=o.length,f=0,p=!0;a.beforeAll(o),a.complete=function(e,t){f+=1,s(e,t),a.filelimit&&f>=a.filelimit&&(p=!1),p&&d>f?r([o[f]],a):a.allcomplete(e,t)},r([o[0]],a)}else a.complete=function(e,t){s(e,t),a.allcomplete(e,t)},r(o,a)}}function n(e,t){var n="^"+e.replace(/\//g,"\\/").replace(/\*\*/g,"(\\/[^\\/]+)*").replace(/\*/g,"[^\\/]+").replace(/((?!\\))\?/g,"$1.")+"$";return n="^"+n+"$",null!==t.match(new RegExp(n,"i"))}return e.component("uploadSelect",{init:function(){var e=this;this.on("change",function(){t(e.element[0].files,e.options);var n=e.element.clone(!0).data("uploadSelect",e);e.element.replaceWith(n),e.element=n})}}),e.component("uploadDrop",{defaults:{dragoverClass:"uk-dragover"},init:function(){var e=this,n=!1;this.on("drop",function(n){n.originalEvent.dataTransfer&&n.originalEvent.dataTransfer.files&&(n.stopPropagation(),n.preventDefault(),e.element.removeClass(e.options.dragoverClass),e.element.trigger("dropped.uk.upload",[n.originalEvent.dataTransfer.files]),t(n.originalEvent.dataTransfer.files,e.options))}).on("dragenter",function(e){e.stopPropagation(),e.preventDefault()}).on("dragover",function(t){t.stopPropagation(),t.preventDefault(),n||(e.element.addClass(e.options.dragoverClass),n=!0)}).on("dragleave",function(t){t.stopPropagation(),t.preventDefault(),e.element.removeClass(e.options.dragoverClass),n=!1})}}),e.support.ajaxupload=function(){function e(){var e=document.createElement("INPUT");return e.type="file","files"in e}function t(){var e=new XMLHttpRequest;return!!(e&&"upload"in e&&"onprogress"in e.upload)}function n(){return!!window.FormData}return e()&&t()&&n()}(),t.defaults={action:"",single:!0,method:"POST",param:"files[]",params:{},allow:"*.*",type:"text",filelimit:!1,headers:{},before:function(){},beforeSend:function(){},beforeAll:function(){},loadstart:function(){},load:function(){},loadend:function(){},error:function(){},abort:function(){},progress:function(){},complete:function(){},allcomplete:function(){},readystatechange:function(){},notallowed:function(e,t){alert("Only the following file types are allowed: "+t.allow)}},e.Utils.xhrupload=t,t}); \ No newline at end of file diff --git a/media/uikit/js/core/alert.js b/media/uikit-v2/js/core/alert.js similarity index 54% rename from media/uikit/js/core/alert.js rename to media/uikit-v2/js/core/alert.js index 25ea2ad..2881142 100644 --- a/media/uikit/js/core/alert.js +++ b/media/uikit-v2/js/core/alert.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; @@ -6,21 +6,21 @@ UI.component('alert', { defaults: { - "fade": true, - "duration": 200, - "trigger": ".uk-alert-close" + fade: true, + duration: 200, + trigger: '.uk-alert-close' }, boot: function() { // init code - UI.$html.on("click.alert.uikit", "[data-uk-alert]", function(e) { + UI.$html.on('click.alert.uikit', '[data-uk-alert]', function(e) { var ele = UI.$(this); - if (!ele.data("alert")) { + if (!ele.data('alert')) { - var alert = UI.alert(ele, UI.Utils.options(ele.attr("data-uk-alert"))); + var alert = UI.alert(ele, UI.Utils.options(ele.attr('data-uk-alert'))); if (UI.$(e.target).is(alert.options.trigger)) { e.preventDefault(); @@ -34,7 +34,7 @@ var $this = this; - this.on("click", this.options.trigger, function(e) { + this.on('click', this.options.trigger, function(e) { e.preventDefault(); $this.close(); }); @@ -42,19 +42,19 @@ close: function() { - var element = this.trigger("close.uk.alert"), + var element = this.trigger('close.uk.alert'), removeElement = function () { - this.trigger("closed.uk.alert").remove(); + this.trigger('closed.uk.alert').remove(); }.bind(this); if (this.options.fade) { - element.css("overflow", "hidden").css("max-height", element.height()).animate({ - "height" : 0, - "opacity" : 0, - "padding-top" : 0, - "padding-bottom" : 0, - "margin-top" : 0, - "margin-bottom" : 0 + element.css('overflow', 'hidden').css("max-height", element.height()).animate({ + height : 0, + opacity : 0, + paddingTop : 0, + paddingBottom : 0, + marginTop : 0, + marginBottom : 0 }, this.options.duration, removeElement); } else { removeElement(); @@ -63,4 +63,4 @@ }); -})(UIkit); +})(UIkit2); diff --git a/media/uikit/js/core/alert.min.js b/media/uikit-v2/js/core/alert.min.js similarity index 75% rename from media/uikit/js/core/alert.min.js rename to media/uikit-v2/js/core/alert.min.js index 224b4e1..2d37545 100644 --- a/media/uikit/js/core/alert.min.js +++ b/media/uikit-v2/js/core/alert.min.js @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";t.component("alert",{defaults:{fade:!0,duration:200,trigger:".uk-alert-close"},boot:function(){t.$html.on("click.alert.uikit","[data-uk-alert]",function(i){var o=t.$(this);if(!o.data("alert")){var e=t.alert(o,t.Utils.options(o.attr("data-uk-alert")));t.$(i.target).is(e.options.trigger)&&(i.preventDefault(),e.close())}})},init:function(){var t=this;this.on("click",this.options.trigger,function(i){i.preventDefault(),t.close()})},close:function(){var t=this.trigger("close.uk.alert"),i=function(){this.trigger("closed.uk.alert").remove()}.bind(this);this.options.fade?t.css("overflow","hidden").css("max-height",t.height()).animate({height:0,opacity:0,"padding-top":0,"padding-bottom":0,"margin-top":0,"margin-bottom":0},this.options.duration,i):i()}})}(UIkit); \ No newline at end of file +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";t.component("alert",{defaults:{fade:!0,duration:200,trigger:".uk-alert-close"},boot:function(){t.$html.on("click.alert.uikit","[data-uk-alert]",function(i){var o=t.$(this);if(!o.data("alert")){var e=t.alert(o,t.Utils.options(o.attr("data-uk-alert")));t.$(i.target).is(e.options.trigger)&&(i.preventDefault(),e.close())}})},init:function(){var t=this;this.on("click",this.options.trigger,function(i){i.preventDefault(),t.close()})},close:function(){var t=this.trigger("close.uk.alert"),i=function(){this.trigger("closed.uk.alert").remove()}.bind(this);this.options.fade?t.css("overflow","hidden").css("max-height",t.height()).animate({height:0,opacity:0,paddingTop:0,paddingBottom:0,marginTop:0,marginBottom:0},this.options.duration,i):i()}})}(UIkit2); \ No newline at end of file diff --git a/media/uikit/js/core/button.js b/media/uikit-v2/js/core/button.js similarity index 56% rename from media/uikit/js/core/button.js rename to media/uikit-v2/js/core/button.js index 6256e55..aff4984 100644 --- a/media/uikit/js/core/button.js +++ b/media/uikit-v2/js/core/button.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; @@ -6,23 +6,24 @@ UI.component('buttonRadio', { defaults: { - "target": ".uk-button" + activeClass: 'uk-active', + target: '.uk-button' }, boot: function() { // init code - UI.$html.on("click.buttonradio.uikit", "[data-uk-button-radio]", function(e) { + UI.$html.on('click.buttonradio.uikit', '[data-uk-button-radio]', function(e) { var ele = UI.$(this); - if (!ele.data("buttonRadio")) { + if (!ele.data('buttonRadio')) { - var obj = UI.buttonRadio(ele, UI.Utils.options(ele.attr("data-uk-button-radio"))), + var obj = UI.buttonRadio(ele, UI.Utils.options(ele.attr('data-uk-button-radio'))), target = UI.$(e.target); if (target.is(obj.options.target)) { - target.trigger("click"); + target.trigger('click'); } } }); @@ -33,49 +34,50 @@ var $this = this; // Init ARIA - this.find($this.options.target).attr('aria-checked', 'false').filter(".uk-active").attr('aria-checked', 'true'); + this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true'); - this.on("click", this.options.target, function(e) { + this.on('click', this.options.target, function(e) { var ele = UI.$(this); if (ele.is('a[href="#"]')) e.preventDefault(); - $this.find($this.options.target).not(ele).removeClass("uk-active").blur(); - ele.addClass("uk-active"); + $this.find($this.options.target).not(ele).removeClass($this.options.activeClass).blur(); + ele.addClass($this.options.activeClass); // Update ARIA $this.find($this.options.target).not(ele).attr('aria-checked', 'false'); ele.attr('aria-checked', 'true'); - $this.trigger("change.uk.button", [ele]); + $this.trigger('change.uk.button', [ele]); }); }, getSelected: function() { - return this.find(".uk-active"); + return this.find('.' + this.options.activeClass); } }); UI.component('buttonCheckbox', { defaults: { - "target": ".uk-button" + activeClass: 'uk-active', + target: '.uk-button' }, boot: function() { - UI.$html.on("click.buttoncheckbox.uikit", "[data-uk-button-checkbox]", function(e) { + UI.$html.on('click.buttoncheckbox.uikit', '[data-uk-button-checkbox]', function(e) { var ele = UI.$(this); - if (!ele.data("buttonCheckbox")) { + if (!ele.data('buttonCheckbox')) { - var obj = UI.buttonCheckbox(ele, UI.Utils.options(ele.attr("data-uk-button-checkbox"))), + var obj = UI.buttonCheckbox(ele, UI.Utils.options(ele.attr('data-uk-button-checkbox'))), target = UI.$(e.target); if (target.is(obj.options.target)) { - target.trigger("click"); + target.trigger('click'); } } }); @@ -86,25 +88,25 @@ var $this = this; // Init ARIA - this.find($this.options.target).attr('aria-checked', 'false').filter(".uk-active").attr('aria-checked', 'true'); + this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true'); - this.on("click", this.options.target, function(e) { + this.on('click', this.options.target, function(e) { var ele = UI.$(this); if (ele.is('a[href="#"]')) e.preventDefault(); - ele.toggleClass("uk-active").blur(); + ele.toggleClass($this.options.activeClass).blur(); // Update ARIA - ele.attr('aria-checked', ele.hasClass("uk-active")); + ele.attr('aria-checked', ele.hasClass($this.options.activeClass)); - $this.trigger("change.uk.button", [ele]); + $this.trigger('change.uk.button', [ele]); }); }, getSelected: function() { - return this.find(".uk-active"); + return this.find('.' + this.options.activeClass); } }); @@ -115,13 +117,13 @@ boot: function() { - UI.$html.on("click.button.uikit", "[data-uk-button]", function(e) { + UI.$html.on('click.button.uikit', '[data-uk-button]', function(e) { var ele = UI.$(this); - if (!ele.data("button")) { + if (!ele.data('button')) { - var obj = UI.button(ele, UI.Utils.options(ele.attr("data-uk-button"))); - ele.trigger("click"); + var obj = UI.button(ele, UI.Utils.options(ele.attr('data-uk-button'))); + ele.trigger('click'); } }); }, @@ -133,22 +135,22 @@ // Init ARIA this.element.attr('aria-pressed', this.element.hasClass("uk-active")); - this.on("click", function(e) { + this.on('click', function(e) { if ($this.element.is('a[href="#"]')) e.preventDefault(); $this.toggle(); - $this.trigger("change.uk.button", [$this.element.blur().hasClass("uk-active")]); + $this.trigger('change.uk.button', [$this.element.blur().hasClass('uk-active')]); }); }, toggle: function() { - this.element.toggleClass("uk-active"); + this.element.toggleClass('uk-active'); // Update ARIA - this.element.attr('aria-pressed', this.element.hasClass("uk-active")); + this.element.attr('aria-pressed', this.element.hasClass('uk-active')); } }); -})(UIkit); +})(UIkit2); diff --git a/media/uikit-v2/js/core/button.min.js b/media/uikit-v2/js/core/button.min.js new file mode 100644 index 0000000..81c7437 --- /dev/null +++ b/media/uikit-v2/js/core/button.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";t.component("buttonRadio",{defaults:{activeClass:"uk-active",target:".uk-button"},boot:function(){t.$html.on("click.buttonradio.uikit","[data-uk-button-radio]",function(i){var a=t.$(this);if(!a.data("buttonRadio")){var e=t.buttonRadio(a,t.Utils.options(a.attr("data-uk-button-radio"))),o=t.$(i.target);o.is(e.options.target)&&o.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter("."+i.options.activeClass).attr("aria-checked","true"),this.on("click",this.options.target,function(a){var e=t.$(this);e.is('a[href="#"]')&&a.preventDefault(),i.find(i.options.target).not(e).removeClass(i.options.activeClass).blur(),e.addClass(i.options.activeClass),i.find(i.options.target).not(e).attr("aria-checked","false"),e.attr("aria-checked","true"),i.trigger("change.uk.button",[e])})},getSelected:function(){return this.find("."+this.options.activeClass)}}),t.component("buttonCheckbox",{defaults:{activeClass:"uk-active",target:".uk-button"},boot:function(){t.$html.on("click.buttoncheckbox.uikit","[data-uk-button-checkbox]",function(i){var a=t.$(this);if(!a.data("buttonCheckbox")){var e=t.buttonCheckbox(a,t.Utils.options(a.attr("data-uk-button-checkbox"))),o=t.$(i.target);o.is(e.options.target)&&o.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter("."+i.options.activeClass).attr("aria-checked","true"),this.on("click",this.options.target,function(a){var e=t.$(this);e.is('a[href="#"]')&&a.preventDefault(),e.toggleClass(i.options.activeClass).blur(),e.attr("aria-checked",e.hasClass(i.options.activeClass)),i.trigger("change.uk.button",[e])})},getSelected:function(){return this.find("."+this.options.activeClass)}}),t.component("button",{defaults:{},boot:function(){t.$html.on("click.button.uikit","[data-uk-button]",function(){var i=t.$(this);if(!i.data("button")){{t.button(i,t.Utils.options(i.attr("data-uk-button")))}i.trigger("click")}})},init:function(){var t=this;this.element.attr("aria-pressed",this.element.hasClass("uk-active")),this.on("click",function(i){t.element.is('a[href="#"]')&&i.preventDefault(),t.toggle(),t.trigger("change.uk.button",[t.element.blur().hasClass("uk-active")])})},toggle:function(){this.element.toggleClass("uk-active"),this.element.attr("aria-pressed",this.element.hasClass("uk-active"))}})}(UIkit2); \ No newline at end of file diff --git a/media/uikit/js/core/core.js b/media/uikit-v2/js/core/core.js similarity index 63% rename from media/uikit/js/core/core.js rename to media/uikit-v2/js/core/core.js index 096ff49..7f32013 100644 --- a/media/uikit/js/core/core.js +++ b/media/uikit-v2/js/core/core.js @@ -1,18 +1,24 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(core) { - if (typeof define == "function" && define.amd) { // AMD + var uikit; - define("uikit", function(){ + if (!window.jQuery) { + throw new Error('UIkit 2.x requires jQuery'); + } else { + uikit = core(window.jQuery); + } - var uikit = window.UIkit || core(window, window.jQuery, window.document); + if (typeof define == 'function' && define.amd) { // AMD + + define('uikit', function(){ uikit.load = function(res, req, onload, config) { - var resources = res.split(','), load = [], i, base = (config.config && config.config.uikit && config.config.uikit.base ? config.config.uikit.base : "").replace(/\/+$/g, ""); + var resources = res.split(','), load = [], i, base = (config.config && config.config.uikit && config.config.uikit.base ? config.config.uikit.base : '').replace(/\/+$/g, ''); if (!base) { - throw new Error( "Please define base path to UIkit in the requirejs config." ); + throw new Error('Please define base path to UIkit in the requirejs config.'); } for (i = 0; i < resources.length; i += 1) { @@ -29,27 +35,22 @@ }); } - if (!window.jQuery) { - throw new Error( "UIkit requires jQuery" ); - } - - if (window && window.jQuery) { - core(window, window.jQuery, window.document); - } - - -})(function(global, $, doc) { +})(function($) { "use strict"; - var UI = {}, _UI = global.UIkit ? Object.create(global.UIkit) : undefined; + if (window.UIkit2) { + return window.UIkit2; + } - UI.version = '2.21.0'; + var UI = {}, _UI = window.UIkit || undefined; + + UI.version = '2.27.4'; UI.noConflict = function() { // restore UIkit version if (_UI) { - global.UIkit = _UI; + window.UIkit = _UI; $.UIkit = _UI; $.fn.uk = _UI.fn; } @@ -57,9 +58,11 @@ return UI; }; - UI.prefix = function(str) { - return str; - }; + window.UIkit2 = UI; + + if (!_UI) { + window.UIkit = UI; + } // cache jQuery UI.$ = $; @@ -73,7 +76,7 @@ var transitionEnd = (function() { - var element = doc.body || doc.documentElement, + var element = document.body || document.documentElement, transEndEventNames = { WebkitTransition : 'webkitTransitionEnd', MozTransition : 'transitionend', @@ -93,7 +96,7 @@ var animationEnd = (function() { - var element = doc.body || doc.documentElement, + var element = document.body || document.documentElement, animEndEventNames = { WebkitAnimation : 'webkitAnimationEnd', MozAnimation : 'animationend', @@ -110,42 +113,45 @@ })(); // requestAnimationFrame polyfill - // https://gist.github.com/paulirish/1579671 - (function(){ + //https://github.com/darius/requestAnimationFrame + (function() { - var lastTime = 0; + Date.now = Date.now || function() { return new Date().getTime(); }; - global.requestAnimationFrame = global.requestAnimationFrame || global.webkitRequestAnimationFrame || function(callback, element) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = global.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - - if (!global.cancelAnimationFrame) { - - global.cancelAnimationFrame = function(id) { - clearTimeout(id); - }; + var vendors = ['webkit', 'moz']; + for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { + var vp = vendors[i]; + window.requestAnimationFrame = window[vp+'RequestAnimationFrame']; + window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame'] + || window[vp+'CancelRequestAnimationFrame']); } - - })(); + if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) // iOS6 is buggy + || !window.requestAnimationFrame || !window.cancelAnimationFrame) { + var lastTime = 0; + window.requestAnimationFrame = function(callback) { + var now = Date.now(); + var nextTime = Math.max(lastTime + 16, now); + return setTimeout(function() { callback(lastTime = nextTime); }, + nextTime - now); + }; + window.cancelAnimationFrame = clearTimeout; + } + }()); UI.support.touch = ( ('ontouchstart' in document) || - (global.DocumentTouch && document instanceof global.DocumentTouch) || - (global.navigator.msPointerEnabled && global.navigator.msMaxTouchPoints > 0) || //IE 10 - (global.navigator.pointerEnabled && global.navigator.maxTouchPoints > 0) || //IE >=11 + (window.DocumentTouch && document instanceof window.DocumentTouch) || + (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 0) || //IE 10 + (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 0) || //IE >=11 false ); - UI.support.mutationobserver = (global.MutationObserver || global.WebKitMutationObserver || null); + UI.support.mutationobserver = (window.MutationObserver || window.WebKitMutationObserver || null); UI.Utils = {}; UI.Utils.isFullscreen = function() { - return document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || document.fullscreenElement || false; + return document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || document.fullscreenElement || false; }; UI.Utils.str2json = function(str, notevil) { @@ -158,7 +164,7 @@ .replace(/'([^']+)'/g, function(_, $1){return '"'+$1+'"';}) ); } else { - return (new Function("", "var json = " + str + "; return JSON.parse(JSON.stringify(json));"))(); + return (new Function('', 'var json = ' + str + '; return JSON.parse(JSON.stringify(json));'))(); } } catch(e) { return false; } }; @@ -178,6 +184,19 @@ }; }; + UI.Utils.throttle = function (func, limit) { + var wait = false; + return function () { + if (!wait) { + func.call(); + wait = true; + setTimeout(function () { + wait = false; + }, limit); + } + } + }; + UI.Utils.removeCssRules = function(selectorRegEx) { var idx, idxs, stylesheet, _i, _j, _k, _len, _len1, _len2, _ref; @@ -244,7 +263,7 @@ var ele = UI.$(this), cls = ele.attr('class'), - anim = cls.match(/uk\-animation\-(.+)/); + anim = cls.match(/uk-animation-(.+)/); ele.removeClass(anim[0]).width(); @@ -257,7 +276,11 @@ UI.Utils.options = function(string) { - if ($.isPlainObject(string)) return string; + if ($.type(string)!='string') return string; + + if (string.indexOf(':') != -1 && string.trim().substr(-1) != '}') { + string = '{'+string+'}'; + } var start = (string ? string.indexOf("{") : -1), options = {}; @@ -275,12 +298,11 @@ var d = $.Deferred(); element = UI.$(element); - cls = cls; element.css('display', 'none').addClass(cls).one(UI.support.animation.end, function() { element.removeClass(cls); d.resolve(); - }).width(); + }); element.css('display', ''); @@ -308,30 +330,30 @@ switch(cmd) { case '~': - output.push("for(var $i=0;$i<"+prop+".length;$i++) { var $item = "+prop+"[$i];"); + output.push('for(var $i=0;$i<'+prop+'.length;$i++) { var $item = '+prop+'[$i];'); openblocks++; break; case ':': - output.push("for(var $key in "+prop+") { var $val = "+prop+"[$key];"); + output.push('for(var $key in '+prop+') { var $val = '+prop+'[$key];'); openblocks++; break; case '#': - output.push("if("+prop+") {"); + output.push('if('+prop+') {'); openblocks++; break; case '^': - output.push("if(!"+prop+") {"); + output.push('if(!'+prop+') {'); openblocks++; break; case '/': - output.push("}"); + output.push('}'); openblocks--; break; case '!': - output.push("__ret.push("+prop+");"); + output.push('__ret.push('+prop+');'); break; default: - output.push("__ret.push(escape("+prop+"));"); + output.push('__ret.push(escape('+prop+'));'); break; } } else { @@ -352,11 +374,43 @@ return data ? fn(data) : fn; }; + UI.Utils.focus = function(element, extra) { + + element = $(element); + + if (!element.length) { + return element; + } + + var autofocus = element.find('[autofocus]:first'), tabidx; + + if (autofocus.length) { + return autofocus.focus(); + } + + autofocus = element.find(':input'+(extra && (','+extra) || '')).first(); + + if (autofocus.length) { + return autofocus.focus(); + } + + if (!element.attr('tabindex')) { + tabidx = 1000; + element.attr('tabindex', tabidx); + } + + element[0].focus(); + + if (tabidx) { + element.attr('tabindex', ''); + } + + return element; + } + UI.Utils.events = {}; UI.Utils.events.click = UI.support.touch ? 'tap' : 'click'; - global.UIkit = UI; - // deprecated UI.fn = function(command, options) { @@ -364,7 +418,7 @@ var args = arguments, cmd = command.match(/^([a-z\-]+)(?:\.([a-z]+))?/i), component = cmd[1], method = cmd[2]; if (!UI[component]) { - $.error("UIkit component [" + component + "] does not exist."); + $.error('UIkit component [' + component + '] does not exist.'); return this; } @@ -382,7 +436,11 @@ UI.components = {}; - UI.component = function(name, def) { + UI.component = function(name, def, override) { + + if (UI.components[name] && !override) { + return UI.components[name]; + } var fn = function(element, options) { @@ -482,7 +540,7 @@ switch(arguments.length) { case 1: - if (typeof arguments[0] === "string" || arguments[0].nodeType || arguments[0] instanceof jQuery) { + if (typeof arguments[0] === 'string' || arguments[0].nodeType || arguments[0] instanceof jQuery) { element = $(arguments[0]); } else { options = arguments[0]; @@ -586,9 +644,9 @@ try { var observer = new UI.support.mutationobserver(UI.Utils.debounce(function(mutations) { - fn.apply(element, []); + fn.apply(element, [$element]); $element.trigger('changed.uk.dom'); - }, 50)); + }, 50), {childList: true, subtree: true}); // pass in the target node, as well as the observer options observer.observe(element, { childList: true, subtree: true }); @@ -615,100 +673,145 @@ if (UI.domready) UI.Utils.checkDisplay(); }); - $(function(){ + document.addEventListener('DOMContentLoaded', function(){ - UI.$body = UI.$('body'); + var domReady = function() { - UI.ready(function(context){ - UI.domObserve('[data-uk-observe]'); - }); + UI.$body = UI.$('body'); - UI.on('changed.uk.dom', function(e) { - UI.init(e.target); - UI.Utils.checkDisplay(e.target); - }); + UI.trigger('beforeready.uk.dom'); - UI.trigger('beforeready.uk.dom'); + UI.component.bootComponents(); - UI.component.bootComponents(); + // custom scroll observer + var rafToken = requestAnimationFrame((function(){ - // custom scroll observer - setInterval((function(){ + var memory = {dir: {x:0, y:0}, x: window.pageXOffset, y:window.pageYOffset}; - var memory = {x: window.pageXOffset, y:window.pageYOffset}, dir; + var fn = function(){ + // reading this (window.page[X|Y]Offset) causes a full page recalc of the layout in Chrome, + // so we only want to do this once + var wpxo = window.pageXOffset; + var wpyo = window.pageYOffset; - var fn = function(){ + // Did the scroll position change since the last time we were here? + if (memory.x != wpxo || memory.y != wpyo) { - if (memory.x != window.pageXOffset || memory.y != window.pageYOffset) { + // Set the direction of the scroll and store the new position + if (wpxo != memory.x) {memory.dir.x = wpxo > memory.x ? 1:-1; } else { memory.dir.x = 0; } + if (wpyo != memory.y) {memory.dir.y = wpyo > memory.y ? 1:-1; } else { memory.dir.y = 0; } - dir = {x: 0 , y: 0}; + memory.x = wpxo; + memory.y = wpyo; - if (window.pageXOffset != memory.x) dir.x = window.pageXOffset > memory.x ? 1:-1; - if (window.pageYOffset != memory.y) dir.y = window.pageYOffset > memory.y ? 1:-1; + // Trigger the scroll event, this could probably be sent using memory.clone() but this is + // more explicit and easier to see exactly what is being sent in the event. + UI.$doc.trigger('scrolling.uk.document', [{ + dir: {x: memory.dir.x, y: memory.dir.y}, x: wpxo, y: wpyo + }]); + } - memory = { - "dir": dir, "x": window.pageXOffset, "y": window.pageYOffset - }; + cancelAnimationFrame(rafToken); + rafToken = requestAnimationFrame(fn); + }; - UI.$doc.trigger('scrolling.uk.document', [memory]); + if (UI.support.touch) { + UI.$html.on('touchmove touchend MSPointerMove MSPointerUp pointermove pointerup', fn); } - }; + + if (memory.x || memory.y) fn(); + + return fn; + + })()); + + // run component init functions on dom + UI.trigger('domready.uk.dom'); if (UI.support.touch) { - UI.$html.on('touchmove touchend MSPointerMove MSPointerUp pointermove pointerup', fn); + + // remove css hover rules for touch devices + // UI.Utils.removeCssRules(/\.uk-(?!navbar).*:hover/); + + // viewport unit fix for uk-height-viewport - should be fixed in iOS 8 + if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) { + + UI.$win.on('load orientationchange resize', UI.Utils.debounce((function(){ + + var fn = function() { + $('.uk-height-viewport').css('height', window.innerHeight); + return fn; + }; + + return fn(); + + })(), 100)); + } } - if (memory.x || memory.y) fn(); + UI.trigger('afterready.uk.dom'); - return fn; + // mark that domready is left behind + UI.domready = true; - })(), 15); + // auto init js components + if (UI.support.mutationobserver) { - // run component init functions on dom - UI.trigger('domready.uk.dom'); + var initFn = UI.Utils.debounce(function(){ + requestAnimationFrame(function(){ UI.init(document.body);}); + }, 10); - if (UI.support.touch) { + (new UI.support.mutationobserver(function(mutations) { - // remove css hover rules for touch devices - // UI.Utils.removeCssRules(/\.uk-(?!navbar).*:hover/); + var init = false; - // viewport unit fix for uk-height-viewport - should be fixed in iOS 8 - if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) { + mutations.every(function(mutation){ - UI.$win.on('load orientationchange resize', UI.Utils.debounce((function(){ + if (mutation.type != 'childList') return true; - var fn = function() { - $('.uk-height-viewport').css('height', window.innerHeight); - return fn; - }; + for (var i = 0, node; i < mutation.addedNodes.length; ++i) { - return fn(); + node = mutation.addedNodes[i]; - })(), 100)); + if (node.outerHTML && node.outerHTML.indexOf('data-uk-') !== -1) { + return (init = true) && false; + } + } + return true; + }); + + if (init) initFn(); + + })).observe(document.body, {childList: true, subtree: true}); } + }; + + if (document.readyState == 'complete' || document.readyState == 'interactive') { + setTimeout(domReady); } - UI.trigger('afterready.uk.dom'); + return domReady; - // mark that domready is left behind - UI.domready = true; - }); + }()); // add touch identifier class - UI.$html.addClass(UI.support.touch ? "uk-touch" : "uk-notouch"); + UI.$html.addClass(UI.support.touch ? 'uk-touch' : 'uk-notouch'); // add uk-hover class on tap to support overlays on touch devices if (UI.support.touch) { - var hoverset = false, exclude, hovercls = 'uk-hover', selector = '.uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover'; + var hoverset = false, + exclude, + hovercls = 'uk-hover', + selector = '.uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover'; - UI.$html.on('touchstart MSPointerDown pointerdown', selector, function() { + UI.$html.on('mouseenter touchstart MSPointerDown pointerdown', selector, function() { if (hoverset) $('.'+hovercls).removeClass(hovercls); hoverset = $(this).addClass(hovercls); - }).on('touchend MSPointerUp pointerup', function(e) { + }).on('mouseleave touchend MSPointerUp pointerup', function(e) { exclude = $(e.target).parents(selector); diff --git a/media/uikit-v2/js/core/core.min.js b/media/uikit-v2/js/core/core.min.js new file mode 100644 index 0000000..b837922 --- /dev/null +++ b/media/uikit-v2/js/core/core.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var n;if(!window.jQuery)throw new Error("UIkit 2.x requires jQuery");n=t(window.jQuery),"function"==typeof define&&define.amd&&define("uikit",function(){return n.load=function(t,e,o,i){var r,a=t.split(","),s=[],u=(i.config&&i.config.uikit&&i.config.uikit.base?i.config.uikit.base:"").replace(/\/+$/g,"");if(!u)throw new Error("Please define base path to UIkit in the requirejs config.");for(r=0;r0||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>0||!1,n.support.mutationobserver=window.MutationObserver||window.WebKitMutationObserver||null,n.Utils={},n.Utils.isFullscreen=function(){return document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.fullscreenElement||!1},n.Utils.str2json=function(t,n){try{return n?JSON.parse(t.replace(/([\$\w]+)\s*:/g,function(t,n){return'"'+n+'":'}).replace(/'([^']+)'/g,function(t,n){return'"'+n+'"'})):new Function("","var json = "+t+"; return JSON.parse(JSON.stringify(json));")()}catch(e){return!1}},n.Utils.debounce=function(t,n,e){var o;return function(){var i=this,r=arguments,a=function(){o=null,e||t.apply(i,r)},s=e&&!o;clearTimeout(o),o=setTimeout(a,n),s&&t.apply(i,r)}},n.Utils.throttle=function(t,n){var e=!1;return function(){e||(t.call(),e=!0,setTimeout(function(){e=!1},n))}},n.Utils.removeCssRules=function(t){var n,e,o,i,r,a,s,u,c,d;t&&setTimeout(function(){try{for(d=document.styleSheets,i=0,s=d.length;s>i;i++){for(o=d[i],e=[],o.cssRules=o.cssRules,n=r=0,u=o.cssRules.length;u>r;n=++r)o.cssRules[n].type===CSSRule.STYLE_RULE&&t.test(o.cssRules[n].selectorText)&&e.unshift(n);for(a=0,c=e.length;c>a;a++)o.deleteRule(e[a])}}catch(l){}},0)},n.Utils.isInView=function(e,o){var i=t(e);if(!i.is(":visible"))return!1;var r=n.$win.scrollLeft(),a=n.$win.scrollTop(),s=i.offset(),u=s.left,c=s.top;return o=t.extend({topoffset:0,leftoffset:0},o),c+i.height()>=a&&c-o.topoffset<=a+n.$win.height()&&u+i.width()>=r&&u-o.leftoffset<=r+n.$win.width()?!0:!1},n.Utils.checkDisplay=function(e,o){var i=n.$("[data-uk-margin], [data-uk-grid-match], [data-uk-grid-margin], [data-uk-check-display]",e||document);return e&&!i.length&&(i=t(e)),i.trigger("display.uk.check"),o&&("string"!=typeof o&&(o='[class*="uk-animation-"]'),i.find(o).each(function(){var t=n.$(this),e=t.attr("class"),o=e.match(/uk-animation-(.+)/);t.removeClass(o[0]).width(),t.addClass(o[0])})),i},n.Utils.options=function(e){if("string"!=t.type(e))return e;-1!=e.indexOf(":")&&"}"!=e.trim().substr(-1)&&(e="{"+e+"}");var o=e?e.indexOf("{"):-1,i={};if(-1!=o)try{i=n.Utils.str2json(e.substr(o))}catch(r){}return i},n.Utils.animate=function(e,o){var i=t.Deferred();return e=n.$(e),e.css("display","none").addClass(o).one(n.support.animation.end,function(){e.removeClass(o),i.resolve()}),e.css("display",""),i.promise()},n.Utils.uid=function(t){return(t||"id")+(new Date).getTime()+"RAND"+Math.ceil(1e5*Math.random())},n.Utils.template=function(t,n){for(var e,o,i,r,a=t.replace(/\n/g,"\\n").replace(/\{\{\{\s*(.+?)\s*\}\}\}/g,"{{!$1}}").split(/(\{\{\s*(.+?)\s*\}\})/g),s=0,u=[],c=0;s/g, '>');}"].join("\n")),n?r(n):r},n.Utils.focus=function(n,e){if(n=t(n),!n.length)return n;var o,i=n.find("[autofocus]:first");return i.length?i.focus():(i=n.find(":input"+(e&&","+e||"")).first(),i.length?i.focus():(n.attr("tabindex")||(o=1e3,n.attr("tabindex",o)),n[0].focus(),o&&n.attr("tabindex",""),n))},n.Utils.events={},n.Utils.events.click=n.support.touch?"tap":"click",n.fn=function(e,o){var i=arguments,r=e.match(/^([a-z\-]+)(?:\.([a-z]+))?/i),a=r[1],s=r[2];return n[a]?this.each(function(){var e=t(this),r=e.data(a);r||e.data(a,r=n[a](this,s?void 0:o)),s&&r[s].apply(r,Array.prototype.slice.call(i,1))}):(t.error("UIkit component ["+a+"] does not exist."),this)},t.UIkit=n,t.fn.uk=n.fn,n.langdirection="rtl"==n.$html.attr("dir")?"right":"left",n.components={},n.component=function(e,o,i){if(n.components[e]&&!i)return n.components[e];var r=function(o,i){var a=this;return this.UIkit=n,this.element=o?n.$(o):null,this.options=t.extend(!0,{},this.defaults,i),this.plugins={},this.element&&this.element.data(e,this),this.init(),(this.options.plugins.length?this.options.plugins:Object.keys(r.plugins)).forEach(function(t){r.plugins[t].init&&(r.plugins[t].init(a),a.plugins[t]=!0)}),this.trigger("init.uk.component",[e,this]),this};return r.plugins={},t.extend(!0,r.prototype,{defaults:{plugins:[]},boot:function(){},init:function(){},on:function(t,e,o){return n.$(this.element||this).on(t,e,o)},one:function(t,e,o){return n.$(this.element||this).one(t,e,o)},off:function(t){return n.$(this.element||this).off(t)},trigger:function(t,e){return n.$(this.element||this).trigger(t,e)},find:function(t){return n.$(this.element?this.element:[]).find(t)},proxy:function(t,n){var e=this;n.split(" ").forEach(function(n){e[n]||(e[n]=function(){return t[n].apply(t,arguments)})})},mixin:function(t,n){var e=this;n.split(" ").forEach(function(n){e[n]||(e[n]=t[n].bind(e))})},option:function(){return 1==arguments.length?this.options[arguments[0]]||void 0:(2==arguments.length&&(this.options[arguments[0]]=arguments[1]),void 0)}},o),this.components[e]=r,this[e]=function(){var o,i;if(arguments.length)switch(arguments.length){case 1:"string"==typeof arguments[0]||arguments[0].nodeType||arguments[0]instanceof jQuery?o=t(arguments[0]):i=arguments[0];break;case 2:o=t(arguments[0]),i=arguments[1]}return o&&o.data(e)?o.data(e):new n.components[e](o,i)},n.domready&&n.component.boot(e),r},n.plugin=function(t,n,e){this.components[t].plugins[n]=e},n.component.boot=function(t){n.components[t].prototype&&n.components[t].prototype.boot&&!n.components[t].booted&&(n.components[t].prototype.boot.apply(n,[]),n.components[t].booted=!0)},n.component.bootComponents=function(){for(var t in n.components)n.component.boot(t)},n.domObservers=[],n.domready=!1,n.ready=function(t){n.domObservers.push(t),n.domready&&t(document)},n.on=function(t,e,o){return t&&t.indexOf("ready.uk.dom")>-1&&n.domready&&e.apply(n.$doc),n.$doc.on(t,e,o)},n.one=function(t,e,o){return t&&t.indexOf("ready.uk.dom")>-1&&n.domready?(e.apply(n.$doc),n.$doc):n.$doc.one(t,e,o)},n.trigger=function(t,e){return n.$doc.trigger(t,e)},n.domObserve=function(t,e){n.support.mutationobserver&&(e=e||function(){},n.$(t).each(function(){var t=this,o=n.$(t);if(!o.data("observer"))try{var i=new n.support.mutationobserver(n.Utils.debounce(function(){e.apply(t,[o]),o.trigger("changed.uk.dom")},50),{childList:!0,subtree:!0});i.observe(t,{childList:!0,subtree:!0}),o.data("observer",i)}catch(r){}}))},n.init=function(t){t=t||document,n.domObservers.forEach(function(n){n(t)})},n.on("domready.uk.dom",function(){n.init(),n.domready&&n.Utils.checkDisplay()}),document.addEventListener("DOMContentLoaded",function(){var e=function(){n.$body=n.$("body"),n.trigger("beforeready.uk.dom"),n.component.bootComponents();var e=requestAnimationFrame(function(){var t={dir:{x:0,y:0},x:window.pageXOffset,y:window.pageYOffset},o=function(){var i=window.pageXOffset,r=window.pageYOffset;(t.x!=i||t.y!=r)&&(t.dir.x=i!=t.x?i>t.x?1:-1:0,t.dir.y=r!=t.y?r>t.y?1:-1:0,t.x=i,t.y=r,n.$doc.trigger("scrolling.uk.document",[{dir:{x:t.dir.x,y:t.dir.y},x:i,y:r}])),cancelAnimationFrame(e),e=requestAnimationFrame(o)};return n.support.touch&&n.$html.on("touchmove touchend MSPointerMove MSPointerUp pointermove pointerup",o),(t.x||t.y)&&o(),o}());if(n.trigger("domready.uk.dom"),n.support.touch&&navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&n.$win.on("load orientationchange resize",n.Utils.debounce(function(){var n=function(){return t(".uk-height-viewport").css("height",window.innerHeight),n};return n()}(),100)),n.trigger("afterready.uk.dom"),n.domready=!0,n.support.mutationobserver){var o=n.Utils.debounce(function(){requestAnimationFrame(function(){n.init(document.body)})},10);new n.support.mutationobserver(function(t){var n=!1;t.every(function(t){if("childList"!=t.type)return!0;for(var e,o=0;o -1 ? '&':'?'), 'enablejsapi=1&api=1'].join('')); } }, check: function() { - this.element.css({ - 'width' : '', - 'height' : '' - }); + this.element.css({ width : '', height : '' }); this.dimension = {w: this.element.width(), h: this.element.height()}; @@ -68,7 +63,7 @@ this.dimension.h = this.element.attr('height'); } - this.ratio = this.dimension.w / this.dimension.h; + this.ratio = this.dimension.w / this.dimension.h; var w = this.parent.width(), h = this.parent.height(), width, height; @@ -85,11 +80,8 @@ height = Math.ceil(w / this.ratio); } - this.element.css({ - 'width' : width, - 'height' : height - }); + this.element.css({ width : width, height : height }); } }); -})(UIkit); +})(UIkit2); diff --git a/media/uikit/js/core/cover.min.js b/media/uikit-v2/js/core/cover.min.js similarity index 92% rename from media/uikit/js/core/cover.min.js rename to media/uikit-v2/js/core/cover.min.js index 70bdffd..4d1e375 100644 --- a/media/uikit/js/core/cover.min.js +++ b/media/uikit-v2/js/core/cover.min.js @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";t.component("cover",{defaults:{automute:!0},boot:function(){t.ready(function(i){t.$("[data-uk-cover]",i).each(function(){var i=t.$(this);if(!i.data("cover")){t.cover(i,t.Utils.options(i.attr("data-uk-cover")))}})})},init:function(){if(this.parent=this.element.parent(),t.$win.on("load resize orientationchange",t.Utils.debounce(function(){this.check()}.bind(this),100)),this.on("display.uk.check",function(){this.element.is(":visible")&&this.check()}.bind(this)),this.check(),this.element.is("iframe")&&this.options.automute){var i=this.element.attr("src");this.element.attr("src","").on("load",function(){this.contentWindow.postMessage('{ "event": "command", "func": "mute", "method":"setVolume", "value":0}',"*")}).attr("src",[i,i.indexOf("?")>-1?"&":"?","enablejsapi=1&api=1"].join(""))}},check:function(){this.element.css({width:"",height:""}),this.dimension={w:this.element.width(),h:this.element.height()},this.element.attr("width")&&!isNaN(this.element.attr("width"))&&(this.dimension.w=this.element.attr("width")),this.element.attr("height")&&!isNaN(this.element.attr("height"))&&(this.dimension.h=this.element.attr("height")),this.ratio=this.dimension.w/this.dimension.h;var t,i,e=this.parent.width(),n=this.parent.height();e/this.ratio-1?"&":"?","enablejsapi=1&api=1"].join(""))}},check:function(){this.element.css({width:"",height:""}),this.dimension={w:this.element.width(),h:this.element.height()},this.element.attr("width")&&!isNaN(this.element.attr("width"))&&(this.dimension.w=this.element.attr("width")),this.element.attr("height")&&!isNaN(this.element.attr("height"))&&(this.dimension.h=this.element.attr("height")),this.ratio=this.dimension.w/this.dimension.h;var t,i,e=this.parent.width(),n=this.parent.height();e/this.ratio boundarywidth) { + dropdown.addClass('uk-dropdown-stack'); + this.trigger('stack.uk.dropdown', [this]); + } + + dropdown.css(css).css('display', '').addClass('uk-dropdown-'+pp[0]); + }, + + checkBoundary: function(left, top, width, height, boundarywidth) { + + var axis = ""; + + if (left < 0 || ((left - UI.$win.scrollLeft())+width) > boundarywidth) { + axis += "x"; + } + + if ((top - UI.$win.scrollTop()) < 0 || ((top - UI.$win.scrollTop())+height) > window.innerHeight) { + axis += "y"; + } + + return axis; + } + }); + + + UI.component('dropdownOverlay', { + + defaults: { + justify : false, + cls : '', + duration: 200 + }, + + boot: function() { + + // init code + UI.ready(function(context) { + + UI.$('[data-uk-dropdown-overlay]', context).each(function() { + var ele = UI.$(this); + + if (!ele.data('dropdownOverlay')) { + UI.dropdownOverlay(ele, UI.Utils.options(ele.attr('data-uk-dropdown-overlay'))); + } + }); + }); + }, + + init: function() { + + var $this = this; + + this.justified = this.options.justify ? UI.$(this.options.justify) : false; + this.overlay = this.element.find('uk-dropdown-overlay'); + + if (!this.overlay.length) { + this.overlay = UI.$('
        ').appendTo(this.element); + } + + this.overlay.addClass(this.options.cls); + + this.on({ + + 'beforeshow.uk.dropdown': function(e, dropdown) { + $this.dropdown = dropdown; + + if ($this.justified && $this.justified.length) { + justify($this.overlay.css({display:'block', marginLeft:'', marginRight:''}), $this.justified, $this.justified.outerWidth()); + } + }, + + 'show.uk.dropdown': function(e, dropdown) { + + var h = $this.dropdown.dropdown.outerHeight(true); + + $this.dropdown.element.removeClass('uk-open'); + + $this.overlay.stop().css('display', 'block').animate({height: h}, $this.options.duration, function() { + + $this.dropdown.dropdown.css('visibility', ''); + $this.dropdown.element.addClass('uk-open'); + + UI.Utils.checkDisplay($this.dropdown.dropdown, true); + }); + + $this.pointerleave = false; + }, + + 'hide.uk.dropdown': function() { + $this.overlay.stop().animate({height: 0}, $this.options.duration); + }, + + 'pointerenter.uk.dropdown': function(e, dropdown) { + clearTimeout($this.remainIdle); + }, + + 'pointerleave.uk.dropdown': function(e, dropdown) { + $this.pointerleave = true; + } + }); + + + this.overlay.on({ + + 'mouseenter': function() { + if ($this.remainIdle) { + clearTimeout($this.dropdown.remainIdle); + clearTimeout($this.remainIdle); + } + }, + + 'mouseleave': function(){ + + if ($this.pointerleave && active) { + + $this.remainIdle = setTimeout(function() { + if(active) active.hide(); + }, active.options.remaintime); + } + } + }) + } + + }); + + + function justify(ele, justifyTo, boundarywidth, offset) { + + ele = UI.$(ele); + justifyTo = UI.$(justifyTo); + boundarywidth = boundarywidth || window.innerWidth; + offset = offset || ele.offset(); + + if (justifyTo.length) { + + var jwidth = justifyTo.outerWidth(); + + ele.css('min-width', jwidth); + + if (UI.langdirection == 'right') { + + var right1 = boundarywidth - (justifyTo.offset().left + jwidth), + right2 = boundarywidth - (ele.offset().left + ele.outerWidth()); + + ele.css('margin-right', right1 - right2); + + } else { + ele.css('margin-left', justifyTo.offset().left - offset.left); + } + } + } + +})(UIkit2); diff --git a/media/uikit-v2/js/core/dropdown.min.js b/media/uikit-v2/js/core/dropdown.min.js new file mode 100644 index 0000000..399ae03 --- /dev/null +++ b/media/uikit-v2/js/core/dropdown.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";function o(o,e,i,n){if(o=t.$(o),e=t.$(e),i=i||window.innerWidth,n=n||o.offset(),e.length){var r=e.outerWidth();if(o.css("min-width",r),"right"==t.langdirection){var s=i-(e.offset().left+r),d=i-(o.offset().left+o.outerWidth());o.css("margin-right",s-d)}else o.css("margin-left",e.offset().left-n.left)}}var e,i=!1,n={x:{"bottom-left":"bottom-right","bottom-right":"bottom-left","bottom-center":"bottom-center","top-left":"top-right","top-right":"top-left","top-center":"top-center","left-top":"right-top","left-bottom":"right-bottom","left-center":"right-center","right-top":"left-top","right-bottom":"left-bottom","right-center":"left-center"},y:{"bottom-left":"top-left","bottom-right":"top-right","bottom-center":"top-center","top-left":"bottom-left","top-right":"bottom-right","top-center":"bottom-center","left-top":"left-bottom","left-bottom":"left-top","left-center":"left-center","right-top":"right-bottom","right-bottom":"right-top","right-center":"right-center"},xy:{"bottom-left":"top-right","bottom-right":"top-left","bottom-center":"top-center","top-left":"bottom-right","top-right":"bottom-left","top-center":"bottom-center","left-top":"right-bottom","left-bottom":"right-top","left-center":"right-center","right-top":"left-bottom","right-bottom":"left-top","right-center":"left-center"}};t.component("dropdown",{defaults:{mode:"hover",pos:"bottom-left",offset:0,remaintime:800,justify:!1,boundary:t.$win,delay:0,dropdownSelector:".uk-dropdown,.uk-dropdown-blank",hoverDelayIdle:250,preventflip:!1},remainIdle:!1,boot:function(){var o=t.support.touch?"click":"mouseenter";t.$html.on(o+".dropdown.uikit focus pointerdown","[data-uk-dropdown]",function(e){var i=t.$(this);if(!i.data("dropdown")){var n=t.dropdown(i,t.Utils.options(i.attr("data-uk-dropdown")));("click"==e.type||"mouseenter"==e.type&&"hover"==n.options.mode)&&n.element.trigger(o),n.dropdown.length&&e.preventDefault()}})},init:function(){var o=this;this.dropdown=this.find(this.options.dropdownSelector),this.offsetParent=this.dropdown.parents().filter(function(){return-1!==t.$.inArray(t.$(this).css("position"),["relative","fixed","absolute"])}).slice(0,1),this.offsetParent.length||(this.offsetParent=this.element),this.centered=this.dropdown.hasClass("uk-dropdown-center"),this.justified=this.options.justify?t.$(this.options.justify):!1,this.boundary=t.$(this.options.boundary),this.boundary.length||(this.boundary=t.$win),this.dropdown.hasClass("uk-dropdown-up")&&(this.options.pos="top-left"),this.dropdown.hasClass("uk-dropdown-flip")&&(this.options.pos=this.options.pos.replace("left","right")),this.dropdown.hasClass("uk-dropdown-center")&&(this.options.pos=this.options.pos.replace(/(left|right)/,"center")),this.element.attr("aria-haspopup","true"),this.element.attr("aria-expanded",this.element.hasClass("uk-open")),this.dropdown.attr("aria-hidden","true"),"click"==this.options.mode||t.support.touch?this.on("click.uk.dropdown",function(e){var i=t.$(e.target);i.parents(o.options.dropdownSelector).length||((i.is("a[href='#']")||i.parent().is("a[href='#']")||o.dropdown.length&&!o.dropdown.is(":visible"))&&e.preventDefault(),i.blur()),o.element.hasClass("uk-open")?(!o.dropdown.find(e.target).length||i.is(".uk-dropdown-close")||i.parents(".uk-dropdown-close").length)&&o.hide():o.show()}):this.on("mouseenter",function(){o.trigger("pointerenter.uk.dropdown",[o]),o.remainIdle&&clearTimeout(o.remainIdle),e&&clearTimeout(e),i&&i==o||(e=i&&i!=o?setTimeout(function(){e=setTimeout(o.show.bind(o),o.options.delay)},o.options.hoverDelayIdle):setTimeout(o.show.bind(o),o.options.delay))}).on("mouseleave",function(){e&&clearTimeout(e),o.remainIdle=setTimeout(function(){i&&i==o&&o.hide()},o.options.remaintime),o.trigger("pointerleave.uk.dropdown",[o])}).on("click",function(e){var n=t.$(e.target);return o.remainIdle&&clearTimeout(o.remainIdle),i&&i==o?((!o.dropdown.find(e.target).length||n.is(".uk-dropdown-close")||n.parents(".uk-dropdown-close").length)&&o.hide(),void 0):((n.is("a[href='#']")||n.parent().is("a[href='#']"))&&e.preventDefault(),o.show(),void 0)})},show:function(){t.$html.off("click.outer.dropdown"),i&&i!=this&&i.hide(!0),e&&clearTimeout(e),this.trigger("beforeshow.uk.dropdown",[this]),this.checkDimensions(),this.element.addClass("uk-open"),this.element.attr("aria-expanded","true"),this.dropdown.attr("aria-hidden","false"),this.trigger("show.uk.dropdown",[this]),t.Utils.checkDisplay(this.dropdown,!0),t.Utils.focus(this.dropdown),i=this,this.registerOuterClick()},hide:function(t){this.trigger("beforehide.uk.dropdown",[this,t]),this.element.removeClass("uk-open"),this.remainIdle&&clearTimeout(this.remainIdle),this.remainIdle=!1,this.element.attr("aria-expanded","false"),this.dropdown.attr("aria-hidden","true"),this.trigger("hide.uk.dropdown",[this,t]),i==this&&(i=!1)},registerOuterClick:function(){var o=this;t.$html.off("click.outer.dropdown"),setTimeout(function(){t.$html.on("click.outer.dropdown",function(n){e&&clearTimeout(e);t.$(n.target);i!=o||o.element.find(n.target).length||(o.hide(!0),t.$html.off("click.outer.dropdown"))})},10)},checkDimensions:function(){if(this.dropdown.length){this.dropdown.removeClass("uk-dropdown-top uk-dropdown-bottom uk-dropdown-left uk-dropdown-right uk-dropdown-stack uk-dropdown-autoflip").css({topLeft:"",left:"",marginLeft:"",marginRight:""}),this.justified&&this.justified.length&&this.dropdown.css("min-width","");var e,i=t.$.extend({},this.offsetParent.offset(),{width:this.offsetParent[0].offsetWidth,height:this.offsetParent[0].offsetHeight}),r=this.options.offset,s=this.dropdown,d=(s.show().offset()||{left:0,top:0},s.outerWidth()),h=s.outerHeight(),p=this.boundary.width(),l=(this.boundary[0]!==window&&this.boundary.offset()?this.boundary.offset():{top:0,left:0},this.options.pos),a={"bottom-left":{top:0+i.height+r,left:0},"bottom-right":{top:0+i.height+r,left:0+i.width-d},"bottom-center":{top:0+i.height+r,left:0+i.width/2-d/2},"top-left":{top:0-h-r,left:0},"top-right":{top:0-h-r,left:0+i.width-d},"top-center":{top:0-h-r,left:0+i.width/2-d/2},"left-top":{top:0,left:0-d-r},"left-bottom":{top:0+i.height-h,left:0-d-r},"left-center":{top:0+i.height/2-h/2,left:0-d-r},"right-top":{top:0,left:0+i.width+r},"right-bottom":{top:0+i.height-h,left:0+i.width+r},"right-center":{top:0+i.height/2-h/2,left:0+i.width+r}},f={};if(e=l.split("-"),f=a[l]?a[l]:a["bottom-left"],this.justified&&this.justified.length)o(s.css({left:0}),this.justified,p);else if(this.options.preventflip!==!0){var u;switch(this.checkBoundary(i.left+f.left,i.top+f.top,d,h,p)){case"x":"x"!==this.options.preventflip&&(u=n.x[l]||"right-top");break;case"y":"y"!==this.options.preventflip&&(u=n.y[l]||"top-left");break;case"xy":this.options.preventflip||(u=n.xy[l]||"right-bottom")}u&&(e=u.split("-"),f=a[u]?a[u]:a["bottom-left"],s.addClass("uk-dropdown-autoflip"),this.checkBoundary(i.left+f.left,i.top+f.top,d,h,p)&&(e=l.split("-"),f=a[l]?a[l]:a["bottom-left"]))}d>p&&(s.addClass("uk-dropdown-stack"),this.trigger("stack.uk.dropdown",[this])),s.css(f).css("display","").addClass("uk-dropdown-"+e[0])}},checkBoundary:function(o,e,i,n,r){var s="";return(0>o||o-t.$win.scrollLeft()+i>r)&&(s+="x"),(e-t.$win.scrollTop()<0||e-t.$win.scrollTop()+n>window.innerHeight)&&(s+="y"),s}}),t.component("dropdownOverlay",{defaults:{justify:!1,cls:"",duration:200},boot:function(){t.ready(function(o){t.$("[data-uk-dropdown-overlay]",o).each(function(){var o=t.$(this);o.data("dropdownOverlay")||t.dropdownOverlay(o,t.Utils.options(o.attr("data-uk-dropdown-overlay")))})})},init:function(){var e=this;this.justified=this.options.justify?t.$(this.options.justify):!1,this.overlay=this.element.find("uk-dropdown-overlay"),this.overlay.length||(this.overlay=t.$('
        ').appendTo(this.element)),this.overlay.addClass(this.options.cls),this.on({"beforeshow.uk.dropdown":function(t,i){e.dropdown=i,e.justified&&e.justified.length&&o(e.overlay.css({display:"block",marginLeft:"",marginRight:""}),e.justified,e.justified.outerWidth())},"show.uk.dropdown":function(){var o=e.dropdown.dropdown.outerHeight(!0);e.dropdown.element.removeClass("uk-open"),e.overlay.stop().css("display","block").animate({height:o},e.options.duration,function(){e.dropdown.dropdown.css("visibility",""),e.dropdown.element.addClass("uk-open"),t.Utils.checkDisplay(e.dropdown.dropdown,!0)}),e.pointerleave=!1},"hide.uk.dropdown":function(){e.overlay.stop().animate({height:0},e.options.duration)},"pointerenter.uk.dropdown":function(){clearTimeout(e.remainIdle)},"pointerleave.uk.dropdown":function(){e.pointerleave=!0}}),this.overlay.on({mouseenter:function(){e.remainIdle&&(clearTimeout(e.dropdown.remainIdle),clearTimeout(e.remainIdle))},mouseleave:function(){e.pointerleave&&i&&(e.remainIdle=setTimeout(function(){i&&i.hide()},i.options.remaintime))}})}})}(UIkit2); \ No newline at end of file diff --git a/media/uikit/js/core/grid.js b/media/uikit-v2/js/core/grid.js similarity index 65% rename from media/uikit/js/core/grid.js rename to media/uikit-v2/js/core/grid.js index f1e45f4..d96ac69 100644 --- a/media/uikit/js/core/grid.js +++ b/media/uikit-v2/js/core/grid.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; @@ -8,9 +8,10 @@ UI.component('gridMatchHeight', { defaults: { - "target" : false, - "row" : true, - "ignorestacked" : false + target : false, + row : true, + ignorestacked : false, + observe : false }, boot: function() { @@ -18,11 +19,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-grid-match]", context).each(function() { + UI.$('[data-uk-grid-match]', context).each(function() { var grid = UI.$(this), obj; - if (!grid.data("gridMatchHeight")) { - obj = UI.gridMatchHeight(grid, UI.Utils.options(grid.attr("data-uk-grid-match"))); + if (!grid.data('gridMatchHeight')) { + obj = UI.gridMatchHeight(grid, UI.Utils.options(grid.attr('data-uk-grid-match'))); } }); }); @@ -40,7 +41,7 @@ UI.$win.on('load resize orientationchange', (function() { var fn = function() { - $this.match(); + if ($this.element.is(':visible')) $this.match(); }; UI.$(function() { fn(); }); @@ -48,14 +49,15 @@ return UI.Utils.debounce(fn, 50); })()); - UI.$html.on("changed.uk.dom", function(e) { - $this.columns = $this.element.children(); - $this.elements = $this.options.target ? $this.find($this.options.target) : $this.columns; - $this.match(); - }); + if (this.options.observe) { - this.on("display.uk.check", function(e) { - if(this.element.is(":visible")) this.match(); + UI.domObserve(this.element, function(e) { + if ($this.element.is(':visible')) $this.match(); + }); + } + + this.on('display.uk.check', function(e) { + if(this.element.is(':visible')) this.match(); }.bind(this)); grids.push(this); @@ -63,7 +65,7 @@ match: function() { - var firstvisible = this.columns.filter(":visible:first"); + var firstvisible = this.columns.filter(':visible:first'); if (!firstvisible.length) return; @@ -87,7 +89,8 @@ UI.component('gridMargin', { defaults: { - "cls": "uk-grid-margin" + cls : 'uk-grid-margin', + rowfirst : 'uk-row-first' }, boot: function() { @@ -95,11 +98,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-grid-margin]", context).each(function() { + UI.$('[data-uk-grid-margin]', context).each(function() { var grid = UI.$(this), obj; - if (!grid.data("gridMargin")) { - obj = UI.gridMargin(grid, UI.Utils.options(grid.attr("data-uk-grid-margin"))); + if (!grid.data('gridMargin')) { + obj = UI.gridMargin(grid, UI.Utils.options(grid.attr('data-uk-grid-margin'))); } }); }); @@ -111,4 +114,4 @@ } }); -})(UIkit); +})(UIkit2); diff --git a/media/uikit-v2/js/core/grid.min.js b/media/uikit-v2/js/core/grid.min.js new file mode 100644 index 0000000..676fb2b --- /dev/null +++ b/media/uikit-v2/js/core/grid.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";var i=[];t.component("gridMatchHeight",{defaults:{target:!1,row:!0,ignorestacked:!1,observe:!1},boot:function(){t.ready(function(i){t.$("[data-uk-grid-match]",i).each(function(){var i,n=t.$(this);n.data("gridMatchHeight")||(i=t.gridMatchHeight(n,t.Utils.options(n.attr("data-uk-grid-match"))))})})},init:function(){var n=this;this.columns=this.element.children(),this.elements=this.options.target?this.find(this.options.target):this.columns,this.columns.length&&(t.$win.on("load resize orientationchange",function(){var i=function(){n.element.is(":visible")&&n.match()};return t.$(function(){i()}),t.Utils.debounce(i,50)}()),this.options.observe&&t.domObserve(this.element,function(){n.element.is(":visible")&&n.match()}),this.on("display.uk.check",function(){this.element.is(":visible")&&this.match()}.bind(this)),i.push(this))},match:function(){var i=this.columns.filter(":visible:first");if(i.length){var n=Math.ceil(100*parseFloat(i.css("width"))/parseFloat(i.parent().css("width")))>=100;return n&&!this.options.ignorestacked?this.revert():t.Utils.matchHeights(this.elements,this.options),this}},revert:function(){return this.elements.css("min-height",""),this}}),t.component("gridMargin",{defaults:{cls:"uk-grid-margin",rowfirst:"uk-row-first"},boot:function(){t.ready(function(i){t.$("[data-uk-grid-margin]",i).each(function(){var i,n=t.$(this);n.data("gridMargin")||(i=t.gridMargin(n,t.Utils.options(n.attr("data-uk-grid-margin"))))})})},init:function(){t.stackMargin(this.element,this.options)}})}(UIkit2); \ No newline at end of file diff --git a/media/uikit-v2/js/core/index.html b/media/uikit-v2/js/core/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/uikit-v2/js/core/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/uikit/js/core/modal.js b/media/uikit-v2/js/core/modal.js similarity index 65% rename from media/uikit/js/core/modal.js rename to media/uikit-v2/js/core/modal.js index 4bfb3fd..1f3d657 100644 --- a/media/uikit/js/core/modal.js +++ b/media/uikit-v2/js/core/modal.js @@ -1,10 +1,16 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; var active = false, activeCount = 0, $html = UI.$html, body; + UI.$win.on('resize orientationchange', UI.Utils.debounce(function(){ + UI.$('.uk-modal.uk-open').each(function(){ + return UI.$(this).data('modal') && UI.$(this).data('modal').resize(); + }); + }, 150)); + UI.component('modal', { defaults: { @@ -17,6 +23,7 @@ scrollable: false, transition: false, + hasTransitioned: true, init: function() { @@ -26,18 +33,18 @@ var $this = this; - this.paddingdir = "padding-" + (UI.langdirection == 'left' ? "right":"left"); - this.dialog = this.find(".uk-modal-dialog"); + this.paddingdir = 'padding-' + (UI.langdirection == 'left' ? 'right':'left'); + this.dialog = this.find('.uk-modal-dialog'); this.active = false; // Update ARIA - this.element.attr('aria-hidden', this.element.hasClass("uk-open")); + this.element.attr('aria-hidden', this.element.hasClass('uk-open')); - this.on("click", ".uk-modal-close", function(e) { + this.on('click', '.uk-modal-close', function(e) { e.preventDefault(); $this.hide(); - }).on("click", function(e) { + }).on('click', function(e) { var target = UI.$(e.target); @@ -45,10 +52,12 @@ $this.hide(); } }); + + UI.domObserve(this.element, function(e) { $this.resize(); }); }, toggle: function() { - return this[this.isActive() ? "hide" : "show"](); + return this[this.isActive() ? 'hide' : 'show'](); }, show: function() { @@ -63,8 +72,8 @@ active.hide(true); } - this.element.removeClass("uk-open").show(); - this.resize(); + this.element.removeClass('uk-open').show(); + this.resize(true); if (this.options.modal) { active = this; @@ -74,14 +83,23 @@ activeCount++; - this.element.addClass("uk-open"); + if (UI.support.transition) { + this.hasTransitioned = false; + this.element.one(UI.support.transition.end, function(){ + $this.hasTransitioned = true; + UI.Utils.focus($this.dialog, 'a[href]'); + }).addClass('uk-open'); + } else { + this.element.addClass('uk-open'); + UI.Utils.focus(this.dialog, 'a[href]'); + } - $html.addClass("uk-modal-page").height(); // force browser engine redraw + $html.addClass('uk-modal-page').height(); // force browser engine redraw // Update ARIA this.element.attr('aria-hidden', 'false'); - this.element.trigger("show.uk.modal"); + this.element.trigger('show.uk.modal'); UI.Utils.checkDisplay(this.dialog, true); @@ -90,13 +108,13 @@ hide: function(force) { - if (!force && UI.support.transition) { + if (!force && UI.support.transition && this.hasTransitioned) { var $this = this; this.one(UI.support.transition.end, function() { $this._hide(); - }).removeClass("uk-open"); + }).removeClass('uk-open'); } else { @@ -106,7 +124,9 @@ return this; }, - resize: function() { + resize: function(force) { + + if (!this.isActive() && !force) return; var bodywidth = body.width(); @@ -122,9 +142,9 @@ pad = parseInt(this.dialog.css('margin-top'), 10) + parseInt(this.dialog.css('margin-bottom'), 10); if ((dh + pad) < window.innerHeight) { - this.dialog.css({'top': (window.innerHeight/2 - dh/2) - pad }); + this.dialog.css({top: (window.innerHeight/2 - dh/2) - pad }); } else { - this.dialog.css({'top': ''}); + this.dialog.css({top: ''}); } } }, @@ -136,14 +156,17 @@ if (scrollable.length) { - scrollable.css("height", 0); + scrollable.css('height', 0); - var offset = Math.abs(parseInt(this.dialog.css("margin-top"), 10)), + var offset = Math.abs(parseInt(this.dialog.css('margin-top'), 10)), dh = this.dialog.outerHeight(), wh = window.innerHeight, h = wh - 2*(offset < 20 ? 20:offset) - dh; - scrollable.css("height", h < this.options.minScrollHeight ? "":h); + scrollable.css({ + maxHeight: (h < this.options.minScrollHeight ? '':h), + height:'' + }); return true; } @@ -154,25 +177,26 @@ _hide: function() { this.active = false; - activeCount--; + if (activeCount > 0) activeCount--; + else activeCount = 0; - this.element.hide().removeClass("uk-open"); + this.element.hide().removeClass('uk-open'); // Update ARIA this.element.attr('aria-hidden', 'true'); if (!activeCount) { - $html.removeClass("uk-modal-page"); + $html.removeClass('uk-modal-page'); body.css(this.paddingdir, ""); } - if(active===this) active = false; + if (active===this) active = false; - this.trigger("hide.uk.modal"); + this.trigger('hide.uk.modal'); }, isActive: function() { - return this.active; + return this.element.hasClass('uk-open'); } }); @@ -182,16 +206,16 @@ boot: function() { // init code - UI.$html.on("click.modal.uikit", "[data-uk-modal]", function(e) { + UI.$html.on('click.modal.uikit', '[data-uk-modal]', function(e) { var ele = UI.$(this); - if (ele.is("a")) { + if (ele.is('a')) { e.preventDefault(); } - if (!ele.data("modalTrigger")) { - var modal = UI.modalTrigger(ele, UI.Utils.options(ele.attr("data-uk-modal"))); + if (!ele.data('modalTrigger')) { + var modal = UI.modalTrigger(ele, UI.Utils.options(ele.attr('data-uk-modal'))); modal.show(); } @@ -205,10 +229,6 @@ active.hide(); } }); - - UI.$win.on("resize orientationchange", UI.Utils.debounce(function(){ - if (active) active.resize(); - }, 150)); }, init: function() { @@ -216,7 +236,7 @@ var $this = this; this.options = UI.$.extend({ - "target": $this.element.is("a") ? $this.element.attr("href") : false + target: $this.element.is('a') ? $this.element.attr('href') : false }, this.options); this.modal = UI.modal(this.options.target, this.options); @@ -227,17 +247,17 @@ }); //methods - this.proxy(this.modal, "show hide isActive"); + this.proxy(this.modal, 'show hide isActive'); } }); UI.modal.dialog = function(content, options) { - var modal = UI.modal(UI.$(UI.modal.dialog.template).appendTo("body"), options); + var modal = UI.modal(UI.$(UI.modal.dialog.template).appendTo('body'), options); - modal.on("hide.uk.modal", function(){ + modal.on('hide.uk.modal', function(){ if (modal.persist) { - modal.persist.appendTo(modal.persist.data("modalPersistParent")); + modal.persist.appendTo(modal.persist.data('modalPersistParent')); modal.persist = false; } modal.element.remove(); @@ -265,31 +285,34 @@ }, 50); }); - modal.show(); + return modal.show(); }; - UI.modal.confirm = function(content, onconfirm, options) { + UI.modal.confirm = function(content, onconfirm, oncancel) { + + var options = arguments.length > 1 && arguments[arguments.length-1] ? arguments[arguments.length-1] : {}; onconfirm = UI.$.isFunction(onconfirm) ? onconfirm : function(){}; - options = UI.$.extend(true, {bgclose:false, keyboard:false, modal:false, labels:UI.modal.labels}, options); + oncancel = UI.$.isFunction(oncancel) ? oncancel : function(){}; + options = UI.$.extend(true, {bgclose:false, keyboard:false, modal:false, labels:UI.modal.labels}, UI.$.isFunction(options) ? {}:options); var modal = UI.modal.dialog(([ '
        '+String(content)+'
        ', - '' + '' ]).join(""), options); - modal.element.find(".js-modal-confirm").on("click", function(){ - onconfirm(); + modal.element.find(".js-modal-confirm, .js-modal-confirm-cancel").on("click", function(){ + UI.$(this).is('.js-modal-confirm') ? onconfirm() : oncancel(); modal.hide(); }); modal.on('show.uk.modal', function(){ setTimeout(function(){ - modal.element.find('button:first').focus(); + modal.element.find('.js-modal-confirm').focus(); }, 50); }); - modal.show(); + return modal.show(); }; UI.modal.prompt = function(text, value, onsubmit, options) { @@ -300,28 +323,22 @@ var modal = UI.modal.dialog(([ text ? '
        '+String(text)+'
        ':'', '

        ', - '' + '' ]).join(""), options), input = modal.element.find("input[type='text']").val(value || '').on('keyup', function(e){ if (e.keyCode == 13) { - modal.element.find(".js-modal-ok").trigger('click'); + modal.element.find('.js-modal-ok').trigger('click'); } }); - modal.element.find(".js-modal-ok").on("click", function(){ + modal.element.find('.js-modal-ok').on('click', function(){ if (onsubmit(input.val())!==false){ modal.hide(); } }); - modal.on('show.uk.modal', function(){ - setTimeout(function(){ - input.focus(); - }, 50); - }); - - modal.show(); + return modal.show(); }; UI.modal.blockUI = function(content, options) { @@ -331,18 +348,15 @@ ]).join(""), UI.$.extend({bgclose:false, keyboard:false, modal:false}, options)); modal.content = modal.element.find('.uk-modal-content:first'); - modal.show(); - return modal; + return modal.show(); }; - UI.modal.labels = { - 'Ok': 'Ok', - 'Cancel': 'Cancel' + Ok: 'Ok', + Cancel: 'Cancel' }; - // helper functions function setContent(content, modal){ @@ -355,14 +369,14 @@ if(content.parent().length) { modal.persist = content; - modal.persist.data("modalPersistParent", content.parent()); + modal.persist.data('modalPersistParent', content.parent()); } }else if (typeof content === 'string' || typeof content === 'number') { // just insert the data as innerHTML content = UI.$('
        ').html(content); }else { // unsupported data type! - content = UI.$('
        ').html('UIkit.modal Error: Unsupported data type: ' + typeof content); + content = UI.$('
        ').html('UIkit2.modal Error: Unsupported data type: ' + typeof content); } content.appendTo(modal.element.find('.uk-modal-dialog')); @@ -370,4 +384,4 @@ return modal; } -})(UIkit); +})(UIkit2); diff --git a/media/uikit-v2/js/core/modal.min.js b/media/uikit-v2/js/core/modal.min.js new file mode 100644 index 0000000..3f48493 --- /dev/null +++ b/media/uikit-v2/js/core/modal.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";function i(i,e){return e?("object"==typeof i?(i=i instanceof jQuery?i:t.$(i),i.parent().length&&(e.persist=i,e.persist.data("modalPersistParent",i.parent()))):i="string"==typeof i||"number"==typeof i?t.$("
        ").html(i):t.$("
        ").html("UIkit2.modal Error: Unsupported data type: "+typeof i),i.appendTo(e.element.find(".uk-modal-dialog")),e):void 0}var e,o=!1,n=0,s=t.$html;t.$win.on("resize orientationchange",t.Utils.debounce(function(){t.$(".uk-modal.uk-open").each(function(){return t.$(this).data("modal")&&t.$(this).data("modal").resize()})},150)),t.component("modal",{defaults:{keyboard:!0,bgclose:!0,minScrollHeight:150,center:!1,modal:!0},scrollable:!1,transition:!1,hasTransitioned:!0,init:function(){if(e||(e=t.$("body")),this.element.length){var i=this;this.paddingdir="padding-"+("left"==t.langdirection?"right":"left"),this.dialog=this.find(".uk-modal-dialog"),this.active=!1,this.element.attr("aria-hidden",this.element.hasClass("uk-open")),this.on("click",".uk-modal-close",function(t){t.preventDefault(),i.hide()}).on("click",function(e){var o=t.$(e.target);o[0]==i.element[0]&&i.options.bgclose&&i.hide()}),t.domObserve(this.element,function(){i.resize()})}},toggle:function(){return this[this.isActive()?"hide":"show"]()},show:function(){if(this.element.length){var i=this;if(!this.isActive())return this.options.modal&&o&&o.hide(!0),this.element.removeClass("uk-open").show(),this.resize(!0),this.options.modal&&(o=this),this.active=!0,n++,t.support.transition?(this.hasTransitioned=!1,this.element.one(t.support.transition.end,function(){i.hasTransitioned=!0,t.Utils.focus(i.dialog,"a[href]")}).addClass("uk-open")):(this.element.addClass("uk-open"),t.Utils.focus(this.dialog,"a[href]")),s.addClass("uk-modal-page").height(),this.element.attr("aria-hidden","false"),this.element.trigger("show.uk.modal"),t.Utils.checkDisplay(this.dialog,!0),this}},hide:function(i){if(!i&&t.support.transition&&this.hasTransitioned){var e=this;this.one(t.support.transition.end,function(){e._hide()}).removeClass("uk-open")}else this._hide();return this},resize:function(t){if(this.isActive()||t){var i=e.width();if(this.scrollbarwidth=window.innerWidth-i,e.css(this.paddingdir,this.scrollbarwidth),this.element.css("overflow-y",this.scrollbarwidth?"scroll":"auto"),!this.updateScrollable()&&this.options.center){var o=this.dialog.outerHeight(),n=parseInt(this.dialog.css("margin-top"),10)+parseInt(this.dialog.css("margin-bottom"),10);o+ni?20:i)-e;return t.css({maxHeight:n0?n--:n=0,this.element.hide().removeClass("uk-open"),this.element.attr("aria-hidden","true"),n||(s.removeClass("uk-modal-page"),e.css(this.paddingdir,"")),o===this&&(o=!1),this.trigger("hide.uk.modal")},isActive:function(){return this.element.hasClass("uk-open")}}),t.component("modalTrigger",{boot:function(){t.$html.on("click.modal.uikit","[data-uk-modal]",function(i){var e=t.$(this);if(e.is("a")&&i.preventDefault(),!e.data("modalTrigger")){var o=t.modalTrigger(e,t.Utils.options(e.attr("data-uk-modal")));o.show()}}),t.$html.on("keydown.modal.uikit",function(t){o&&27===t.keyCode&&o.options.keyboard&&(t.preventDefault(),o.hide())})},init:function(){var i=this;this.options=t.$.extend({target:i.element.is("a")?i.element.attr("href"):!1},this.options),this.modal=t.modal(this.options.target,this.options),this.on("click",function(t){t.preventDefault(),i.show()}),this.proxy(this.modal,"show hide isActive")}}),t.modal.dialog=function(e,o){var n=t.modal(t.$(t.modal.dialog.template).appendTo("body"),o);return n.on("hide.uk.modal",function(){n.persist&&(n.persist.appendTo(n.persist.data("modalPersistParent")),n.persist=!1),n.element.remove()}),i(e,n),n},t.modal.dialog.template='
        ',t.modal.alert=function(i,e){e=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},e);var o=t.modal.dialog(['
        '+String(i)+"
        ",'"].join(""),e);return o.on("show.uk.modal",function(){setTimeout(function(){o.element.find("button:first").focus()},50)}),o.show()},t.modal.confirm=function(i,e,o){var n=arguments.length>1&&arguments[arguments.length-1]?arguments[arguments.length-1]:{};e=t.$.isFunction(e)?e:function(){},o=t.$.isFunction(o)?o:function(){},n=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},t.$.isFunction(n)?{}:n);var s=t.modal.dialog(['
        '+String(i)+"
        ",'"].join(""),n);return s.element.find(".js-modal-confirm, .js-modal-confirm-cancel").on("click",function(){t.$(this).is(".js-modal-confirm")?e():o(),s.hide()}),s.on("show.uk.modal",function(){setTimeout(function(){s.element.find(".js-modal-confirm").focus()},50)}),s.show()},t.modal.prompt=function(i,e,o,n){o=t.$.isFunction(o)?o:function(){},n=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},n);var s=t.modal.dialog([i?'
        '+String(i)+"
        ":"",'

        ','"].join(""),n),a=s.element.find("input[type='text']").val(e||"").on("keyup",function(t){13==t.keyCode&&s.element.find(".js-modal-ok").trigger("click")});return s.element.find(".js-modal-ok").on("click",function(){o(a.val())!==!1&&s.hide()}),s.show()},t.modal.blockUI=function(i,e){var o=t.modal.dialog(['
        '+String(i||'
        ...
        ')+"
        "].join(""),t.$.extend({bgclose:!1,keyboard:!1,modal:!1},e));return o.content=o.element.find(".uk-modal-content:first"),o.show()},t.modal.labels={Ok:"Ok",Cancel:"Cancel"}}(UIkit2); \ No newline at end of file diff --git a/media/uikit/js/core/nav.js b/media/uikit-v2/js/core/nav.js similarity index 69% rename from media/uikit/js/core/nav.js rename to media/uikit-v2/js/core/nav.js index 020a233..14e0611 100644 --- a/media/uikit/js/core/nav.js +++ b/media/uikit-v2/js/core/nav.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; @@ -6,9 +6,9 @@ UI.component('nav', { defaults: { - "toggle": ">li.uk-parent > a[href='#']", - "lists": ">li.uk-parent > ul", - "multiple": false + toggle: '>li.uk-parent > a[href="#"]', + lists: '>li.uk-parent > ul', + multiple: false }, boot: function() { @@ -16,11 +16,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-nav]", context).each(function() { + UI.$('[data-uk-nav]', context).each(function() { var nav = UI.$(this); - if (!nav.data("nav")) { - var obj = UI.nav(nav, UI.Utils.options(nav.attr("data-uk-nav"))); + if (!nav.data('nav')) { + var obj = UI.nav(nav, UI.Utils.options(nav.attr('data-uk-nav'))); } }); }); @@ -30,26 +30,41 @@ var $this = this; - this.on("click.uikit.nav", this.options.toggle, function(e) { + this.on('click.uk.nav', this.options.toggle, function(e) { e.preventDefault(); var ele = UI.$(this); $this.open(ele.parent()[0] == $this.element[0] ? ele : ele.parent("li")); }); + this.update(); + + UI.domObserve(this.element, function(e) { + if ($this.element.find($this.options.lists).not('[role]').length) { + $this.update(); + } + }); + }, + + update: function() { + + var $this = this; + this.find(this.options.lists).each(function() { - var $ele = UI.$(this), - parent = $ele.parent(), + + var $ele = UI.$(this).attr('role', 'menu'), + parent = $ele.closest('li'), active = parent.hasClass("uk-active"); - $ele.wrap('
        '); - parent.data("list-container", $ele.parent()[active ? 'removeClass':'addClass']('uk-hidden')); + if (!parent.data('list-container')) { + $ele.wrap('
        '); + parent.data('list-container', $ele.parent()[active ? 'removeClass':'addClass']('uk-hidden')); + } // Init ARIA parent.attr('aria-expanded', parent.hasClass("uk-open")); if (active) $this.open(parent, true); }); - }, open: function(li, noanimation) { @@ -114,15 +129,17 @@ // helper function getHeight(ele) { - var $ele = UI.$(ele), height = "auto"; - if ($ele.is(":visible")) { + var $ele = UI.$(ele), height = 'auto'; + + if ($ele.is(':visible')) { height = $ele.outerHeight(); } else { + var tmp = { - position: $ele.css("position"), - visibility: $ele.css("visibility"), - display: $ele.css("display") + position: $ele.css('position'), + visibility: $ele.css('visibility'), + display: $ele.css('display') }; height = $ele.css({position: 'absolute', visibility: 'hidden', display: 'block'}).outerHeight(); @@ -133,4 +150,4 @@ return height; } -})(UIkit); +})(UIkit2); diff --git a/media/uikit-v2/js/core/nav.min.js b/media/uikit-v2/js/core/nav.min.js new file mode 100644 index 0000000..39c04c6 --- /dev/null +++ b/media/uikit-v2/js/core/nav.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";function i(i){var s=t.$(i),e="auto";if(s.is(":visible"))e=s.outerHeight();else{var a={position:s.css("position"),visibility:s.css("visibility"),display:s.css("display")};e=s.css({position:"absolute",visibility:"hidden",display:"block"}).outerHeight(),s.css(a)}return e}t.component("nav",{defaults:{toggle:'>li.uk-parent > a[href="#"]',lists:">li.uk-parent > ul",multiple:!1},boot:function(){t.ready(function(i){t.$("[data-uk-nav]",i).each(function(){var i=t.$(this);if(!i.data("nav")){t.nav(i,t.Utils.options(i.attr("data-uk-nav")))}})})},init:function(){var i=this;this.on("click.uk.nav",this.options.toggle,function(s){s.preventDefault();var e=t.$(this);i.open(e.parent()[0]==i.element[0]?e:e.parent("li"))}),this.update(),t.domObserve(this.element,function(){i.element.find(i.options.lists).not("[role]").length&&i.update()})},update:function(){var i=this;this.find(this.options.lists).each(function(){var s=t.$(this).attr("role","menu"),e=s.closest("li"),a=e.hasClass("uk-active");e.data("list-container")||(s.wrap('
        '),e.data("list-container",s.parent()[a?"removeClass":"addClass"]("uk-hidden"))),e.attr("aria-expanded",e.hasClass("uk-open")),a&&i.open(e,!0)})},open:function(s,e){var a=this,n=this.element,o=t.$(s),l=o.data("list-container");this.options.multiple||n.children(".uk-open").not(s).each(function(){var i=t.$(this);i.data("list-container")&&i.data("list-container").stop().animate({height:0},function(){t.$(this).parent().removeClass("uk-open").end().addClass("uk-hidden")})}),o.toggleClass("uk-open"),o.attr("aria-expanded",o.hasClass("uk-open")),l&&(o.hasClass("uk-open")&&l.removeClass("uk-hidden"),e?(l.stop().height(o.hasClass("uk-open")?"auto":0),o.hasClass("uk-open")||l.addClass("uk-hidden"),this.trigger("display.uk.check")):l.stop().animate({height:o.hasClass("uk-open")?i(l.find("ul:first")):0},function(){o.hasClass("uk-open")?l.css("height",""):l.addClass("uk-hidden"),a.trigger("display.uk.check")}))}})}(UIkit2); \ No newline at end of file diff --git a/media/uikit-v2/js/core/offcanvas.js b/media/uikit-v2/js/core/offcanvas.js new file mode 100644 index 0000000..cea3e88 --- /dev/null +++ b/media/uikit-v2/js/core/offcanvas.js @@ -0,0 +1,197 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +(function(UI) { + + "use strict"; + + var scrollpos = {x: window.scrollX, y: window.scrollY}, + $win = UI.$win, + $doc = UI.$doc, + $html = UI.$html, + Offcanvas = { + + show: function(element, options) { + + element = UI.$(element); + + if (!element.length) return; + + options = UI.$.extend({mode: 'push'}, options); + + var $body = UI.$('body'), + bar = element.find('.uk-offcanvas-bar:first'), + rtl = (UI.langdirection == 'right'), + flip = bar.hasClass('uk-offcanvas-bar-flip') ? -1:1, + dir = flip * (rtl ? -1 : 1), + + scrollbarwidth = window.innerWidth - $body.width(); + + scrollpos = {x: window.pageXOffset, y: window.pageYOffset}; + + bar.attr('mode', options.mode); + element.addClass('uk-active'); + + $body.css({width: window.innerWidth - scrollbarwidth, height: window.innerHeight}).addClass('uk-offcanvas-page'); + + if (options.mode == 'push' || options.mode == 'reveal') { + $body.css((rtl ? 'margin-right' : 'margin-left'), (rtl ? -1 : 1) * (bar.outerWidth() * dir)); + } + + if (options.mode == 'reveal') { + bar.css('clip', 'rect(0, '+bar.outerWidth()+'px, 100vh, 0)'); + } + + $html.css('margin-top', scrollpos.y * -1).width(); // .width() - force redraw + + + bar.addClass('uk-offcanvas-bar-show'); + + this._initElement(element); + + bar.trigger('show.uk.offcanvas', [element, bar]); + + // Update ARIA + element.attr('aria-hidden', 'false'); + }, + + hide: function(force) { + + var $body = UI.$('body'), + panel = UI.$('.uk-offcanvas.uk-active'), + rtl = (UI.langdirection == 'right'), + bar = panel.find('.uk-offcanvas-bar:first'), + finalize = function() { + $body.removeClass('uk-offcanvas-page').css({width: '', height: '', marginLeft: '', marginRight: ''}); + panel.removeClass('uk-active'); + + bar.removeClass('uk-offcanvas-bar-show'); + $html.css('margin-top', ''); + window.scrollTo(scrollpos.x, scrollpos.y); + bar.trigger('hide.uk.offcanvas', [panel, bar]); + + // Update ARIA + panel.attr('aria-hidden', 'true'); + }; + + if (!panel.length) return; + if (bar.attr('mode') == 'none') force = true; + + if (UI.support.transition && !force) { + + $body.one(UI.support.transition.end, function() { + finalize(); + }).css((rtl ? 'margin-right' : 'margin-left'), ''); + + if (bar.attr('mode') == 'reveal') { + bar.css('clip', ''); + } + + setTimeout(function(){ + bar.removeClass('uk-offcanvas-bar-show'); + }, 0); + + } else { + finalize(); + } + }, + + _initElement: function(element) { + + if (element.data('OffcanvasInit')) return; + + element.on('click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas', function(e) { + + var target = UI.$(e.target); + + if (!e.type.match(/swipe/)) { + + if (!target.hasClass('uk-offcanvas-close')) { + if (target.hasClass('uk-offcanvas-bar')) return; + if (target.parents('.uk-offcanvas-bar:first').length) return; + } + } + + e.stopImmediatePropagation(); + Offcanvas.hide(); + }); + + element.on('click', 'a[href*="#"]', function(e){ + + var link = UI.$(this), + href = link.attr('href'); + + if (href == '#') { + return; + } + + UI.$doc.one('hide.uk.offcanvas', function() { + + var target; + + try { + target = UI.$(link[0].hash); + } catch (e){ + target = ''; + } + + if (!target.length) { + target = UI.$('[name="'+link[0].hash.replace('#','')+'"]'); + } + + if (target.length && UI.Utils.scrollToElement) { + UI.Utils.scrollToElement(target, UI.Utils.options(link.attr('data-uk-smooth-scroll') || '{}')); + } else { + window.location.href = href; + } + }); + + Offcanvas.hide(); + }); + + element.data('OffcanvasInit', true); + } + }; + + UI.component('offcanvasTrigger', { + + boot: function() { + + // init code + $html.on('click.offcanvas.uikit', '[data-uk-offcanvas]', function(e) { + + e.preventDefault(); + + var ele = UI.$(this); + + if (!ele.data('offcanvasTrigger')) { + var obj = UI.offcanvasTrigger(ele, UI.Utils.options(ele.attr('data-uk-offcanvas'))); + ele.trigger("click"); + } + }); + + $html.on('keydown.uk.offcanvas', function(e) { + + if (e.keyCode === 27) { // ESC + Offcanvas.hide(); + } + }); + }, + + init: function() { + + var $this = this; + + this.options = UI.$.extend({ + target: $this.element.is('a') ? $this.element.attr('href') : false, + mode: 'push' + }, this.options); + + this.on('click', function(e) { + e.preventDefault(); + Offcanvas.show($this.options.target, $this.options); + }); + } + }); + + UI.offcanvas = Offcanvas; + +})(UIkit2); diff --git a/media/uikit-v2/js/core/offcanvas.min.js b/media/uikit-v2/js/core/offcanvas.min.js new file mode 100644 index 0000000..0b13dc5 --- /dev/null +++ b/media/uikit-v2/js/core/offcanvas.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(a){"use strict";var t={x:window.scrollX,y:window.scrollY},n=(a.$win,a.$doc,a.$html),i={show:function(i,o){if(i=a.$(i),i.length){o=a.$.extend({mode:"push"},o);var e=a.$("body"),s=i.find(".uk-offcanvas-bar:first"),r="right"==a.langdirection,f=s.hasClass("uk-offcanvas-bar-flip")?-1:1,c=f*(r?-1:1),h=window.innerWidth-e.width();t={x:window.pageXOffset,y:window.pageYOffset},s.attr("mode",o.mode),i.addClass("uk-active"),e.css({width:window.innerWidth-h,height:window.innerHeight}).addClass("uk-offcanvas-page"),("push"==o.mode||"reveal"==o.mode)&&e.css(r?"margin-right":"margin-left",(r?-1:1)*s.outerWidth()*c),"reveal"==o.mode&&s.css("clip","rect(0, "+s.outerWidth()+"px, 100vh, 0)"),n.css("margin-top",-1*t.y).width(),s.addClass("uk-offcanvas-bar-show"),this._initElement(i),s.trigger("show.uk.offcanvas",[i,s]),i.attr("aria-hidden","false")}},hide:function(i){var o=a.$("body"),e=a.$(".uk-offcanvas.uk-active"),s="right"==a.langdirection,r=e.find(".uk-offcanvas-bar:first"),f=function(){o.removeClass("uk-offcanvas-page").css({width:"",height:"",marginLeft:"",marginRight:""}),e.removeClass("uk-active"),r.removeClass("uk-offcanvas-bar-show"),n.css("margin-top",""),window.scrollTo(t.x,t.y),r.trigger("hide.uk.offcanvas",[e,r]),e.attr("aria-hidden","true")};e.length&&("none"==r.attr("mode")&&(i=!0),a.support.transition&&!i?(o.one(a.support.transition.end,function(){f()}).css(s?"margin-right":"margin-left",""),"reveal"==r.attr("mode")&&r.css("clip",""),setTimeout(function(){r.removeClass("uk-offcanvas-bar-show")},0)):f())},_initElement:function(t){t.data("OffcanvasInit")||(t.on("click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas",function(t){var n=a.$(t.target);if(!t.type.match(/swipe/)&&!n.hasClass("uk-offcanvas-close")){if(n.hasClass("uk-offcanvas-bar"))return;if(n.parents(".uk-offcanvas-bar:first").length)return}t.stopImmediatePropagation(),i.hide()}),t.on("click",'a[href*="#"]',function(){var t=a.$(this),n=t.attr("href");"#"!=n&&(a.$doc.one("hide.uk.offcanvas",function(){var i;try{i=a.$(t[0].hash)}catch(o){i=""}i.length||(i=a.$('[name="'+t[0].hash.replace("#","")+'"]')),i.length&&a.Utils.scrollToElement?a.Utils.scrollToElement(i,a.Utils.options(t.attr("data-uk-smooth-scroll")||"{}")):window.location.href=n}),i.hide())}),t.data("OffcanvasInit",!0))}};a.component("offcanvasTrigger",{boot:function(){n.on("click.offcanvas.uikit","[data-uk-offcanvas]",function(t){t.preventDefault();var n=a.$(this);if(!n.data("offcanvasTrigger")){{a.offcanvasTrigger(n,a.Utils.options(n.attr("data-uk-offcanvas")))}n.trigger("click")}}),n.on("keydown.uk.offcanvas",function(a){27===a.keyCode&&i.hide()})},init:function(){var t=this;this.options=a.$.extend({target:t.element.is("a")?t.element.attr("href"):!1,mode:"push"},this.options),this.on("click",function(a){a.preventDefault(),i.show(t.options.target,t.options)})}}),a.offcanvas=i}(UIkit2); \ No newline at end of file diff --git a/media/uikit/js/core/scrollspy.js b/media/uikit-v2/js/core/scrollspy.js similarity index 70% rename from media/uikit/js/core/scrollspy.js rename to media/uikit-v2/js/core/scrollspy.js index 9b8349e..989a1ca 100644 --- a/media/uikit/js/core/scrollspy.js +++ b/media/uikit-v2/js/core/scrollspy.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; @@ -15,30 +15,30 @@ UI.component('scrollspy', { defaults: { - "target" : false, - "cls" : "uk-scrollspy-inview", - "initcls" : "uk-scrollspy-init-inview", - "topoffset" : 0, - "leftoffset" : 0, - "repeat" : false, - "delay" : 0 + target : false, + cls : 'uk-scrollspy-inview', + initcls : 'uk-scrollspy-init-inview', + topoffset : 0, + leftoffset : 0, + repeat : false, + delay : 0 }, boot: function() { // listen to scroll and resize - $doc.on("scrolling.uk.document", checkScrollSpy); - $win.on("load resize orientationchange", UI.Utils.debounce(checkScrollSpy, 50)); + $doc.on('scrolling.uk.document', checkScrollSpy); + $win.on('load resize orientationchange', UI.Utils.debounce(checkScrollSpy, 50)); // init code UI.ready(function(context) { - UI.$("[data-uk-scrollspy]", context).each(function() { + UI.$('[data-uk-scrollspy]', context).each(function() { var element = UI.$(this); - if (!element.data("scrollspy")) { - var obj = UI.scrollspy(element, UI.Utils.options(element.attr("data-uk-scrollspy"))); + if (!element.data('scrollspy')) { + var obj = UI.scrollspy(element, UI.Utils.options(element.attr('data-uk-scrollspy'))); } }); }); @@ -57,7 +57,7 @@ var element = UI.$(this), inviewstate = element.data('inviewstate'), inview = UI.Utils.isInView(element, $this.options), - toggle = element.data('ukScrollspyCls') || togglecls[toggleclsIdx].trim(); + toggle = element.attr('data-uk-scrollspy-cls') || togglecls[toggleclsIdx].trim(); if (inview && !inviewstate && !element.data('scrollspy-idle')) { @@ -66,13 +66,13 @@ $this.offset = element.offset(); initinview = true; - element.trigger("init.uk.scrollspy"); + element.trigger('init.uk.scrollspy'); } element.data('scrollspy-idle', setTimeout(function(){ - element.addClass("uk-scrollspy-inview").toggleClass(toggle).width(); - element.trigger("inview.uk.scrollspy"); + element.addClass('uk-scrollspy-inview').toggleClass(toggle).width(); + element.trigger('inview.uk.scrollspy'); element.data('scrollspy-idle', false); element.data('inviewstate', true); @@ -86,12 +86,13 @@ if (element.data('scrollspy-idle')) { clearTimeout(element.data('scrollspy-idle')); + element.data('scrollspy-idle', false); } - element.removeClass("uk-scrollspy-inview").toggleClass(toggle); + element.removeClass('uk-scrollspy-inview').toggleClass(toggle); element.data('inviewstate', false); - element.trigger("outview.uk.scrollspy"); + element.trigger('outview.uk.scrollspy'); } toggleclsIdx = togglecls[toggleclsIdx + 1] ? (toggleclsIdx + 1) : 0; @@ -118,28 +119,28 @@ UI.component('scrollspynav', { defaults: { - "cls" : 'uk-active', - "closest" : false, - "topoffset" : 0, - "leftoffset" : 0, - "smoothscroll" : false + cls : 'uk-active', + closest : false, + topoffset : 0, + leftoffset : 0, + smoothscroll : false }, boot: function() { // listen to scroll and resize - $doc.on("scrolling.uk.document", checkScrollSpyNavs); - $win.on("resize orientationchange", UI.Utils.debounce(checkScrollSpyNavs, 50)); + $doc.on('scrolling.uk.document', checkScrollSpyNavs); + $win.on('resize orientationchange', UI.Utils.debounce(checkScrollSpyNavs, 50)); // init code UI.ready(function(context) { - UI.$("[data-uk-scrollspy-nav]", context).each(function() { + UI.$('[data-uk-scrollspy-nav]', context).each(function() { var element = UI.$(this); - if (!element.data("scrollspynav")) { - var obj = UI.scrollspynav(element, UI.Utils.options(element.attr("data-uk-scrollspy-nav"))); + if (!element.data('scrollspynav')) { + var obj = UI.scrollspynav(element, UI.Utils.options(element.attr('data-uk-scrollspy-nav'))); } }); }); @@ -148,7 +149,7 @@ init: function() { var ids = [], - links = this.find("a[href^='#']").each(function(){ ids.push(UI.$(this).attr("href")); }), + links = this.find("a[href^='#']").each(function(){ if(this.getAttribute('href').trim()!=='#') ids.push(this.getAttribute('href')); }), targets = UI.$(ids.join(",")), clsActive = this.options.cls, @@ -170,7 +171,7 @@ scrollTop = $win.scrollTop(), target = (function(){ for(var i=0; i< inviews.length;i++){ - if(inviews[i].offset().top >= scrollTop){ + if (inviews[i].offset().top - $this.options.topoffset >= scrollTop){ return inviews[i]; } } @@ -179,13 +180,13 @@ if (!target) return; if ($this.options.closest) { - links.closest(clsClosest).removeClass(clsActive); - navitems = links.filter("a[href='#"+target.attr("id")+"']").closest(clsClosest).addClass(clsActive); + links.blur().closest(clsClosest).removeClass(clsActive); + navitems = links.filter("a[href='#"+target.attr('id')+"']").closest(clsClosest).addClass(clsActive); } else { navitems = links.removeClass(clsActive).filter("a[href='#"+target.attr("id")+"']").addClass(clsActive); } - $this.element.trigger("inview.uk.scrollspynav", [target, navitems]); + $this.element.trigger('inview.uk.scrollspynav', [target, navitems]); } }; @@ -197,7 +198,7 @@ fn(); - this.element.data("scrollspynav", this); + this.element.data('scrollspynav', this); this.check = fn; scrollspynavs.push(this); @@ -205,4 +206,4 @@ } }); -})(UIkit); +})(UIkit2); diff --git a/media/uikit-v2/js/core/scrollspy.min.js b/media/uikit-v2/js/core/scrollspy.min.js new file mode 100644 index 0000000..1a0a6c7 --- /dev/null +++ b/media/uikit-v2/js/core/scrollspy.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";var s=t.$win,o=t.$doc,i=[],e=function(){for(var t=0;t=p)return o[t]}();if(!f)return;c.options.closest?(e.blur().closest(r).removeClass(a),l=e.filter("a[href='#"+f.attr("id")+"']").closest(r).addClass(a)):l=e.removeClass(a).filter("a[href='#"+f.attr("id")+"']").addClass(a),c.element.trigger("inview.uk.scrollspynav",[f,l])}};this.options.smoothscroll&&t.smoothScroll&&e.each(function(){t.smoothScroll(this,c.options.smoothscroll)}),p(),this.element.data("scrollspynav",this),this.check=p,l.push(this)}})}(UIkit2); \ No newline at end of file diff --git a/media/uikit/js/core/smooth-scroll.js b/media/uikit-v2/js/core/smooth-scroll.js similarity index 75% rename from media/uikit/js/core/smooth-scroll.js rename to media/uikit-v2/js/core/smooth-scroll.js index a7ebce0..42772df 100644 --- a/media/uikit/js/core/smooth-scroll.js +++ b/media/uikit-v2/js/core/smooth-scroll.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; @@ -8,12 +8,12 @@ boot: function() { // init code - UI.$html.on("click.smooth-scroll.uikit", "[data-uk-smooth-scroll]", function(e) { + UI.$html.on('click.smooth-scroll.uikit', '[data-uk-smooth-scroll]', function(e) { var ele = UI.$(this); - if (!ele.data("smoothScroll")) { - var obj = UI.smoothScroll(ele, UI.Utils.options(ele.attr("data-uk-smooth-scroll"))); - ele.trigger("click"); + if (!ele.data('smoothScroll')) { + var obj = UI.smoothScroll(ele, UI.Utils.options(ele.attr('data-uk-smooth-scroll'))); + ele.trigger('click'); } return false; @@ -24,9 +24,9 @@ var $this = this; - this.on("click", function(e) { + this.on('click', function(e) { e.preventDefault(); - scrollToElement(UI.$(this.hash).length ? UI.$(this.hash) : UI.$("body"), $this.options); + scrollToElement(UI.$(this.hash).length ? UI.$(this.hash) : UI.$('body'), $this.options); }); } }); @@ -50,7 +50,7 @@ } // animate to target, fire callback when done - UI.$("html,body").stop().animate({scrollTop: target}, options.duration, options.transition).promise().done(options.complete); + UI.$('html,body').stop().animate({scrollTop: target}, options.duration, options.transition).promise().done(options.complete); } UI.Utils.scrollToElement = scrollToElement; @@ -59,4 +59,4 @@ UI.$.easing.easeOutExpo = function(x, t, b, c, d) { return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; }; } -})(UIkit); +})(UIkit2); diff --git a/media/uikit/js/core/smooth-scroll.min.js b/media/uikit-v2/js/core/smooth-scroll.min.js similarity index 89% rename from media/uikit/js/core/smooth-scroll.min.js rename to media/uikit-v2/js/core/smooth-scroll.min.js index 0c09be5..a1c68b8 100644 --- a/media/uikit/js/core/smooth-scroll.min.js +++ b/media/uikit-v2/js/core/smooth-scroll.min.js @@ -1,2 +1,2 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";function o(o,i){i=t.$.extend({duration:1e3,transition:"easeOutExpo",offset:0,complete:function(){}},i);var n=o.offset().top-i.offset,s=t.$doc.height(),e=window.innerHeight;n+e>s&&(n=s-e),t.$("html,body").stop().animate({scrollTop:n},i.duration,i.transition).promise().done(i.complete)}t.component("smoothScroll",{boot:function(){t.$html.on("click.smooth-scroll.uikit","[data-uk-smooth-scroll]",function(){var o=t.$(this);if(!o.data("smoothScroll")){{t.smoothScroll(o,t.Utils.options(o.attr("data-uk-smooth-scroll")))}o.trigger("click")}return!1})},init:function(){var i=this;this.on("click",function(n){n.preventDefault(),o(t.$(this.hash).length?t.$(this.hash):t.$("body"),i.options)})}}),t.Utils.scrollToElement=o,t.$.easing.easeOutExpo||(t.$.easing.easeOutExpo=function(t,o,i,n,s){return o==s?i+n:n*(-Math.pow(2,-10*o/s)+1)+i})}(UIkit); \ No newline at end of file +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";function o(o,i){i=t.$.extend({duration:1e3,transition:"easeOutExpo",offset:0,complete:function(){}},i);var n=o.offset().top-i.offset,s=t.$doc.height(),e=window.innerHeight;n+e>s&&(n=s-e),t.$("html,body").stop().animate({scrollTop:n},i.duration,i.transition).promise().done(i.complete)}t.component("smoothScroll",{boot:function(){t.$html.on("click.smooth-scroll.uikit","[data-uk-smooth-scroll]",function(){var o=t.$(this);if(!o.data("smoothScroll")){{t.smoothScroll(o,t.Utils.options(o.attr("data-uk-smooth-scroll")))}o.trigger("click")}return!1})},init:function(){var i=this;this.on("click",function(n){n.preventDefault(),o(t.$(this.hash).length?t.$(this.hash):t.$("body"),i.options)})}}),t.Utils.scrollToElement=o,t.$.easing.easeOutExpo||(t.$.easing.easeOutExpo=function(t,o,i,n,s){return o==s?i+n:n*(-Math.pow(2,-10*o/s)+1)+i})}(UIkit2); \ No newline at end of file diff --git a/media/uikit/js/core/switcher.js b/media/uikit-v2/js/core/switcher.js similarity index 70% rename from media/uikit/js/core/switcher.js rename to media/uikit-v2/js/core/switcher.js index 4d4cfcb..89ebbfd 100644 --- a/media/uikit/js/core/switcher.js +++ b/media/uikit-v2/js/core/switcher.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; @@ -9,10 +9,11 @@ defaults: { connect : false, - toggle : ">*", + toggle : '>*', active : 0, animation : false, - duration : 200 + duration : 200, + swiping : true }, animating: false, @@ -22,11 +23,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-switcher]", context).each(function() { + UI.$('[data-uk-switcher]', context).each(function() { var switcher = UI.$(this); - if (!switcher.data("switcher")) { - var obj = UI.switcher(switcher, UI.Utils.options(switcher.attr("data-uk-switcher"))); + if (!switcher.data('switcher')) { + var obj = UI.switcher(switcher, UI.Utils.options(switcher.attr('data-uk-switcher'))); } }); }); @@ -36,69 +37,72 @@ var $this = this; - this.on("click.uikit.switcher", this.options.toggle, function(e) { + this.on('click.uk.switcher', this.options.toggle, function(e) { e.preventDefault(); $this.show(this); }); - if (this.options.connect) { + if (!this.options.connect) { + return; + } - this.connect = UI.$(this.options.connect); + this.connect = UI.$(this.options.connect); - this.connect.find(".uk-active").removeClass(".uk-active"); + if (!this.connect.length) { + return; + } - // delegate switch commands within container content - if (this.connect.length) { + this.connect.on('click.uk.switcher', '[data-uk-switcher-item]', function(e) { - // Init ARIA for connect - this.connect.children().attr('aria-hidden', 'true'); + e.preventDefault(); - this.connect.on("click", '[data-uk-switcher-item]', function(e) { + var item = UI.$(this).attr('data-uk-switcher-item'); - e.preventDefault(); + if ($this.index == item) return; - var item = UI.$(this).attr('data-uk-switcher-item'); - - if ($this.index == item) return; - - switch(item) { - case 'next': - case 'previous': - $this.show($this.index + (item=='next' ? 1:-1)); - break; - default: - $this.show(parseInt(item, 10)); - } - }).on('swipeRight swipeLeft', function(e) { - e.preventDefault(); - if(!window.getSelection().toString()) { - $this.show($this.index + (e.type == 'swipeLeft' ? 1 : -1)); - } - }); + switch(item) { + case 'next': + case 'previous': + $this.show($this.index + (item=='next' ? 1:-1)); + break; + default: + $this.show(parseInt(item, 10)); } + }); - var toggles = this.find(this.options.toggle), - active = toggles.filter(".uk-active"); + if (this.options.swiping) { - if (active.length) { - this.show(active, false); - } else { - - if (this.options.active===false) return; - - active = toggles.eq(this.options.active); - this.show(active.length ? active : toggles.eq(0), false); - } - - // Init ARIA for toggles - toggles.not(active).attr('aria-expanded', 'false'); - active.attr('aria-expanded', 'true'); - - this.on('changed.uk.dom', function() { - $this.connect = UI.$($this.options.connect); + this.connect.on('swipeRight swipeLeft', function(e) { + e.preventDefault(); + if (!window.getSelection().toString()) { + $this.show($this.index + (e.type == 'swipeLeft' ? 1 : -1)); + } }); } + this.update(); + }, + + update: function() { + + this.connect.children().removeClass('uk-active').attr('aria-hidden', 'true'); + + var toggles = this.find(this.options.toggle), + active = toggles.filter('.uk-active'); + + if (active.length) { + this.show(active, false); + } else { + + if (this.options.active===false) return; + + active = toggles.eq(this.options.active); + this.show(active.length ? active : toggles.eq(0), false); + } + + // Init ARIA for toggles + toggles.not(active).attr('aria-expanded', 'false'); + active.attr('aria-expanded', 'true'); }, show: function(tab, animate) { @@ -107,18 +111,16 @@ return; } + var toggles = this.find(this.options.toggle); + if (isNaN(tab)) { tab = UI.$(tab); } else { - - var toggles = this.find(this.options.toggle); - tab = tab < 0 ? toggles.length-1 : tab; tab = toggles.eq(toggles[tab] ? tab : 0); } var $this = this, - toggles = this.find(this.options.toggle), active = UI.$(tab), animation = Animations[this.options.animation] || function(current, next) { @@ -180,6 +182,7 @@ UI.Utils.checkDisplay(next, true); $this.animating = false; + }); }); } @@ -262,16 +265,22 @@ clsOut = cls[1] || cls[0]; } + UI.$body.css('overflow-x', 'hidden'); // fix scroll jumping in iOS + release = function() { if (current) current.hide().removeClass('uk-active '+clsOut+' uk-animation-reverse'); next.addClass(clsIn).one(UI.support.animation.end, function() { - next.removeClass(''+clsIn+'').css({opacity:'', display:''}); + setTimeout(function () { + next.removeClass(''+clsIn+'').css({opacity:'', display:''}); + }, 0); d.resolve(); + UI.$body.css('overflow-x', ''); + if (current) current.css({opacity:'', display:''}); }.bind(this)).show(); @@ -295,4 +304,4 @@ return d.promise(); } -})(UIkit); +})(UIkit2); diff --git a/media/uikit-v2/js/core/switcher.min.js b/media/uikit-v2/js/core/switcher.min.js new file mode 100644 index 0000000..65a3f04 --- /dev/null +++ b/media/uikit-v2/js/core/switcher.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";function i(i,n,e){var s,a=t.$.Deferred(),o=i,r=i;return e[0]===n[0]?(a.resolve(),a.promise()):("object"==typeof i&&(o=i[0],r=i[1]||i[0]),t.$body.css("overflow-x","hidden"),s=function(){n&&n.hide().removeClass("uk-active "+r+" uk-animation-reverse"),e.addClass(o).one(t.support.animation.end,function(){setTimeout(function(){e.removeClass(""+o).css({opacity:"",display:""})},0),a.resolve(),t.$body.css("overflow-x",""),n&&n.css({opacity:"",display:""})}.bind(this)).show()},e.css("animation-duration",this.options.duration+"ms"),n&&n.length?(n.css("animation-duration",this.options.duration+"ms"),n.css("display","none").addClass(r+" uk-animation-reverse").one(t.support.animation.end,function(){s()}.bind(this)).css("display","")):(e.addClass("uk-active"),s()),a.promise())}var n;t.component("switcher",{defaults:{connect:!1,toggle:">*",active:0,animation:!1,duration:200,swiping:!0},animating:!1,boot:function(){t.ready(function(i){t.$("[data-uk-switcher]",i).each(function(){var i=t.$(this);if(!i.data("switcher")){t.switcher(i,t.Utils.options(i.attr("data-uk-switcher")))}})})},init:function(){var i=this;this.on("click.uk.switcher",this.options.toggle,function(t){t.preventDefault(),i.show(this)}),this.options.connect&&(this.connect=t.$(this.options.connect),this.connect.length&&(this.connect.on("click.uk.switcher","[data-uk-switcher-item]",function(n){n.preventDefault();var e=t.$(this).attr("data-uk-switcher-item");if(i.index!=e)switch(e){case"next":case"previous":i.show(i.index+("next"==e?1:-1));break;default:i.show(parseInt(e,10))}}),this.options.swiping&&this.connect.on("swipeRight swipeLeft",function(t){t.preventDefault(),window.getSelection().toString()||i.show(i.index+("swipeLeft"==t.type?1:-1))}),this.update()))},update:function(){this.connect.children().removeClass("uk-active").attr("aria-hidden","true");var t=this.find(this.options.toggle),i=t.filter(".uk-active");if(i.length)this.show(i,!1);else{if(this.options.active===!1)return;i=t.eq(this.options.active),this.show(i.length?i:t.eq(0),!1)}t.not(i).attr("aria-expanded","false"),i.attr("aria-expanded","true")},show:function(e,s){if(!this.animating){var a=this.find(this.options.toggle);isNaN(e)?e=t.$(e):(e=0>e?a.length-1:e,e=a.eq(a[e]?e:0));var o=this,r=t.$(e),c=n[this.options.animation]||function(t,e){if(!o.options.animation)return n.none.apply(o);var s=o.options.animation.split(",");return 1==s.length&&(s[1]=s[0]),s[0]=s[0].trim(),s[1]=s[1].trim(),i.apply(o,[s,t,e])};s!==!1&&t.support.animation||(c=n.none),r.hasClass("uk-disabled")||(a.attr("aria-expanded","false"),r.attr("aria-expanded","true"),a.filter(".uk-active").removeClass("uk-active"),r.addClass("uk-active"),this.options.connect&&this.connect.length&&(this.index=this.find(this.options.toggle).index(r),-1==this.index&&(this.index=0),this.connect.each(function(){var i=t.$(this),n=t.$(i.children()),e=t.$(n.filter(".uk-active")),s=t.$(n.eq(o.index));o.animating=!0,c.apply(o,[e,s]).then(function(){e.removeClass("uk-active"),s.addClass("uk-active"),e.attr("aria-hidden","true"),s.attr("aria-hidden","false"),t.Utils.checkDisplay(s,!0),o.animating=!1})})),this.trigger("show.uk.switcher",[r]))}}}),n={none:function(){var i=t.$.Deferred();return i.resolve(),i.promise()},fade:function(t,n){return i.apply(this,["uk-animation-fade",t,n])},"slide-bottom":function(t,n){return i.apply(this,["uk-animation-slide-bottom",t,n])},"slide-top":function(t,n){return i.apply(this,["uk-animation-slide-top",t,n])},"slide-vertical":function(t,n){var e=["uk-animation-slide-top","uk-animation-slide-bottom"];return t&&t.index()>n.index()&&e.reverse(),i.apply(this,[e,t,n])},"slide-left":function(t,n){return i.apply(this,["uk-animation-slide-left",t,n])},"slide-right":function(t,n){return i.apply(this,["uk-animation-slide-right",t,n])},"slide-horizontal":function(t,n){var e=["uk-animation-slide-right","uk-animation-slide-left"];return t&&t.index()>n.index()&&e.reverse(),i.apply(this,[e,t,n])},scale:function(t,n){return i.apply(this,["uk-animation-scale-up",t,n])}},t.switcher.animations=n}(UIkit2); \ No newline at end of file diff --git a/media/uikit/js/core/tab.js b/media/uikit-v2/js/core/tab.js similarity index 71% rename from media/uikit/js/core/tab.js rename to media/uikit-v2/js/core/tab.js index 6040e7f..b1882d2 100644 --- a/media/uikit/js/core/tab.js +++ b/media/uikit-v2/js/core/tab.js @@ -1,4 +1,4 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; @@ -6,11 +6,12 @@ UI.component('tab', { defaults: { - 'target' : '>li:not(.uk-tab-responsive, .uk-disabled)', - 'connect' : false, - 'active' : 0, - 'animation' : false, - 'duration' : 200 + target : '>li:not(.uk-tab-responsive, .uk-disabled)', + connect : false, + active : 0, + animation : false, + duration : 200, + swiping : true }, boot: function() { @@ -18,12 +19,12 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-tab]", context).each(function() { + UI.$('[data-uk-tab]', context).each(function() { var tab = UI.$(this); - if (!tab.data("tab")) { - var obj = UI.tab(tab, UI.Utils.options(tab.attr("data-uk-tab"))); + if (!tab.data('tab')) { + var obj = UI.tab(tab, UI.Utils.options(tab.attr('data-uk-tab'))); } }); }); @@ -35,7 +36,7 @@ this.current = false; - this.on("click.uikit.tab", this.options.target, function(e) { + this.on('click.uk.tab', this.options.target, function(e) { e.preventDefault(); @@ -45,9 +46,9 @@ var current = $this.find($this.options.target).not(this); - current.removeClass("uk-active").blur(); + current.removeClass('uk-active').blur(); - $this.trigger("change.uk.tab", [UI.$(this).addClass("uk-active"), $this.current]); + $this.trigger('change.uk.tab', [UI.$(this).addClass('uk-active'), $this.current]); $this.current = UI.$(this); @@ -69,10 +70,10 @@ this.responsivetab.lst = this.responsivetab.dropdown.find('ul'); this.responsivetab.caption = this.responsivetab.find('a:first'); - if (this.element.hasClass("uk-tab-bottom")) this.responsivetab.dropdown.addClass("uk-dropdown-up"); + if (this.element.hasClass('uk-tab-bottom')) this.responsivetab.dropdown.addClass('uk-dropdown-up'); // handle click - this.responsivetab.lst.on('click.uikit.tab', 'a', function(e) { + this.responsivetab.lst.on('click.uk.tab', 'a', function(e) { e.preventDefault(); e.stopPropagation(); @@ -90,28 +91,30 @@ // init UIkit components if (this.options.connect) { + this.switcher = UI.switcher(this.element, { - "toggle" : ">li:not(.uk-tab-responsive)", - "connect" : this.options.connect, - "active" : this.options.active, - "animation" : this.options.animation, - "duration" : this.options.duration + toggle : '>li:not(.uk-tab-responsive)', + connect : this.options.connect, + active : this.options.active, + animation : this.options.animation, + duration : this.options.duration, + swiping : this.options.swiping }); } - UI.dropdown(this.responsivetab, {"mode": "click"}); + UI.dropdown(this.responsivetab, {mode: 'click', preventflip: 'y'}); // init - $this.trigger("change.uk.tab", [this.element.find(this.options.target).not('.uk-tab-responsive').filter('.uk-active')]); + $this.trigger('change.uk.tab', [this.element.find(this.options.target).not('.uk-tab-responsive').filter('.uk-active')]); this.check(); UI.$win.on('resize orientationchange', UI.Utils.debounce(function(){ - if ($this.element.is(":visible")) $this.check(); + if ($this.element.is(':visible')) $this.check(); }, 100)); this.on('display.uk.check', function(){ - if ($this.element.is(":visible")) $this.check(); + if ($this.element.is(':visible')) $this.check(); }); }, @@ -148,7 +151,8 @@ if (!item.hasClass('uk-disabled')) { - clone = item[0].outerHTML.replace('li:not(.uk-tab-responsive, .uk-disabled)",connect:!1,active:0,animation:!1,duration:200,swiping:!0},boot:function(){t.ready(function(i){t.$("[data-uk-tab]",i).each(function(){var i=t.$(this);if(!i.data("tab")){t.tab(i,t.Utils.options(i.attr("data-uk-tab")))}})})},init:function(){var i=this;this.current=!1,this.on("click.uk.tab",this.options.target,function(e){if(e.preventDefault(),!i.switcher||!i.switcher.animating){var n=i.find(i.options.target).not(this);n.removeClass("uk-active").blur(),i.trigger("change.uk.tab",[t.$(this).addClass("uk-active"),i.current]),i.current=t.$(this),i.options.connect||(n.attr("aria-expanded","false"),t.$(this).attr("aria-expanded","true"))}}),this.options.connect&&(this.connect=t.$(this.options.connect)),this.responsivetab=t.$('
      • ').append('
          '),this.responsivetab.dropdown=this.responsivetab.find(".uk-dropdown"),this.responsivetab.lst=this.responsivetab.dropdown.find("ul"),this.responsivetab.caption=this.responsivetab.find("a:first"),this.element.hasClass("uk-tab-bottom")&&this.responsivetab.dropdown.addClass("uk-dropdown-up"),this.responsivetab.lst.on("click.uk.tab","a",function(e){e.preventDefault(),e.stopPropagation();var n=t.$(this);i.element.children("li:not(.uk-tab-responsive)").eq(n.data("index")).trigger("click")}),this.on("show.uk.switcher change.uk.tab",function(t,e){i.responsivetab.caption.html(e.text())}),this.element.append(this.responsivetab),this.options.connect&&(this.switcher=t.switcher(this.element,{toggle:">li:not(.uk-tab-responsive)",connect:this.options.connect,active:this.options.active,animation:this.options.animation,duration:this.options.duration,swiping:this.options.swiping})),t.dropdown(this.responsivetab,{mode:"click",preventflip:"y"}),i.trigger("change.uk.tab",[this.element.find(this.options.target).not(".uk-tab-responsive").filter(".uk-active")]),this.check(),t.$win.on("resize orientationchange",t.Utils.debounce(function(){i.element.is(":visible")&&i.check()},100)),this.on("display.uk.check",function(){i.element.is(":visible")&&i.check()})},check:function(){var i=this.element.children("li:not(.uk-tab-responsive)").removeClass("uk-hidden");if(!i.length)return this.responsivetab.addClass("uk-hidden"),void 0;var e,n,s,a=i.eq(0).offset().top+Math.ceil(i.eq(0).height()/2),o=!1;if(this.responsivetab.lst.empty(),i.each(function(){t.$(this).offset().top>a&&(o=!0)}),o)for(var r=0;r 0 // IE 10 + || navigator.pointerEnabled && navigator.maxTouchPoints > 0; // IE >=11 function swipeDirection(x1, x2, y1, y2) { return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down'); @@ -19,7 +25,7 @@ function longTap() { longTapTimeout = null; if (touch.last) { - touch.el.trigger('longTap'); + if ( touch.el !== undefined ) touch.el.trigger('longTap'); touch = {}; } } @@ -55,7 +61,7 @@ var swipeDirectionFromVelocity = e.originalEvent.velocityX > 1 ? 'Right' : e.originalEvent.velocityX < -1 ? 'Left' : e.originalEvent.velocityY > 1 ? 'Down' : e.originalEvent.velocityY < -1 ? 'Up' : null; - if (swipeDirectionFromVelocity) { + if (swipeDirectionFromVelocity && touch.el !== undefined) { touch.el.trigger('swipe'); touch.el.trigger('swipe'+ swipeDirectionFromVelocity); } @@ -83,7 +89,7 @@ longTapTimeout = setTimeout(longTap, longTapDelay); // adds the current touch contact for IE gesture recognition - if (gesture && ( e.type == 'MSPointerDown' || e.type == 'pointerdown' || e.type == 'touchstart' ) ) { + if (e.originalEvent && e.originalEvent.pointerId && gesture && ( e.type == 'MSPointerDown' || e.type == 'pointerdown' || e.type == 'touchstart' ) ) { gesture.addPointer(e.originalEvent.pointerId); } @@ -115,8 +121,10 @@ if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) || (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30)){ swipeTimeout = setTimeout(function() { - touch.el.trigger('swipe'); - touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2))); + if ( touch.el !== undefined ) { + touch.el.trigger('swipe'); + touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2))); + } touch = {}; }, 0); @@ -134,11 +142,11 @@ // (cancelTouch cancels processing of single vs double taps for faster 'tap' response) var event = $.Event('tap'); event.cancelTouch = cancelAll; - touch.el.trigger(event); + if ( touch.el !== undefined ) touch.el.trigger(event); // trigger double tap immediately if (touch.isDoubleTap) { - touch.el.trigger('doubleTap'); + if ( touch.el !== undefined ) touch.el.trigger('doubleTap'); touch = {}; } @@ -146,7 +154,7 @@ else { touchTimeout = setTimeout(function(){ touchTimeout = null; - touch.el.trigger('singleTap'); + if ( touch.el !== undefined ) touch.el.trigger('singleTap'); touch = {}; }, 250); } @@ -160,7 +168,14 @@ // when the browser window loses focus, // for example when a modal dialog is shown, // cancel all ongoing events - .on('touchcancel MSPointerCancel', cancelAll); + .on('touchcancel MSPointerCancel pointercancel', function(e){ + + // Ignore pointercancel if the event supports touch events, to prevent pointercancel in swipe gesture + if ((e.type == 'touchcancel' && hasTouchEvents && hasTouch) || (!hasTouchEvents && e.type == 'pointercancel' && hasPointerEvents)) { + cancelAll(); + } + + }); // scrolling the window indicates intention of the user // to scroll, not tap or swipe, so cancel all ongoing events diff --git a/media/uikit-v2/js/core/touch.min.js b/media/uikit-v2/js/core/touch.min.js new file mode 100644 index 0000000..0a14a1a --- /dev/null +++ b/media/uikit-v2/js/core/touch.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(e){function t(e,t,n,o){return Math.abs(e-t)>=Math.abs(n-o)?e-t>0?"Left":"Right":n-o>0?"Up":"Down"}function n(){c=null,g.last&&(void 0!==g.el&&g.el.trigger("longTap"),g={})}function o(){c&&clearTimeout(c),c=null}function i(){a&&clearTimeout(a),l&&clearTimeout(l),u&&clearTimeout(u),c&&clearTimeout(c),a=l=u=c=null,g={}}function r(e){return e.pointerType==e.MSPOINTER_TYPE_TOUCH&&e.isPrimary}if(!e.fn.swipeLeft){var a,l,u,c,p,g={},s=750,v="ontouchstart"in window,w=window.PointerEvent,d=v||window.DocumentTouch&&document instanceof DocumentTouch||navigator.msPointerEnabled&&navigator.msMaxTouchPoints>0||navigator.pointerEnabled&&navigator.maxTouchPoints>0;e(function(){var y,T,f,h=0,M=0;"MSGesture"in window&&(p=new MSGesture,p.target=document.body),e(document).on("MSGestureEnd gestureend",function(e){var t=e.originalEvent.velocityX>1?"Right":e.originalEvent.velocityX<-1?"Left":e.originalEvent.velocityY>1?"Down":e.originalEvent.velocityY<-1?"Up":null;t&&void 0!==g.el&&(g.el.trigger("swipe"),g.el.trigger("swipe"+t))}).on("touchstart MSPointerDown pointerdown",function(t){("MSPointerDown"!=t.type||r(t.originalEvent))&&(f="MSPointerDown"==t.type||"pointerdown"==t.type?t:t.originalEvent.touches[0],y=Date.now(),T=y-(g.last||y),g.el=e("tagName"in f.target?f.target:f.target.parentNode),a&&clearTimeout(a),g.x1=f.pageX,g.y1=f.pageY,T>0&&250>=T&&(g.isDoubleTap=!0),g.last=y,c=setTimeout(n,s),t.originalEvent&&t.originalEvent.pointerId&&p&&("MSPointerDown"==t.type||"pointerdown"==t.type||"touchstart"==t.type)&&p.addPointer(t.originalEvent.pointerId))}).on("touchmove MSPointerMove pointermove",function(e){("MSPointerMove"!=e.type||r(e.originalEvent))&&(f="MSPointerMove"==e.type||"pointermove"==e.type?e:e.originalEvent.touches[0],o(),g.x2=f.pageX,g.y2=f.pageY,h+=Math.abs(g.x1-g.x2),M+=Math.abs(g.y1-g.y2))}).on("touchend MSPointerUp pointerup",function(n){("MSPointerUp"!=n.type||r(n.originalEvent))&&(o(),g.x2&&Math.abs(g.x1-g.x2)>30||g.y2&&Math.abs(g.y1-g.y2)>30?u=setTimeout(function(){void 0!==g.el&&(g.el.trigger("swipe"),g.el.trigger("swipe"+t(g.x1,g.x2,g.y1,g.y2))),g={}},0):"last"in g&&(isNaN(h)||30>h&&30>M?l=setTimeout(function(){var t=e.Event("tap");t.cancelTouch=i,void 0!==g.el&&g.el.trigger(t),g.isDoubleTap?(void 0!==g.el&&g.el.trigger("doubleTap"),g={}):a=setTimeout(function(){a=null,void 0!==g.el&&g.el.trigger("singleTap"),g={}},250)},0):g={},h=M=0))}).on("touchcancel MSPointerCancel pointercancel",function(e){("touchcancel"==e.type&&v&&d||!v&&"pointercancel"==e.type&&w)&&i()}),e(window).on("scroll",i)}),["swipe","swipeLeft","swipeRight","swipeUp","swipeDown","doubleTap","tap","singleTap","longTap"].forEach(function(t){e.fn[t]=function(n){return e(this).on(t,n)}})}}(jQuery); \ No newline at end of file diff --git a/media/uikit-v2/js/core/utility.js b/media/uikit-v2/js/core/utility.js new file mode 100644 index 0000000..c5ad005 --- /dev/null +++ b/media/uikit-v2/js/core/utility.js @@ -0,0 +1,335 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +(function(UI) { + + "use strict"; + + var stacks = []; + + UI.component('stackMargin', { + + defaults: { + cls: 'uk-margin-small-top', + rowfirst: false, + observe: false + }, + + boot: function() { + + // init code + UI.ready(function(context) { + + UI.$('[data-uk-margin]', context).each(function() { + + var ele = UI.$(this); + + if (!ele.data('stackMargin')) { + UI.stackMargin(ele, UI.Utils.options(ele.attr('data-uk-margin'))); + } + }); + }); + }, + + init: function() { + + var $this = this; + + UI.$win.on('resize orientationchange', (function() { + + var fn = function() { + $this.process(); + }; + + UI.$(function() { + fn(); + UI.$win.on('load', fn); + }); + + return UI.Utils.debounce(fn, 20); + })()); + + this.on('display.uk.check', function(e) { + if (this.element.is(':visible')) this.process(); + }.bind(this)); + + if (this.options.observe) { + + UI.domObserve(this.element, function(e) { + if ($this.element.is(':visible')) $this.process(); + }); + } + + stacks.push(this); + }, + + process: function() { + + var $this = this, columns = this.element.children(); + + UI.Utils.stackMargin(columns, this.options); + + if (!this.options.rowfirst || !columns.length) { + return this; + } + + // Mark first column elements + var group = {}, minleft = false; + + columns.removeClass(this.options.rowfirst).each(function(offset, $ele){ + + $ele = UI.$(this); + + if (this.style.display != 'none') { + offset = $ele.offset().left; + ((group[offset] = group[offset] || []) && group[offset]).push(this); + minleft = minleft === false ? offset : Math.min(minleft, offset); + } + }); + + UI.$(group[minleft]).addClass(this.options.rowfirst); + + return this; + } + + }); + + + // responsive element e.g. iframes + + (function(){ + + var elements = [], check = function(ele) { + + if (!ele.is(':visible')) return; + + var width = ele.parent().width(), + iwidth = ele.data('width'), + ratio = (width / iwidth), + height = Math.floor(ratio * ele.data('height')); + + ele.css({height: (width < iwidth) ? height : ele.data('height')}); + }; + + UI.component('responsiveElement', { + + defaults: {}, + + boot: function() { + + // init code + UI.ready(function(context) { + + UI.$('iframe.uk-responsive-width, [data-uk-responsive]', context).each(function() { + + var ele = UI.$(this), obj; + + if (!ele.data('responsiveElement')) { + obj = UI.responsiveElement(ele, {}); + } + }); + }); + }, + + init: function() { + + var ele = this.element; + + if (ele.attr('width') && ele.attr('height')) { + + ele.data({ + width : ele.attr('width'), + height: ele.attr('height') + }).on('display.uk.check', function(){ + check(ele); + }); + + check(ele); + + elements.push(ele); + } + } + }); + + UI.$win.on('resize load', UI.Utils.debounce(function(){ + + elements.forEach(function(ele){ + check(ele); + }); + + }, 15)); + + })(); + + + // helper + + UI.Utils.stackMargin = function(elements, options) { + + options = UI.$.extend({ + cls: 'uk-margin-small-top' + }, options); + + elements = UI.$(elements).removeClass(options.cls); + + var min = false; + + elements.each(function(offset, height, pos, $ele){ + + $ele = UI.$(this); + + if ($ele.css('display') != 'none') { + + offset = $ele.offset(); + height = $ele.outerHeight(); + pos = offset.top + height; + + $ele.data({ + ukMarginPos: pos, + ukMarginTop: offset.top + }); + + if (min === false || (offset.top < min.top) ) { + + min = { + top : offset.top, + left : offset.left, + pos : pos + }; + } + } + + }).each(function($ele) { + + $ele = UI.$(this); + + if ($ele.css('display') != 'none' && $ele.data('ukMarginTop') > min.top && $ele.data('ukMarginPos') > min.pos) { + $ele.addClass(options.cls); + } + }); + }; + + UI.Utils.matchHeights = function(elements, options) { + + elements = UI.$(elements).css('min-height', ''); + options = UI.$.extend({ row : true }, options); + + var matchHeights = function(group){ + + if (group.length < 2) return; + + var max = 0; + + group.each(function() { + max = Math.max(max, UI.$(this).outerHeight()); + }).each(function() { + + var element = UI.$(this), + height = max - (element.css('box-sizing') == 'border-box' ? 0 : (element.outerHeight() - element.height())); + + element.css('min-height', height + 'px'); + }); + }; + + if (options.row) { + + elements.first().width(); // force redraw + + setTimeout(function(){ + + var lastoffset = false, group = []; + + elements.each(function() { + + var ele = UI.$(this), offset = ele.offset().top; + + if (offset != lastoffset && group.length) { + + matchHeights(UI.$(group)); + group = []; + offset = ele.offset().top; + } + + group.push(ele); + lastoffset = offset; + }); + + if (group.length) { + matchHeights(UI.$(group)); + } + + }, 0); + + } else { + matchHeights(elements); + } + }; + + (function(cacheSvgs){ + + UI.Utils.inlineSvg = function(selector, root) { + + var images = UI.$(selector || 'img[src$=".svg"]', root || document).each(function(){ + + var img = UI.$(this), + src = img.attr('src'); + + if (!cacheSvgs[src]) { + + var d = UI.$.Deferred(); + + UI.$.get(src, {nc: Math.random()}, function(data){ + d.resolve(UI.$(data).find('svg')); + }); + + cacheSvgs[src] = d.promise(); + } + + cacheSvgs[src].then(function(svg) { + + var $svg = UI.$(svg).clone(); + + if (img.attr('id')) $svg.attr('id', img.attr('id')); + if (img.attr('class')) $svg.attr('class', img.attr('class')); + if (img.attr('style')) $svg.attr('style', img.attr('style')); + + if (img.attr('width')) { + $svg.attr('width', img.attr('width')); + if (!img.attr('height')) $svg.removeAttr('height'); + } + + if (img.attr('height')){ + $svg.attr('height', img.attr('height')); + if (!img.attr('width')) $svg.removeAttr('width'); + } + + img.replaceWith($svg); + }); + }); + }; + + // init code + UI.ready(function(context) { + UI.Utils.inlineSvg('[data-uk-svg]', context); + }); + + })({}); + + UI.Utils.getCssVar = function(name) { + + /* usage in css: .var-name:before { content:"xyz" } */ + + var val, doc = document.documentElement, element = doc.appendChild(document.createElement('div')); + + element.classList.add('var-'+name); + + try { + val = JSON.parse(val = getComputedStyle(element, ':before').content.replace(/^["'](.*)["']$/, '$1')); + } catch (e) { + val = undefined; + } + + doc.removeChild(element); + + return val; + } + +})(UIkit2); diff --git a/media/uikit-v2/js/core/utility.min.js b/media/uikit-v2/js/core/utility.min.js new file mode 100644 index 0000000..8bf56e3 --- /dev/null +++ b/media/uikit-v2/js/core/utility.min.js @@ -0,0 +1,2 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){"use strict";var i=[];t.component("stackMargin",{defaults:{cls:"uk-margin-small-top",rowfirst:!1,observe:!1},boot:function(){t.ready(function(i){t.$("[data-uk-margin]",i).each(function(){var i=t.$(this);i.data("stackMargin")||t.stackMargin(i,t.Utils.options(i.attr("data-uk-margin")))})})},init:function(){var e=this;t.$win.on("resize orientationchange",function(){var i=function(){e.process()};return t.$(function(){i(),t.$win.on("load",i)}),t.Utils.debounce(i,20)}()),this.on("display.uk.check",function(){this.element.is(":visible")&&this.process()}.bind(this)),this.options.observe&&t.domObserve(this.element,function(){e.element.is(":visible")&&e.process()}),i.push(this)},process:function(){var i=this.element.children();if(t.Utils.stackMargin(i,this.options),!this.options.rowfirst||!i.length)return this;var e={},n=!1;return i.removeClass(this.options.rowfirst).each(function(i,s){s=t.$(this),"none"!=this.style.display&&(i=s.offset().left,((e[i]=e[i]||[])&&e[i]).push(this),n=n===!1?i:Math.min(n,i))}),t.$(e[n]).addClass(this.options.rowfirst),this}}),function(){var i=[],e=function(t){if(t.is(":visible")){var i=t.parent().width(),e=t.data("width"),n=i/e,s=Math.floor(n*t.data("height"));t.css({height:e>i?s:t.data("height")})}};t.component("responsiveElement",{defaults:{},boot:function(){t.ready(function(i){t.$("iframe.uk-responsive-width, [data-uk-responsive]",i).each(function(){var i,e=t.$(this);e.data("responsiveElement")||(i=t.responsiveElement(e,{}))})})},init:function(){var t=this.element;t.attr("width")&&t.attr("height")&&(t.data({width:t.attr("width"),height:t.attr("height")}).on("display.uk.check",function(){e(t)}),e(t),i.push(t))}}),t.$win.on("resize load",t.Utils.debounce(function(){i.forEach(function(t){e(t)})},15))}(),t.Utils.stackMargin=function(i,e){e=t.$.extend({cls:"uk-margin-small-top"},e),i=t.$(i).removeClass(e.cls);var n=!1;i.each(function(i,e,s,a){a=t.$(this),"none"!=a.css("display")&&(i=a.offset(),e=a.outerHeight(),s=i.top+e,a.data({ukMarginPos:s,ukMarginTop:i.top}),(n===!1||i.topn.top&&i.data("ukMarginPos")>n.pos&&i.addClass(e.cls)})},t.Utils.matchHeights=function(i,e){i=t.$(i).css("min-height",""),e=t.$.extend({row:!0},e);var n=function(i){if(!(i.length<2)){var e=0;i.each(function(){e=Math.max(e,t.$(this).outerHeight())}).each(function(){var i=t.$(this),n=e-("border-box"==i.css("box-sizing")?0:i.outerHeight()-i.height());i.css("min-height",n+"px")})}};e.row?(i.first().width(),setTimeout(function(){var e=!1,s=[];i.each(function(){var i=t.$(this),a=i.offset().top;a!=e&&s.length&&(n(t.$(s)),s=[],a=i.offset().top),s.push(i),e=a}),s.length&&n(t.$(s))},0)):n(i)},function(i){t.Utils.inlineSvg=function(e,n){t.$(e||'img[src$=".svg"]',n||document).each(function(){var e=t.$(this),n=e.attr("src");if(!i[n]){var s=t.$.Deferred();t.$.get(n,{nc:Math.random()},function(i){s.resolve(t.$(i).find("svg"))}),i[n]=s.promise()}i[n].then(function(i){var n=t.$(i).clone();e.attr("id")&&n.attr("id",e.attr("id")),e.attr("class")&&n.attr("class",e.attr("class")),e.attr("style")&&n.attr("style",e.attr("style")),e.attr("width")&&(n.attr("width",e.attr("width")),e.attr("height")||n.removeAttr("height")),e.attr("height")&&(n.attr("height",e.attr("height")),e.attr("width")||n.removeAttr("width")),e.replaceWith(n)})})},t.ready(function(i){t.Utils.inlineSvg("[data-uk-svg]",i)})}({}),t.Utils.getCssVar=function(t){var i,e=document.documentElement,n=e.appendChild(document.createElement("div"));n.classList.add("var-"+t);try{i=JSON.parse(i=getComputedStyle(n,":before").content.replace(/^["'](.*)["']$/,"$1"))}catch(s){i=void 0}return e.removeChild(n),i}}(UIkit2); \ No newline at end of file diff --git a/media/uikit-v2/js/index.html b/media/uikit-v2/js/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/media/uikit-v2/js/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/uikit/js/uikit.js b/media/uikit-v2/js/uikit.js similarity index 59% rename from media/uikit/js/uikit.js rename to media/uikit-v2/js/uikit.js index bce6f80..873edf1 100644 --- a/media/uikit/js/uikit.js +++ b/media/uikit-v2/js/uikit.js @@ -1,18 +1,24 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(core) { - if (typeof define == "function" && define.amd) { // AMD + var uikit; - define("uikit", function(){ + if (!window.jQuery) { + throw new Error('UIkit 2.x requires jQuery'); + } else { + uikit = core(window.jQuery); + } - var uikit = window.UIkit || core(window, window.jQuery, window.document); + if (typeof define == 'function' && define.amd) { // AMD + + define('uikit', function(){ uikit.load = function(res, req, onload, config) { - var resources = res.split(','), load = [], i, base = (config.config && config.config.uikit && config.config.uikit.base ? config.config.uikit.base : "").replace(/\/+$/g, ""); + var resources = res.split(','), load = [], i, base = (config.config && config.config.uikit && config.config.uikit.base ? config.config.uikit.base : '').replace(/\/+$/g, ''); if (!base) { - throw new Error( "Please define base path to UIkit in the requirejs config." ); + throw new Error('Please define base path to UIkit in the requirejs config.'); } for (i = 0; i < resources.length; i += 1) { @@ -29,27 +35,22 @@ }); } - if (!window.jQuery) { - throw new Error( "UIkit requires jQuery" ); - } - - if (window && window.jQuery) { - core(window, window.jQuery, window.document); - } - - -})(function(global, $, doc) { +})(function($) { "use strict"; - var UI = {}, _UI = global.UIkit ? Object.create(global.UIkit) : undefined; + if (window.UIkit2) { + return window.UIkit2; + } - UI.version = '2.21.0'; + var UI = {}, _UI = window.UIkit || undefined; + + UI.version = '2.27.4'; UI.noConflict = function() { // restore UIkit version if (_UI) { - global.UIkit = _UI; + window.UIkit = _UI; $.UIkit = _UI; $.fn.uk = _UI.fn; } @@ -57,9 +58,11 @@ return UI; }; - UI.prefix = function(str) { - return str; - }; + window.UIkit2 = UI; + + if (!_UI) { + window.UIkit = UI; + } // cache jQuery UI.$ = $; @@ -73,7 +76,7 @@ var transitionEnd = (function() { - var element = doc.body || doc.documentElement, + var element = document.body || document.documentElement, transEndEventNames = { WebkitTransition : 'webkitTransitionEnd', MozTransition : 'transitionend', @@ -93,7 +96,7 @@ var animationEnd = (function() { - var element = doc.body || doc.documentElement, + var element = document.body || document.documentElement, animEndEventNames = { WebkitAnimation : 'webkitAnimationEnd', MozAnimation : 'animationend', @@ -110,42 +113,45 @@ })(); // requestAnimationFrame polyfill - // https://gist.github.com/paulirish/1579671 - (function(){ + //https://github.com/darius/requestAnimationFrame + (function() { - var lastTime = 0; + Date.now = Date.now || function() { return new Date().getTime(); }; - global.requestAnimationFrame = global.requestAnimationFrame || global.webkitRequestAnimationFrame || function(callback, element) { - var currTime = new Date().getTime(); - var timeToCall = Math.max(0, 16 - (currTime - lastTime)); - var id = global.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); - lastTime = currTime + timeToCall; - return id; - }; - - if (!global.cancelAnimationFrame) { - - global.cancelAnimationFrame = function(id) { - clearTimeout(id); - }; + var vendors = ['webkit', 'moz']; + for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { + var vp = vendors[i]; + window.requestAnimationFrame = window[vp+'RequestAnimationFrame']; + window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame'] + || window[vp+'CancelRequestAnimationFrame']); } - - })(); + if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) // iOS6 is buggy + || !window.requestAnimationFrame || !window.cancelAnimationFrame) { + var lastTime = 0; + window.requestAnimationFrame = function(callback) { + var now = Date.now(); + var nextTime = Math.max(lastTime + 16, now); + return setTimeout(function() { callback(lastTime = nextTime); }, + nextTime - now); + }; + window.cancelAnimationFrame = clearTimeout; + } + }()); UI.support.touch = ( ('ontouchstart' in document) || - (global.DocumentTouch && document instanceof global.DocumentTouch) || - (global.navigator.msPointerEnabled && global.navigator.msMaxTouchPoints > 0) || //IE 10 - (global.navigator.pointerEnabled && global.navigator.maxTouchPoints > 0) || //IE >=11 + (window.DocumentTouch && document instanceof window.DocumentTouch) || + (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 0) || //IE 10 + (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 0) || //IE >=11 false ); - UI.support.mutationobserver = (global.MutationObserver || global.WebKitMutationObserver || null); + UI.support.mutationobserver = (window.MutationObserver || window.WebKitMutationObserver || null); UI.Utils = {}; UI.Utils.isFullscreen = function() { - return document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || document.fullscreenElement || false; + return document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || document.fullscreenElement || false; }; UI.Utils.str2json = function(str, notevil) { @@ -158,7 +164,7 @@ .replace(/'([^']+)'/g, function(_, $1){return '"'+$1+'"';}) ); } else { - return (new Function("", "var json = " + str + "; return JSON.parse(JSON.stringify(json));"))(); + return (new Function('', 'var json = ' + str + '; return JSON.parse(JSON.stringify(json));'))(); } } catch(e) { return false; } }; @@ -178,6 +184,19 @@ }; }; + UI.Utils.throttle = function (func, limit) { + var wait = false; + return function () { + if (!wait) { + func.call(); + wait = true; + setTimeout(function () { + wait = false; + }, limit); + } + } + }; + UI.Utils.removeCssRules = function(selectorRegEx) { var idx, idxs, stylesheet, _i, _j, _k, _len, _len1, _len2, _ref; @@ -244,7 +263,7 @@ var ele = UI.$(this), cls = ele.attr('class'), - anim = cls.match(/uk\-animation\-(.+)/); + anim = cls.match(/uk-animation-(.+)/); ele.removeClass(anim[0]).width(); @@ -257,7 +276,11 @@ UI.Utils.options = function(string) { - if ($.isPlainObject(string)) return string; + if ($.type(string)!='string') return string; + + if (string.indexOf(':') != -1 && string.trim().substr(-1) != '}') { + string = '{'+string+'}'; + } var start = (string ? string.indexOf("{") : -1), options = {}; @@ -275,12 +298,11 @@ var d = $.Deferred(); element = UI.$(element); - cls = cls; element.css('display', 'none').addClass(cls).one(UI.support.animation.end, function() { element.removeClass(cls); d.resolve(); - }).width(); + }); element.css('display', ''); @@ -308,30 +330,30 @@ switch(cmd) { case '~': - output.push("for(var $i=0;$i<"+prop+".length;$i++) { var $item = "+prop+"[$i];"); + output.push('for(var $i=0;$i<'+prop+'.length;$i++) { var $item = '+prop+'[$i];'); openblocks++; break; case ':': - output.push("for(var $key in "+prop+") { var $val = "+prop+"[$key];"); + output.push('for(var $key in '+prop+') { var $val = '+prop+'[$key];'); openblocks++; break; case '#': - output.push("if("+prop+") {"); + output.push('if('+prop+') {'); openblocks++; break; case '^': - output.push("if(!"+prop+") {"); + output.push('if(!'+prop+') {'); openblocks++; break; case '/': - output.push("}"); + output.push('}'); openblocks--; break; case '!': - output.push("__ret.push("+prop+");"); + output.push('__ret.push('+prop+');'); break; default: - output.push("__ret.push(escape("+prop+"));"); + output.push('__ret.push(escape('+prop+'));'); break; } } else { @@ -352,11 +374,43 @@ return data ? fn(data) : fn; }; + UI.Utils.focus = function(element, extra) { + + element = $(element); + + if (!element.length) { + return element; + } + + var autofocus = element.find('[autofocus]:first'), tabidx; + + if (autofocus.length) { + return autofocus.focus(); + } + + autofocus = element.find(':input'+(extra && (','+extra) || '')).first(); + + if (autofocus.length) { + return autofocus.focus(); + } + + if (!element.attr('tabindex')) { + tabidx = 1000; + element.attr('tabindex', tabidx); + } + + element[0].focus(); + + if (tabidx) { + element.attr('tabindex', ''); + } + + return element; + } + UI.Utils.events = {}; UI.Utils.events.click = UI.support.touch ? 'tap' : 'click'; - global.UIkit = UI; - // deprecated UI.fn = function(command, options) { @@ -364,7 +418,7 @@ var args = arguments, cmd = command.match(/^([a-z\-]+)(?:\.([a-z]+))?/i), component = cmd[1], method = cmd[2]; if (!UI[component]) { - $.error("UIkit component [" + component + "] does not exist."); + $.error('UIkit component [' + component + '] does not exist.'); return this; } @@ -382,7 +436,11 @@ UI.components = {}; - UI.component = function(name, def) { + UI.component = function(name, def, override) { + + if (UI.components[name] && !override) { + return UI.components[name]; + } var fn = function(element, options) { @@ -482,7 +540,7 @@ switch(arguments.length) { case 1: - if (typeof arguments[0] === "string" || arguments[0].nodeType || arguments[0] instanceof jQuery) { + if (typeof arguments[0] === 'string' || arguments[0].nodeType || arguments[0] instanceof jQuery) { element = $(arguments[0]); } else { options = arguments[0]; @@ -586,9 +644,9 @@ try { var observer = new UI.support.mutationobserver(UI.Utils.debounce(function(mutations) { - fn.apply(element, []); + fn.apply(element, [$element]); $element.trigger('changed.uk.dom'); - }, 50)); + }, 50), {childList: true, subtree: true}); // pass in the target node, as well as the observer options observer.observe(element, { childList: true, subtree: true }); @@ -615,100 +673,145 @@ if (UI.domready) UI.Utils.checkDisplay(); }); - $(function(){ + document.addEventListener('DOMContentLoaded', function(){ - UI.$body = UI.$('body'); + var domReady = function() { - UI.ready(function(context){ - UI.domObserve('[data-uk-observe]'); - }); + UI.$body = UI.$('body'); - UI.on('changed.uk.dom', function(e) { - UI.init(e.target); - UI.Utils.checkDisplay(e.target); - }); + UI.trigger('beforeready.uk.dom'); - UI.trigger('beforeready.uk.dom'); + UI.component.bootComponents(); - UI.component.bootComponents(); + // custom scroll observer + var rafToken = requestAnimationFrame((function(){ - // custom scroll observer - setInterval((function(){ + var memory = {dir: {x:0, y:0}, x: window.pageXOffset, y:window.pageYOffset}; - var memory = {x: window.pageXOffset, y:window.pageYOffset}, dir; + var fn = function(){ + // reading this (window.page[X|Y]Offset) causes a full page recalc of the layout in Chrome, + // so we only want to do this once + var wpxo = window.pageXOffset; + var wpyo = window.pageYOffset; - var fn = function(){ + // Did the scroll position change since the last time we were here? + if (memory.x != wpxo || memory.y != wpyo) { - if (memory.x != window.pageXOffset || memory.y != window.pageYOffset) { + // Set the direction of the scroll and store the new position + if (wpxo != memory.x) {memory.dir.x = wpxo > memory.x ? 1:-1; } else { memory.dir.x = 0; } + if (wpyo != memory.y) {memory.dir.y = wpyo > memory.y ? 1:-1; } else { memory.dir.y = 0; } - dir = {x: 0 , y: 0}; + memory.x = wpxo; + memory.y = wpyo; - if (window.pageXOffset != memory.x) dir.x = window.pageXOffset > memory.x ? 1:-1; - if (window.pageYOffset != memory.y) dir.y = window.pageYOffset > memory.y ? 1:-1; + // Trigger the scroll event, this could probably be sent using memory.clone() but this is + // more explicit and easier to see exactly what is being sent in the event. + UI.$doc.trigger('scrolling.uk.document', [{ + dir: {x: memory.dir.x, y: memory.dir.y}, x: wpxo, y: wpyo + }]); + } - memory = { - "dir": dir, "x": window.pageXOffset, "y": window.pageYOffset - }; + cancelAnimationFrame(rafToken); + rafToken = requestAnimationFrame(fn); + }; - UI.$doc.trigger('scrolling.uk.document', [memory]); + if (UI.support.touch) { + UI.$html.on('touchmove touchend MSPointerMove MSPointerUp pointermove pointerup', fn); } - }; + + if (memory.x || memory.y) fn(); + + return fn; + + })()); + + // run component init functions on dom + UI.trigger('domready.uk.dom'); if (UI.support.touch) { - UI.$html.on('touchmove touchend MSPointerMove MSPointerUp pointermove pointerup', fn); + + // remove css hover rules for touch devices + // UI.Utils.removeCssRules(/\.uk-(?!navbar).*:hover/); + + // viewport unit fix for uk-height-viewport - should be fixed in iOS 8 + if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) { + + UI.$win.on('load orientationchange resize', UI.Utils.debounce((function(){ + + var fn = function() { + $('.uk-height-viewport').css('height', window.innerHeight); + return fn; + }; + + return fn(); + + })(), 100)); + } } - if (memory.x || memory.y) fn(); + UI.trigger('afterready.uk.dom'); - return fn; + // mark that domready is left behind + UI.domready = true; - })(), 15); + // auto init js components + if (UI.support.mutationobserver) { - // run component init functions on dom - UI.trigger('domready.uk.dom'); + var initFn = UI.Utils.debounce(function(){ + requestAnimationFrame(function(){ UI.init(document.body);}); + }, 10); - if (UI.support.touch) { + (new UI.support.mutationobserver(function(mutations) { - // remove css hover rules for touch devices - // UI.Utils.removeCssRules(/\.uk-(?!navbar).*:hover/); + var init = false; - // viewport unit fix for uk-height-viewport - should be fixed in iOS 8 - if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) { + mutations.every(function(mutation){ - UI.$win.on('load orientationchange resize', UI.Utils.debounce((function(){ + if (mutation.type != 'childList') return true; - var fn = function() { - $('.uk-height-viewport').css('height', window.innerHeight); - return fn; - }; + for (var i = 0, node; i < mutation.addedNodes.length; ++i) { - return fn(); + node = mutation.addedNodes[i]; - })(), 100)); + if (node.outerHTML && node.outerHTML.indexOf('data-uk-') !== -1) { + return (init = true) && false; + } + } + return true; + }); + + if (init) initFn(); + + })).observe(document.body, {childList: true, subtree: true}); } + }; + + if (document.readyState == 'complete' || document.readyState == 'interactive') { + setTimeout(domReady); } - UI.trigger('afterready.uk.dom'); + return domReady; - // mark that domready is left behind - UI.domready = true; - }); + }()); // add touch identifier class - UI.$html.addClass(UI.support.touch ? "uk-touch" : "uk-notouch"); + UI.$html.addClass(UI.support.touch ? 'uk-touch' : 'uk-notouch'); // add uk-hover class on tap to support overlays on touch devices if (UI.support.touch) { - var hoverset = false, exclude, hovercls = 'uk-hover', selector = '.uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover'; + var hoverset = false, + exclude, + hovercls = 'uk-hover', + selector = '.uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover'; - UI.$html.on('touchstart MSPointerDown pointerdown', selector, function() { + UI.$html.on('mouseenter touchstart MSPointerDown pointerdown', selector, function() { if (hoverset) $('.'+hovercls).removeClass(hovercls); hoverset = $(this).addClass(hovercls); - }).on('touchend MSPointerUp pointerup', function(e) { + }).on('mouseleave touchend MSPointerUp pointerup', function(e) { exclude = $(e.target).parents(selector); @@ -733,6 +836,12 @@ var touch = {}, touchTimeout, tapTimeout, swipeTimeout, longTapTimeout, longTapDelay = 750, gesture; + var hasTouchEvents = 'ontouchstart' in window, + hasPointerEvents = window.PointerEvent, + hasTouch = hasTouchEvents + || window.DocumentTouch && document instanceof DocumentTouch + || navigator.msPointerEnabled && navigator.msMaxTouchPoints > 0 // IE 10 + || navigator.pointerEnabled && navigator.maxTouchPoints > 0; // IE >=11 function swipeDirection(x1, x2, y1, y2) { return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down'); @@ -741,7 +850,7 @@ function longTap() { longTapTimeout = null; if (touch.last) { - touch.el.trigger('longTap'); + if ( touch.el !== undefined ) touch.el.trigger('longTap'); touch = {}; } } @@ -777,7 +886,7 @@ var swipeDirectionFromVelocity = e.originalEvent.velocityX > 1 ? 'Right' : e.originalEvent.velocityX < -1 ? 'Left' : e.originalEvent.velocityY > 1 ? 'Down' : e.originalEvent.velocityY < -1 ? 'Up' : null; - if (swipeDirectionFromVelocity) { + if (swipeDirectionFromVelocity && touch.el !== undefined) { touch.el.trigger('swipe'); touch.el.trigger('swipe'+ swipeDirectionFromVelocity); } @@ -805,7 +914,7 @@ longTapTimeout = setTimeout(longTap, longTapDelay); // adds the current touch contact for IE gesture recognition - if (gesture && ( e.type == 'MSPointerDown' || e.type == 'pointerdown' || e.type == 'touchstart' ) ) { + if (e.originalEvent && e.originalEvent.pointerId && gesture && ( e.type == 'MSPointerDown' || e.type == 'pointerdown' || e.type == 'touchstart' ) ) { gesture.addPointer(e.originalEvent.pointerId); } @@ -837,8 +946,10 @@ if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) || (touch.y2 && Math.abs(touch.y1 - touch.y2) > 30)){ swipeTimeout = setTimeout(function() { - touch.el.trigger('swipe'); - touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2))); + if ( touch.el !== undefined ) { + touch.el.trigger('swipe'); + touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2))); + } touch = {}; }, 0); @@ -856,11 +967,11 @@ // (cancelTouch cancels processing of single vs double taps for faster 'tap' response) var event = $.Event('tap'); event.cancelTouch = cancelAll; - touch.el.trigger(event); + if ( touch.el !== undefined ) touch.el.trigger(event); // trigger double tap immediately if (touch.isDoubleTap) { - touch.el.trigger('doubleTap'); + if ( touch.el !== undefined ) touch.el.trigger('doubleTap'); touch = {}; } @@ -868,7 +979,7 @@ else { touchTimeout = setTimeout(function(){ touchTimeout = null; - touch.el.trigger('singleTap'); + if ( touch.el !== undefined ) touch.el.trigger('singleTap'); touch = {}; }, 250); } @@ -882,7 +993,14 @@ // when the browser window loses focus, // for example when a modal dialog is shown, // cancel all ongoing events - .on('touchcancel MSPointerCancel', cancelAll); + .on('touchcancel MSPointerCancel pointercancel', function(e){ + + // Ignore pointercancel if the event supports touch events, to prevent pointercancel in swipe gesture + if ((e.type == 'touchcancel' && hasTouchEvents && hasTouch) || (!hasTouchEvents && e.type == 'pointercancel' && hasPointerEvents)) { + cancelAll(); + } + + }); // scrolling the window indicates intention of the user // to scroll, not tap or swipe, so cancel all ongoing events @@ -903,7 +1021,9 @@ UI.component('stackMargin', { defaults: { - 'cls': 'uk-margin-small-top' + cls: 'uk-margin-small-top', + rowfirst: false, + observe: false }, boot: function() { @@ -911,12 +1031,12 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-margin]", context).each(function() { + UI.$('[data-uk-margin]', context).each(function() { - var ele = UI.$(this), obj; + var ele = UI.$(this); - if (!ele.data("stackMargin")) { - obj = UI.stackMargin(ele, UI.Utils.options(ele.attr("data-uk-margin"))); + if (!ele.data('stackMargin')) { + UI.stackMargin(ele, UI.Utils.options(ele.attr('data-uk-margin'))); } }); }); @@ -926,10 +1046,6 @@ var $this = this; - this.columns = this.element.children(); - - if (!this.columns.length) return; - UI.$win.on('resize orientationchange', (function() { var fn = function() { @@ -938,38 +1054,55 @@ UI.$(function() { fn(); - UI.$win.on("load", fn); + UI.$win.on('load', fn); }); return UI.Utils.debounce(fn, 20); })()); - UI.$html.on("changed.uk.dom", function(e) { - $this.columns = $this.element.children(); - $this.process(); - }); - - this.on("display.uk.check", function(e) { - $this.columns = $this.element.children(); - if (this.element.is(":visible")) this.process(); + this.on('display.uk.check', function(e) { + if (this.element.is(':visible')) this.process(); }.bind(this)); + if (this.options.observe) { + + UI.domObserve(this.element, function(e) { + if ($this.element.is(':visible')) $this.process(); + }); + } + stacks.push(this); }, process: function() { - var $this = this; + var $this = this, columns = this.element.children(); - UI.Utils.stackMargin(this.columns, this.options); + UI.Utils.stackMargin(columns, this.options); - return this; - }, + if (!this.options.rowfirst || !columns.length) { + return this; + } + + // Mark first column elements + var group = {}, minleft = false; + + columns.removeClass(this.options.rowfirst).each(function(offset, $ele){ + + $ele = UI.$(this); + + if (this.style.display != 'none') { + offset = $ele.offset().left; + ((group[offset] = group[offset] || []) && group[offset]).push(this); + minleft = minleft === false ? offset : Math.min(minleft, offset); + } + }); + + UI.$(group[minleft]).addClass(this.options.rowfirst); - revert: function() { - this.columns.removeClass(this.options.cls); return this; } + }); @@ -986,7 +1119,7 @@ ratio = (width / iwidth), height = Math.floor(ratio * ele.data('height')); - ele.css({'height': (width < iwidth) ? height : ele.data('height')}); + ele.css({height: (width < iwidth) ? height : ele.data('height')}); }; UI.component('responsiveElement', { @@ -998,11 +1131,11 @@ // init code UI.ready(function(context) { - UI.$("iframe.uk-responsive-width, [data-uk-responsive]", context).each(function() { + UI.$('iframe.uk-responsive-width, [data-uk-responsive]', context).each(function() { var ele = UI.$(this), obj; - if (!ele.data("responsiveIframe")) { + if (!ele.data('responsiveElement')) { obj = UI.responsiveElement(ele, {}); } }); @@ -1016,10 +1149,8 @@ if (ele.attr('width') && ele.attr('height')) { ele.data({ - - 'width' : ele.attr('width'), - 'height': ele.attr('height') - + width : ele.attr('width'), + height: ele.attr('height') }).on('display.uk.check', function(){ check(ele); }); @@ -1042,40 +1173,50 @@ })(); - // helper UI.Utils.stackMargin = function(elements, options) { options = UI.$.extend({ - 'cls': 'uk-margin-small-top' + cls: 'uk-margin-small-top' }, options); - options.cls = options.cls; - elements = UI.$(elements).removeClass(options.cls); - var skip = false, - firstvisible = elements.filter(":visible:first"), - offset = firstvisible.length ? (firstvisible.position().top + firstvisible.outerHeight()) - 1 : false; // (-1): weird firefox bug when parent container is display:flex + var min = false; - if (offset === false) return; + elements.each(function(offset, height, pos, $ele){ - elements.each(function() { + $ele = UI.$(this); - var column = UI.$(this); + if ($ele.css('display') != 'none') { - if (column.is(":visible")) { + offset = $ele.offset(); + height = $ele.outerHeight(); + pos = offset.top + height; - if (skip) { - column.addClass(options.cls); - } else { + $ele.data({ + ukMarginPos: pos, + ukMarginTop: offset.top + }); - if (column.position().top >= offset) { - skip = column.addClass(options.cls); - } + if (min === false || (offset.top < min.top) ) { + + min = { + top : offset.top, + left : offset.left, + pos : pos + }; } } + + }).each(function($ele) { + + $ele = UI.$(this); + + if ($ele.css('display') != 'none' && $ele.data('ukMarginTop') > min.top && $ele.data('ukMarginPos') > min.pos) { + $ele.addClass(options.cls); + } }); }; @@ -1135,7 +1276,76 @@ } }; -})(UIkit); + (function(cacheSvgs){ + + UI.Utils.inlineSvg = function(selector, root) { + + var images = UI.$(selector || 'img[src$=".svg"]', root || document).each(function(){ + + var img = UI.$(this), + src = img.attr('src'); + + if (!cacheSvgs[src]) { + + var d = UI.$.Deferred(); + + UI.$.get(src, {nc: Math.random()}, function(data){ + d.resolve(UI.$(data).find('svg')); + }); + + cacheSvgs[src] = d.promise(); + } + + cacheSvgs[src].then(function(svg) { + + var $svg = UI.$(svg).clone(); + + if (img.attr('id')) $svg.attr('id', img.attr('id')); + if (img.attr('class')) $svg.attr('class', img.attr('class')); + if (img.attr('style')) $svg.attr('style', img.attr('style')); + + if (img.attr('width')) { + $svg.attr('width', img.attr('width')); + if (!img.attr('height')) $svg.removeAttr('height'); + } + + if (img.attr('height')){ + $svg.attr('height', img.attr('height')); + if (!img.attr('width')) $svg.removeAttr('width'); + } + + img.replaceWith($svg); + }); + }); + }; + + // init code + UI.ready(function(context) { + UI.Utils.inlineSvg('[data-uk-svg]', context); + }); + + })({}); + + UI.Utils.getCssVar = function(name) { + + /* usage in css: .var-name:before { content:"xyz" } */ + + var val, doc = document.documentElement, element = doc.appendChild(document.createElement('div')); + + element.classList.add('var-'+name); + + try { + val = JSON.parse(val = getComputedStyle(element, ':before').content.replace(/^["'](.*)["']$/, '$1')); + } catch (e) { + val = undefined; + } + + doc.removeChild(element); + + return val; + } + +})(UIkit2); (function(UI) { @@ -1146,12 +1356,12 @@ boot: function() { // init code - UI.$html.on("click.smooth-scroll.uikit", "[data-uk-smooth-scroll]", function(e) { + UI.$html.on('click.smooth-scroll.uikit', '[data-uk-smooth-scroll]', function(e) { var ele = UI.$(this); - if (!ele.data("smoothScroll")) { - var obj = UI.smoothScroll(ele, UI.Utils.options(ele.attr("data-uk-smooth-scroll"))); - ele.trigger("click"); + if (!ele.data('smoothScroll')) { + var obj = UI.smoothScroll(ele, UI.Utils.options(ele.attr('data-uk-smooth-scroll'))); + ele.trigger('click'); } return false; @@ -1162,9 +1372,9 @@ var $this = this; - this.on("click", function(e) { + this.on('click', function(e) { e.preventDefault(); - scrollToElement(UI.$(this.hash).length ? UI.$(this.hash) : UI.$("body"), $this.options); + scrollToElement(UI.$(this.hash).length ? UI.$(this.hash) : UI.$('body'), $this.options); }); } }); @@ -1188,7 +1398,7 @@ } // animate to target, fire callback when done - UI.$("html,body").stop().animate({scrollTop: target}, options.duration, options.transition).promise().done(options.complete); + UI.$('html,body').stop().animate({scrollTop: target}, options.duration, options.transition).promise().done(options.complete); } UI.Utils.scrollToElement = scrollToElement; @@ -1197,7 +1407,7 @@ UI.$.easing.easeOutExpo = function(x, t, b, c, d) { return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; }; } -})(UIkit); +})(UIkit2); (function(UI) { @@ -1215,30 +1425,30 @@ UI.component('scrollspy', { defaults: { - "target" : false, - "cls" : "uk-scrollspy-inview", - "initcls" : "uk-scrollspy-init-inview", - "topoffset" : 0, - "leftoffset" : 0, - "repeat" : false, - "delay" : 0 + target : false, + cls : 'uk-scrollspy-inview', + initcls : 'uk-scrollspy-init-inview', + topoffset : 0, + leftoffset : 0, + repeat : false, + delay : 0 }, boot: function() { // listen to scroll and resize - $doc.on("scrolling.uk.document", checkScrollSpy); - $win.on("load resize orientationchange", UI.Utils.debounce(checkScrollSpy, 50)); + $doc.on('scrolling.uk.document', checkScrollSpy); + $win.on('load resize orientationchange', UI.Utils.debounce(checkScrollSpy, 50)); // init code UI.ready(function(context) { - UI.$("[data-uk-scrollspy]", context).each(function() { + UI.$('[data-uk-scrollspy]', context).each(function() { var element = UI.$(this); - if (!element.data("scrollspy")) { - var obj = UI.scrollspy(element, UI.Utils.options(element.attr("data-uk-scrollspy"))); + if (!element.data('scrollspy')) { + var obj = UI.scrollspy(element, UI.Utils.options(element.attr('data-uk-scrollspy'))); } }); }); @@ -1257,7 +1467,7 @@ var element = UI.$(this), inviewstate = element.data('inviewstate'), inview = UI.Utils.isInView(element, $this.options), - toggle = element.data('ukScrollspyCls') || togglecls[toggleclsIdx].trim(); + toggle = element.attr('data-uk-scrollspy-cls') || togglecls[toggleclsIdx].trim(); if (inview && !inviewstate && !element.data('scrollspy-idle')) { @@ -1266,13 +1476,13 @@ $this.offset = element.offset(); initinview = true; - element.trigger("init.uk.scrollspy"); + element.trigger('init.uk.scrollspy'); } element.data('scrollspy-idle', setTimeout(function(){ - element.addClass("uk-scrollspy-inview").toggleClass(toggle).width(); - element.trigger("inview.uk.scrollspy"); + element.addClass('uk-scrollspy-inview').toggleClass(toggle).width(); + element.trigger('inview.uk.scrollspy'); element.data('scrollspy-idle', false); element.data('inviewstate', true); @@ -1286,12 +1496,13 @@ if (element.data('scrollspy-idle')) { clearTimeout(element.data('scrollspy-idle')); + element.data('scrollspy-idle', false); } - element.removeClass("uk-scrollspy-inview").toggleClass(toggle); + element.removeClass('uk-scrollspy-inview').toggleClass(toggle); element.data('inviewstate', false); - element.trigger("outview.uk.scrollspy"); + element.trigger('outview.uk.scrollspy'); } toggleclsIdx = togglecls[toggleclsIdx + 1] ? (toggleclsIdx + 1) : 0; @@ -1318,28 +1529,28 @@ UI.component('scrollspynav', { defaults: { - "cls" : 'uk-active', - "closest" : false, - "topoffset" : 0, - "leftoffset" : 0, - "smoothscroll" : false + cls : 'uk-active', + closest : false, + topoffset : 0, + leftoffset : 0, + smoothscroll : false }, boot: function() { // listen to scroll and resize - $doc.on("scrolling.uk.document", checkScrollSpyNavs); - $win.on("resize orientationchange", UI.Utils.debounce(checkScrollSpyNavs, 50)); + $doc.on('scrolling.uk.document', checkScrollSpyNavs); + $win.on('resize orientationchange', UI.Utils.debounce(checkScrollSpyNavs, 50)); // init code UI.ready(function(context) { - UI.$("[data-uk-scrollspy-nav]", context).each(function() { + UI.$('[data-uk-scrollspy-nav]', context).each(function() { var element = UI.$(this); - if (!element.data("scrollspynav")) { - var obj = UI.scrollspynav(element, UI.Utils.options(element.attr("data-uk-scrollspy-nav"))); + if (!element.data('scrollspynav')) { + var obj = UI.scrollspynav(element, UI.Utils.options(element.attr('data-uk-scrollspy-nav'))); } }); }); @@ -1348,7 +1559,7 @@ init: function() { var ids = [], - links = this.find("a[href^='#']").each(function(){ ids.push(UI.$(this).attr("href")); }), + links = this.find("a[href^='#']").each(function(){ if(this.getAttribute('href').trim()!=='#') ids.push(this.getAttribute('href')); }), targets = UI.$(ids.join(",")), clsActive = this.options.cls, @@ -1370,7 +1581,7 @@ scrollTop = $win.scrollTop(), target = (function(){ for(var i=0; i< inviews.length;i++){ - if(inviews[i].offset().top >= scrollTop){ + if (inviews[i].offset().top - $this.options.topoffset >= scrollTop){ return inviews[i]; } } @@ -1379,13 +1590,13 @@ if (!target) return; if ($this.options.closest) { - links.closest(clsClosest).removeClass(clsActive); - navitems = links.filter("a[href='#"+target.attr("id")+"']").closest(clsClosest).addClass(clsActive); + links.blur().closest(clsClosest).removeClass(clsActive); + navitems = links.filter("a[href='#"+target.attr('id')+"']").closest(clsClosest).addClass(clsActive); } else { navitems = links.removeClass(clsActive).filter("a[href='#"+target.attr("id")+"']").addClass(clsActive); } - $this.element.trigger("inview.uk.scrollspynav", [target, navitems]); + $this.element.trigger('inview.uk.scrollspynav', [target, navitems]); } }; @@ -1397,7 +1608,7 @@ fn(); - this.element.data("scrollspynav", this); + this.element.data('scrollspynav', this); this.check = fn; scrollspynavs.push(this); @@ -1405,7 +1616,7 @@ } }); -})(UIkit); +})(UIkit2); (function(UI){ @@ -1427,11 +1638,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-toggle]", context).each(function() { + UI.$('[data-uk-toggle]', context).each(function() { var ele = UI.$(this); - if (!ele.data("toggle")) { - var obj = UI.toggle(ele, UI.Utils.options(ele.attr("data-uk-toggle"))); + if (!ele.data('toggle')) { + var obj = UI.toggle(ele, UI.Utils.options(ele.attr('data-uk-toggle'))); } }); @@ -1451,10 +1662,12 @@ this.aria = (this.options.cls.indexOf('uk-hidden') !== -1); - this.getToggles(); + this.on('click', function(e) { + + if ($this.element.is('a[href="#"]')) { + e.preventDefault(); + } - this.on("click", function(e) { - if ($this.element.is('a[href="#"]')) e.preventDefault(); $this.toggle(); }); @@ -1463,6 +1676,8 @@ toggle: function() { + this.getToggles(); + if(!this.totoggle.length) return; if (this.options.animation && UI.support.animation) { @@ -1478,26 +1693,29 @@ this.totoggle.css('animation-duration', this.options.duration+'ms'); - if (this.totoggle.hasClass(this.options.cls)) { + this.totoggle.each(function(){ - this.totoggle.toggleClass(this.options.cls); + var ele = UI.$(this); - this.totoggle.each(function(){ - UI.Utils.animate(this, animations[0]).then(function(){ - UI.$(this).css('animation-duration', ''); - UI.Utils.checkDisplay(this); + if (ele.hasClass($this.options.cls)) { + + ele.toggleClass($this.options.cls); + + UI.Utils.animate(ele, animations[0]).then(function(){ + ele.css('animation-duration', ''); + UI.Utils.checkDisplay(ele); }); - }); - } else { + } else { - this.totoggle.each(function(){ UI.Utils.animate(this, animations[1]+' uk-animation-reverse').then(function(){ - UI.$(this).toggleClass($this.options.cls).css('animation-duration', ''); - UI.Utils.checkDisplay(this); - }.bind(this)); - }); - } + ele.toggleClass($this.options.cls).css('animation-duration', ''); + UI.Utils.checkDisplay(ele); + }); + + } + + }); } else { this.totoggle.toggleClass(this.options.cls); @@ -1515,14 +1733,14 @@ updateAria: function() { if (this.aria && this.totoggle.length) { - this.totoggle.each(function(){ + this.totoggle.not('[aria-hidden]').each(function(){ UI.$(this).attr('aria-hidden', UI.$(this).hasClass('uk-hidden')); }); } } }); -})(UIkit); +})(UIkit2); (function(UI) { @@ -1531,21 +1749,21 @@ UI.component('alert', { defaults: { - "fade": true, - "duration": 200, - "trigger": ".uk-alert-close" + fade: true, + duration: 200, + trigger: '.uk-alert-close' }, boot: function() { // init code - UI.$html.on("click.alert.uikit", "[data-uk-alert]", function(e) { + UI.$html.on('click.alert.uikit', '[data-uk-alert]', function(e) { var ele = UI.$(this); - if (!ele.data("alert")) { + if (!ele.data('alert')) { - var alert = UI.alert(ele, UI.Utils.options(ele.attr("data-uk-alert"))); + var alert = UI.alert(ele, UI.Utils.options(ele.attr('data-uk-alert'))); if (UI.$(e.target).is(alert.options.trigger)) { e.preventDefault(); @@ -1559,7 +1777,7 @@ var $this = this; - this.on("click", this.options.trigger, function(e) { + this.on('click', this.options.trigger, function(e) { e.preventDefault(); $this.close(); }); @@ -1567,19 +1785,19 @@ close: function() { - var element = this.trigger("close.uk.alert"), + var element = this.trigger('close.uk.alert'), removeElement = function () { - this.trigger("closed.uk.alert").remove(); + this.trigger('closed.uk.alert').remove(); }.bind(this); if (this.options.fade) { - element.css("overflow", "hidden").css("max-height", element.height()).animate({ - "height" : 0, - "opacity" : 0, - "padding-top" : 0, - "padding-bottom" : 0, - "margin-top" : 0, - "margin-bottom" : 0 + element.css('overflow', 'hidden').css("max-height", element.height()).animate({ + height : 0, + opacity : 0, + paddingTop : 0, + paddingBottom : 0, + marginTop : 0, + marginBottom : 0 }, this.options.duration, removeElement); } else { removeElement(); @@ -1588,7 +1806,7 @@ }); -})(UIkit); +})(UIkit2); (function(UI) { @@ -1597,23 +1815,24 @@ UI.component('buttonRadio', { defaults: { - "target": ".uk-button" + activeClass: 'uk-active', + target: '.uk-button' }, boot: function() { // init code - UI.$html.on("click.buttonradio.uikit", "[data-uk-button-radio]", function(e) { + UI.$html.on('click.buttonradio.uikit', '[data-uk-button-radio]', function(e) { var ele = UI.$(this); - if (!ele.data("buttonRadio")) { + if (!ele.data('buttonRadio')) { - var obj = UI.buttonRadio(ele, UI.Utils.options(ele.attr("data-uk-button-radio"))), + var obj = UI.buttonRadio(ele, UI.Utils.options(ele.attr('data-uk-button-radio'))), target = UI.$(e.target); if (target.is(obj.options.target)) { - target.trigger("click"); + target.trigger('click'); } } }); @@ -1624,49 +1843,50 @@ var $this = this; // Init ARIA - this.find($this.options.target).attr('aria-checked', 'false').filter(".uk-active").attr('aria-checked', 'true'); + this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true'); - this.on("click", this.options.target, function(e) { + this.on('click', this.options.target, function(e) { var ele = UI.$(this); if (ele.is('a[href="#"]')) e.preventDefault(); - $this.find($this.options.target).not(ele).removeClass("uk-active").blur(); - ele.addClass("uk-active"); + $this.find($this.options.target).not(ele).removeClass($this.options.activeClass).blur(); + ele.addClass($this.options.activeClass); // Update ARIA $this.find($this.options.target).not(ele).attr('aria-checked', 'false'); ele.attr('aria-checked', 'true'); - $this.trigger("change.uk.button", [ele]); + $this.trigger('change.uk.button', [ele]); }); }, getSelected: function() { - return this.find(".uk-active"); + return this.find('.' + this.options.activeClass); } }); UI.component('buttonCheckbox', { defaults: { - "target": ".uk-button" + activeClass: 'uk-active', + target: '.uk-button' }, boot: function() { - UI.$html.on("click.buttoncheckbox.uikit", "[data-uk-button-checkbox]", function(e) { + UI.$html.on('click.buttoncheckbox.uikit', '[data-uk-button-checkbox]', function(e) { var ele = UI.$(this); - if (!ele.data("buttonCheckbox")) { + if (!ele.data('buttonCheckbox')) { - var obj = UI.buttonCheckbox(ele, UI.Utils.options(ele.attr("data-uk-button-checkbox"))), + var obj = UI.buttonCheckbox(ele, UI.Utils.options(ele.attr('data-uk-button-checkbox'))), target = UI.$(e.target); if (target.is(obj.options.target)) { - target.trigger("click"); + target.trigger('click'); } } }); @@ -1677,25 +1897,25 @@ var $this = this; // Init ARIA - this.find($this.options.target).attr('aria-checked', 'false').filter(".uk-active").attr('aria-checked', 'true'); + this.find($this.options.target).attr('aria-checked', 'false').filter('.' + $this.options.activeClass).attr('aria-checked', 'true'); - this.on("click", this.options.target, function(e) { + this.on('click', this.options.target, function(e) { var ele = UI.$(this); if (ele.is('a[href="#"]')) e.preventDefault(); - ele.toggleClass("uk-active").blur(); + ele.toggleClass($this.options.activeClass).blur(); // Update ARIA - ele.attr('aria-checked', ele.hasClass("uk-active")); + ele.attr('aria-checked', ele.hasClass($this.options.activeClass)); - $this.trigger("change.uk.button", [ele]); + $this.trigger('change.uk.button', [ele]); }); }, getSelected: function() { - return this.find(".uk-active"); + return this.find('.' + this.options.activeClass); } }); @@ -1706,13 +1926,13 @@ boot: function() { - UI.$html.on("click.button.uikit", "[data-uk-button]", function(e) { + UI.$html.on('click.button.uikit', '[data-uk-button]', function(e) { var ele = UI.$(this); - if (!ele.data("button")) { + if (!ele.data('button')) { - var obj = UI.button(ele, UI.Utils.options(ele.attr("data-uk-button"))); - ele.trigger("click"); + var obj = UI.button(ele, UI.Utils.options(ele.attr('data-uk-button'))); + ele.trigger('click'); } }); }, @@ -1724,63 +1944,110 @@ // Init ARIA this.element.attr('aria-pressed', this.element.hasClass("uk-active")); - this.on("click", function(e) { + this.on('click', function(e) { if ($this.element.is('a[href="#"]')) e.preventDefault(); $this.toggle(); - $this.trigger("change.uk.button", [$this.element.blur().hasClass("uk-active")]); + $this.trigger('change.uk.button', [$this.element.blur().hasClass('uk-active')]); }); }, toggle: function() { - this.element.toggleClass("uk-active"); + this.element.toggleClass('uk-active'); // Update ARIA - this.element.attr('aria-pressed', this.element.hasClass("uk-active")); + this.element.attr('aria-pressed', this.element.hasClass('uk-active')); } }); -})(UIkit); +})(UIkit2); (function(UI) { "use strict"; - var active = false, hoverIdle; + var active = false, hoverIdle, flips = { + x: { + 'bottom-left' : 'bottom-right', + 'bottom-right' : 'bottom-left', + 'bottom-center' : 'bottom-center', + 'top-left' : 'top-right', + 'top-right' : 'top-left', + 'top-center' : 'top-center', + 'left-top' : 'right-top', + 'left-bottom' : 'right-bottom', + 'left-center' : 'right-center', + 'right-top' : 'left-top', + 'right-bottom' : 'left-bottom', + 'right-center' : 'left-center' + }, + y: { + 'bottom-left' : 'top-left', + 'bottom-right' : 'top-right', + 'bottom-center' : 'top-center', + 'top-left' : 'bottom-left', + 'top-right' : 'bottom-right', + 'top-center' : 'bottom-center', + 'left-top' : 'left-bottom', + 'left-bottom' : 'left-top', + 'left-center' : 'left-center', + 'right-top' : 'right-bottom', + 'right-bottom' : 'right-top', + 'right-center' : 'right-center' + }, + xy: { + 'bottom-left' : 'top-right', + 'bottom-right' : 'top-left', + 'bottom-center' : 'top-center', + 'top-left' : 'bottom-right', + 'top-right' : 'bottom-left', + 'top-center' : 'bottom-center', + 'left-top' : 'right-bottom', + 'left-bottom' : 'right-top', + 'left-center' : 'right-center', + 'right-top' : 'left-bottom', + 'right-bottom' : 'left-top', + 'right-center' : 'left-center' + } + }; UI.component('dropdown', { defaults: { - 'mode' : 'hover', - 'remaintime' : 800, - 'justify' : false, - 'boundary' : UI.$win, - 'delay' : 0, - 'hoverDelayIdle' : 250 + mode : 'hover', + pos : 'bottom-left', + offset : 0, + remaintime : 800, + justify : false, + boundary : UI.$win, + delay : 0, + dropdownSelector: '.uk-dropdown,.uk-dropdown-blank', + hoverDelayIdle : 250, + preventflip : false }, remainIdle: false, boot: function() { - var triggerevent = UI.support.touch ? "click" : "mouseenter"; + var triggerevent = UI.support.touch ? 'click' : 'mouseenter'; // init code - UI.$html.on(triggerevent+".dropdown.uikit", "[data-uk-dropdown]", function(e) { + UI.$html.on(triggerevent+'.dropdown.uikit focus pointerdown', '[data-uk-dropdown]', function(e) { var ele = UI.$(this); - if (!ele.data("dropdown")) { + if (!ele.data('dropdown')) { - var dropdown = UI.dropdown(ele, UI.Utils.options(ele.attr("data-uk-dropdown"))); + var dropdown = UI.dropdown(ele, UI.Utils.options(ele.attr('data-uk-dropdown'))); - if (triggerevent=="click" || (triggerevent=="mouseenter" && dropdown.options.mode=="hover")) { + if (e.type=='click' || (e.type=='mouseenter' && dropdown.options.mode=='hover')) { dropdown.element.trigger(triggerevent); } - if (dropdown.element.find('.uk-dropdown').length) { + if (dropdown.dropdown.length) { e.preventDefault(); } } @@ -1791,31 +2058,50 @@ var $this = this; - this.dropdown = this.find('.uk-dropdown'); + this.dropdown = this.find(this.options.dropdownSelector); + this.offsetParent = this.dropdown.parents().filter(function() { + return UI.$.inArray(UI.$(this).css('position'), ['relative', 'fixed', 'absolute']) !== -1; + }).slice(0,1); + + if (!this.offsetParent.length) { + this.offsetParent = this.element; + } this.centered = this.dropdown.hasClass('uk-dropdown-center'); this.justified = this.options.justify ? UI.$(this.options.justify) : false; this.boundary = UI.$(this.options.boundary); - this.flipped = this.dropdown.hasClass('uk-dropdown-flip'); if (!this.boundary.length) { this.boundary = UI.$win; } + // legacy DEPRECATED! + if (this.dropdown.hasClass('uk-dropdown-up')) { + this.options.pos = 'top-left'; + } + if (this.dropdown.hasClass('uk-dropdown-flip')) { + this.options.pos = this.options.pos.replace('left','right'); + } + if (this.dropdown.hasClass('uk-dropdown-center')) { + this.options.pos = this.options.pos.replace(/(left|right)/,'center'); + } + //-- end legacy + // Init ARIA this.element.attr('aria-haspopup', 'true'); - this.element.attr('aria-expanded', this.element.hasClass("uk-open")); + this.element.attr('aria-expanded', this.element.hasClass('uk-open')); + this.dropdown.attr('aria-hidden', 'true'); - if (this.options.mode == "click" || UI.support.touch) { + if (this.options.mode == 'click' || UI.support.touch) { - this.on("click.uikit.dropdown", function(e) { + this.on('click.uk.dropdown', function(e) { var $target = UI.$(e.target); - if (!$target.parents(".uk-dropdown").length) { + if (!$target.parents($this.options.dropdownSelector).length) { - if ($target.is("a[href='#']") || $target.parent().is("a[href='#']") || ($this.dropdown.length && !$this.dropdown.is(":visible")) ){ + if ($target.is("a[href='#']") || $target.parent().is("a[href='#']") || ($this.dropdown.length && !$this.dropdown.is(':visible')) ){ e.preventDefault(); } @@ -1828,7 +2114,7 @@ } else { - if ($target.is("a:not(.js-uk-prevent)") || $target.is(".uk-dropdown-close") || !$this.dropdown.find(e.target).length) { + if (!$this.dropdown.find(e.target).length || $target.is('.uk-dropdown-close') || $target.parents('.uk-dropdown-close').length) { $this.hide(); } } @@ -1836,7 +2122,9 @@ } else { - this.on("mouseenter", function(e) { + this.on('mouseenter', function(e) { + + $this.trigger('pointerenter.uk.dropdown', [$this]); if ($this.remainIdle) { clearTimeout($this.remainIdle); @@ -1862,7 +2150,7 @@ hoverIdle = setTimeout($this.show.bind($this), $this.options.delay); } - }).on("mouseleave", function() { + }).on('mouseleave', function() { if (hoverIdle) { clearTimeout(hoverIdle); @@ -1872,7 +2160,9 @@ if (active && active == $this) $this.hide(); }, $this.options.remaintime); - }).on("click", function(e){ + $this.trigger('pointerleave.uk.dropdown', [$this]); + + }).on('click', function(e){ var $target = UI.$(e.target); @@ -1880,6 +2170,13 @@ clearTimeout($this.remainIdle); } + if (active && active == $this) { + if (!$this.dropdown.find(e.target).length || $target.is('.uk-dropdown-close') || $target.parents('.uk-dropdown-close').length) { + $this.hide(); + } + return; + } + if ($target.is("a[href='#']") || $target.parent().is("a[href='#']")){ e.preventDefault(); } @@ -1891,31 +2188,38 @@ show: function(){ - UI.$html.off("click.outer.dropdown"); + UI.$html.off('click.outer.dropdown'); if (active && active != this) { - active.hide(); + active.hide(true); } if (hoverIdle) { clearTimeout(hoverIdle); } + this.trigger('beforeshow.uk.dropdown', [this]); + this.checkDimensions(); this.element.addClass('uk-open'); // Update ARIA this.element.attr('aria-expanded', 'true'); + this.dropdown.attr('aria-hidden', 'false'); this.trigger('show.uk.dropdown', [this]); UI.Utils.checkDisplay(this.dropdown, true); + UI.Utils.focus(this.dropdown); active = this; this.registerOuterClick(); }, - hide: function() { + hide: function(force) { + + this.trigger('beforehide.uk.dropdown', [this, force]); + this.element.removeClass('uk-open'); if (this.remainIdle) { @@ -1926,8 +2230,9 @@ // Update ARIA this.element.attr('aria-expanded', 'false'); + this.dropdown.attr('aria-hidden', 'true'); - this.trigger('hide.uk.dropdown', [this]); + this.trigger('hide.uk.dropdown', [this, force]); if (active == this) active = false; }, @@ -1936,11 +2241,11 @@ var $this = this; - UI.$html.off("click.outer.dropdown"); + UI.$html.off('click.outer.dropdown'); setTimeout(function() { - UI.$html.on("click.outer.dropdown", function(e) { + UI.$html.on('click.outer.dropdown', function(e) { if (hoverIdle) { clearTimeout(hoverIdle); @@ -1948,9 +2253,9 @@ var $target = UI.$(e.target); - if (active == $this && ($target.is("a:not(.js-uk-prevent)") || $target.is(".uk-dropdown-close") || !$this.dropdown.find(e.target).length)) { - $this.hide(); - UI.$html.off("click.outer.dropdown"); + if (active == $this && !$this.element.find(e.target).length) { + $this.hide(true); + UI.$html.off('click.outer.dropdown'); } }); }, 10); @@ -1960,85 +2265,238 @@ if (!this.dropdown.length) return; + // reset + this.dropdown.removeClass('uk-dropdown-top uk-dropdown-bottom uk-dropdown-left uk-dropdown-right uk-dropdown-stack uk-dropdown-autoflip').css({ + topLeft :'', + left :'', + marginLeft :'', + marginRight :'' + }); + if (this.justified && this.justified.length) { - this.dropdown.css("min-width", ""); + this.dropdown.css('min-width', ''); } - var $this = this, - dropdown = this.dropdown.css("margin-" + UI.langdirection, ""), - offset = dropdown.show().offset(), - width = dropdown.outerWidth(), + var $this = this, + pos = UI.$.extend({}, this.offsetParent.offset(), {width: this.offsetParent[0].offsetWidth, height: this.offsetParent[0].offsetHeight}), + posoffset = this.options.offset, + dropdown = this.dropdown, + offset = dropdown.show().offset() || {left: 0, top: 0}, + width = dropdown.outerWidth(), + height = dropdown.outerHeight(), boundarywidth = this.boundary.width(), - boundaryoffset = this.boundary.offset() ? this.boundary.offset().left:0; + boundaryoffset = this.boundary[0] !== window && this.boundary.offset() ? this.boundary.offset(): {top:0, left:0}, + dpos = this.options.pos; - // centered dropdown - if (this.centered) { - dropdown.css("margin-" + UI.langdirection, (parseFloat(width) / 2 - dropdown.parent().width() / 2) * -1); - offset = dropdown.offset(); + var variants = { + 'bottom-left' : {top: 0 + pos.height + posoffset, left: 0}, + 'bottom-right' : {top: 0 + pos.height + posoffset, left: 0 + pos.width - width}, + 'bottom-center' : {top: 0 + pos.height + posoffset, left: 0 + pos.width / 2 - width / 2}, + 'top-left' : {top: 0 - height - posoffset, left: 0}, + 'top-right' : {top: 0 - height - posoffset, left: 0 + pos.width - width}, + 'top-center' : {top: 0 - height - posoffset, left: 0 + pos.width / 2 - width / 2}, + 'left-top' : {top: 0, left: 0 - width - posoffset}, + 'left-bottom' : {top: 0 + pos.height - height, left: 0 - width - posoffset}, + 'left-center' : {top: 0 + pos.height / 2 - height / 2, left: 0 - width - posoffset}, + 'right-top' : {top: 0, left: 0 + pos.width + posoffset}, + 'right-bottom' : {top: 0 + pos.height - height, left: 0 + pos.width + posoffset}, + 'right-center' : {top: 0 + pos.height / 2 - height / 2, left: 0 + pos.width + posoffset} + }, + css = {}, + pp; - // reset dropdown - if ((width + offset.left) > boundarywidth || offset.left < 0) { - dropdown.css("margin-" + UI.langdirection, ""); - offset = dropdown.offset(); - } - } + pp = dpos.split('-'); + css = variants[dpos] ? variants[dpos] : variants['bottom-left']; // justify dropdown if (this.justified && this.justified.length) { + justify(dropdown.css({left:0}), this.justified, boundarywidth); + } else { - var jwidth = this.justified.outerWidth(); + if (this.options.preventflip !== true) { - dropdown.css("min-width", jwidth); + var fdpos; - if (UI.langdirection == 'right') { - - var right1 = boundarywidth - (this.justified.offset().left + jwidth), - right2 = boundarywidth - (dropdown.offset().left + dropdown.outerWidth()); - - dropdown.css("margin-right", right1 - right2); - - } else { - dropdown.css("margin-left", this.justified.offset().left - offset.left); - } - - offset = dropdown.offset(); - - } - - if ((width + (offset.left-boundaryoffset)) > boundarywidth) { - dropdown.addClass('uk-dropdown-flip'); - offset = dropdown.offset(); - } - - if ((offset.left-boundaryoffset) < 0) { - - dropdown.addClass("uk-dropdown-stack"); - - if (dropdown.hasClass('uk-dropdown-flip')) { - - if (!this.flipped) { - dropdown.removeClass('uk-dropdown-flip'); - offset = dropdown.offset(); - dropdown.addClass('uk-dropdown-flip'); + switch(this.checkBoundary(pos.left + css.left, pos.top + css.top, width, height, boundarywidth)) { + case "x": + if(this.options.preventflip !=='x') fdpos = flips['x'][dpos] || 'right-top'; + break; + case "y": + if(this.options.preventflip !=='y') fdpos = flips['y'][dpos] || 'top-left'; + break; + case "xy": + if(!this.options.preventflip) fdpos = flips['xy'][dpos] || 'right-bottom'; + break; } - setTimeout(function(){ + if (fdpos) { - if ((dropdown.offset().left-boundaryoffset) < 0 || !$this.flipped && (dropdown.outerWidth() + (offset.left-boundaryoffset)) < boundarywidth) { - dropdown.removeClass('uk-dropdown-flip'); + pp = fdpos.split('-'); + css = variants[fdpos] ? variants[fdpos] : variants['bottom-left']; + dropdown.addClass('uk-dropdown-autoflip'); + + // check flipped + if (this.checkBoundary(pos.left + css.left, pos.top + css.top, width, height, boundarywidth)) { + pp = dpos.split('-'); + css = variants[dpos] ? variants[dpos] : variants['bottom-left']; } - }, 0); + } } + } + if (width > boundarywidth) { + dropdown.addClass('uk-dropdown-stack'); this.trigger('stack.uk.dropdown', [this]); } - dropdown.css("display", ""); + dropdown.css(css).css('display', '').addClass('uk-dropdown-'+pp[0]); + }, + + checkBoundary: function(left, top, width, height, boundarywidth) { + + var axis = ""; + + if (left < 0 || ((left - UI.$win.scrollLeft())+width) > boundarywidth) { + axis += "x"; + } + + if ((top - UI.$win.scrollTop()) < 0 || ((top - UI.$win.scrollTop())+height) > window.innerHeight) { + axis += "y"; + } + + return axis; + } + }); + + + UI.component('dropdownOverlay', { + + defaults: { + justify : false, + cls : '', + duration: 200 + }, + + boot: function() { + + // init code + UI.ready(function(context) { + + UI.$('[data-uk-dropdown-overlay]', context).each(function() { + var ele = UI.$(this); + + if (!ele.data('dropdownOverlay')) { + UI.dropdownOverlay(ele, UI.Utils.options(ele.attr('data-uk-dropdown-overlay'))); + } + }); + }); + }, + + init: function() { + + var $this = this; + + this.justified = this.options.justify ? UI.$(this.options.justify) : false; + this.overlay = this.element.find('uk-dropdown-overlay'); + + if (!this.overlay.length) { + this.overlay = UI.$('
          ').appendTo(this.element); + } + + this.overlay.addClass(this.options.cls); + + this.on({ + + 'beforeshow.uk.dropdown': function(e, dropdown) { + $this.dropdown = dropdown; + + if ($this.justified && $this.justified.length) { + justify($this.overlay.css({display:'block', marginLeft:'', marginRight:''}), $this.justified, $this.justified.outerWidth()); + } + }, + + 'show.uk.dropdown': function(e, dropdown) { + + var h = $this.dropdown.dropdown.outerHeight(true); + + $this.dropdown.element.removeClass('uk-open'); + + $this.overlay.stop().css('display', 'block').animate({height: h}, $this.options.duration, function() { + + $this.dropdown.dropdown.css('visibility', ''); + $this.dropdown.element.addClass('uk-open'); + + UI.Utils.checkDisplay($this.dropdown.dropdown, true); + }); + + $this.pointerleave = false; + }, + + 'hide.uk.dropdown': function() { + $this.overlay.stop().animate({height: 0}, $this.options.duration); + }, + + 'pointerenter.uk.dropdown': function(e, dropdown) { + clearTimeout($this.remainIdle); + }, + + 'pointerleave.uk.dropdown': function(e, dropdown) { + $this.pointerleave = true; + } + }); + + + this.overlay.on({ + + 'mouseenter': function() { + if ($this.remainIdle) { + clearTimeout($this.dropdown.remainIdle); + clearTimeout($this.remainIdle); + } + }, + + 'mouseleave': function(){ + + if ($this.pointerleave && active) { + + $this.remainIdle = setTimeout(function() { + if(active) active.hide(); + }, active.options.remaintime); + } + } + }) } }); -})(UIkit); + + function justify(ele, justifyTo, boundarywidth, offset) { + + ele = UI.$(ele); + justifyTo = UI.$(justifyTo); + boundarywidth = boundarywidth || window.innerWidth; + offset = offset || ele.offset(); + + if (justifyTo.length) { + + var jwidth = justifyTo.outerWidth(); + + ele.css('min-width', jwidth); + + if (UI.langdirection == 'right') { + + var right1 = boundarywidth - (justifyTo.offset().left + jwidth), + right2 = boundarywidth - (ele.offset().left + ele.outerWidth()); + + ele.css('margin-right', right1 - right2); + + } else { + ele.css('margin-left', justifyTo.offset().left - offset.left); + } + } + } + +})(UIkit2); (function(UI) { @@ -2049,9 +2507,10 @@ UI.component('gridMatchHeight', { defaults: { - "target" : false, - "row" : true, - "ignorestacked" : false + target : false, + row : true, + ignorestacked : false, + observe : false }, boot: function() { @@ -2059,11 +2518,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-grid-match]", context).each(function() { + UI.$('[data-uk-grid-match]', context).each(function() { var grid = UI.$(this), obj; - if (!grid.data("gridMatchHeight")) { - obj = UI.gridMatchHeight(grid, UI.Utils.options(grid.attr("data-uk-grid-match"))); + if (!grid.data('gridMatchHeight')) { + obj = UI.gridMatchHeight(grid, UI.Utils.options(grid.attr('data-uk-grid-match'))); } }); }); @@ -2081,7 +2540,7 @@ UI.$win.on('load resize orientationchange', (function() { var fn = function() { - $this.match(); + if ($this.element.is(':visible')) $this.match(); }; UI.$(function() { fn(); }); @@ -2089,14 +2548,15 @@ return UI.Utils.debounce(fn, 50); })()); - UI.$html.on("changed.uk.dom", function(e) { - $this.columns = $this.element.children(); - $this.elements = $this.options.target ? $this.find($this.options.target) : $this.columns; - $this.match(); - }); + if (this.options.observe) { - this.on("display.uk.check", function(e) { - if(this.element.is(":visible")) this.match(); + UI.domObserve(this.element, function(e) { + if ($this.element.is(':visible')) $this.match(); + }); + } + + this.on('display.uk.check', function(e) { + if(this.element.is(':visible')) this.match(); }.bind(this)); grids.push(this); @@ -2104,7 +2564,7 @@ match: function() { - var firstvisible = this.columns.filter(":visible:first"); + var firstvisible = this.columns.filter(':visible:first'); if (!firstvisible.length) return; @@ -2128,7 +2588,8 @@ UI.component('gridMargin', { defaults: { - "cls": "uk-grid-margin" + cls : 'uk-grid-margin', + rowfirst : 'uk-row-first' }, boot: function() { @@ -2136,11 +2597,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-grid-margin]", context).each(function() { + UI.$('[data-uk-grid-margin]', context).each(function() { var grid = UI.$(this), obj; - if (!grid.data("gridMargin")) { - obj = UI.gridMargin(grid, UI.Utils.options(grid.attr("data-uk-grid-margin"))); + if (!grid.data('gridMargin')) { + obj = UI.gridMargin(grid, UI.Utils.options(grid.attr('data-uk-grid-margin'))); } }); }); @@ -2152,7 +2613,7 @@ } }); -})(UIkit); +})(UIkit2); (function(UI) { @@ -2160,6 +2621,12 @@ var active = false, activeCount = 0, $html = UI.$html, body; + UI.$win.on('resize orientationchange', UI.Utils.debounce(function(){ + UI.$('.uk-modal.uk-open').each(function(){ + return UI.$(this).data('modal') && UI.$(this).data('modal').resize(); + }); + }, 150)); + UI.component('modal', { defaults: { @@ -2172,6 +2639,7 @@ scrollable: false, transition: false, + hasTransitioned: true, init: function() { @@ -2181,18 +2649,18 @@ var $this = this; - this.paddingdir = "padding-" + (UI.langdirection == 'left' ? "right":"left"); - this.dialog = this.find(".uk-modal-dialog"); + this.paddingdir = 'padding-' + (UI.langdirection == 'left' ? 'right':'left'); + this.dialog = this.find('.uk-modal-dialog'); this.active = false; // Update ARIA - this.element.attr('aria-hidden', this.element.hasClass("uk-open")); + this.element.attr('aria-hidden', this.element.hasClass('uk-open')); - this.on("click", ".uk-modal-close", function(e) { + this.on('click', '.uk-modal-close', function(e) { e.preventDefault(); $this.hide(); - }).on("click", function(e) { + }).on('click', function(e) { var target = UI.$(e.target); @@ -2200,10 +2668,12 @@ $this.hide(); } }); + + UI.domObserve(this.element, function(e) { $this.resize(); }); }, toggle: function() { - return this[this.isActive() ? "hide" : "show"](); + return this[this.isActive() ? 'hide' : 'show'](); }, show: function() { @@ -2218,8 +2688,8 @@ active.hide(true); } - this.element.removeClass("uk-open").show(); - this.resize(); + this.element.removeClass('uk-open').show(); + this.resize(true); if (this.options.modal) { active = this; @@ -2229,14 +2699,23 @@ activeCount++; - this.element.addClass("uk-open"); + if (UI.support.transition) { + this.hasTransitioned = false; + this.element.one(UI.support.transition.end, function(){ + $this.hasTransitioned = true; + UI.Utils.focus($this.dialog, 'a[href]'); + }).addClass('uk-open'); + } else { + this.element.addClass('uk-open'); + UI.Utils.focus(this.dialog, 'a[href]'); + } - $html.addClass("uk-modal-page").height(); // force browser engine redraw + $html.addClass('uk-modal-page').height(); // force browser engine redraw // Update ARIA this.element.attr('aria-hidden', 'false'); - this.element.trigger("show.uk.modal"); + this.element.trigger('show.uk.modal'); UI.Utils.checkDisplay(this.dialog, true); @@ -2245,13 +2724,13 @@ hide: function(force) { - if (!force && UI.support.transition) { + if (!force && UI.support.transition && this.hasTransitioned) { var $this = this; this.one(UI.support.transition.end, function() { $this._hide(); - }).removeClass("uk-open"); + }).removeClass('uk-open'); } else { @@ -2261,7 +2740,9 @@ return this; }, - resize: function() { + resize: function(force) { + + if (!this.isActive() && !force) return; var bodywidth = body.width(); @@ -2277,9 +2758,9 @@ pad = parseInt(this.dialog.css('margin-top'), 10) + parseInt(this.dialog.css('margin-bottom'), 10); if ((dh + pad) < window.innerHeight) { - this.dialog.css({'top': (window.innerHeight/2 - dh/2) - pad }); + this.dialog.css({top: (window.innerHeight/2 - dh/2) - pad }); } else { - this.dialog.css({'top': ''}); + this.dialog.css({top: ''}); } } }, @@ -2291,14 +2772,17 @@ if (scrollable.length) { - scrollable.css("height", 0); + scrollable.css('height', 0); - var offset = Math.abs(parseInt(this.dialog.css("margin-top"), 10)), + var offset = Math.abs(parseInt(this.dialog.css('margin-top'), 10)), dh = this.dialog.outerHeight(), wh = window.innerHeight, h = wh - 2*(offset < 20 ? 20:offset) - dh; - scrollable.css("height", h < this.options.minScrollHeight ? "":h); + scrollable.css({ + maxHeight: (h < this.options.minScrollHeight ? '':h), + height:'' + }); return true; } @@ -2309,25 +2793,26 @@ _hide: function() { this.active = false; - activeCount--; + if (activeCount > 0) activeCount--; + else activeCount = 0; - this.element.hide().removeClass("uk-open"); + this.element.hide().removeClass('uk-open'); // Update ARIA this.element.attr('aria-hidden', 'true'); if (!activeCount) { - $html.removeClass("uk-modal-page"); + $html.removeClass('uk-modal-page'); body.css(this.paddingdir, ""); } - if(active===this) active = false; + if (active===this) active = false; - this.trigger("hide.uk.modal"); + this.trigger('hide.uk.modal'); }, isActive: function() { - return this.active; + return this.element.hasClass('uk-open'); } }); @@ -2337,16 +2822,16 @@ boot: function() { // init code - UI.$html.on("click.modal.uikit", "[data-uk-modal]", function(e) { + UI.$html.on('click.modal.uikit', '[data-uk-modal]', function(e) { var ele = UI.$(this); - if (ele.is("a")) { + if (ele.is('a')) { e.preventDefault(); } - if (!ele.data("modalTrigger")) { - var modal = UI.modalTrigger(ele, UI.Utils.options(ele.attr("data-uk-modal"))); + if (!ele.data('modalTrigger')) { + var modal = UI.modalTrigger(ele, UI.Utils.options(ele.attr('data-uk-modal'))); modal.show(); } @@ -2360,10 +2845,6 @@ active.hide(); } }); - - UI.$win.on("resize orientationchange", UI.Utils.debounce(function(){ - if (active) active.resize(); - }, 150)); }, init: function() { @@ -2371,7 +2852,7 @@ var $this = this; this.options = UI.$.extend({ - "target": $this.element.is("a") ? $this.element.attr("href") : false + target: $this.element.is('a') ? $this.element.attr('href') : false }, this.options); this.modal = UI.modal(this.options.target, this.options); @@ -2382,17 +2863,17 @@ }); //methods - this.proxy(this.modal, "show hide isActive"); + this.proxy(this.modal, 'show hide isActive'); } }); UI.modal.dialog = function(content, options) { - var modal = UI.modal(UI.$(UI.modal.dialog.template).appendTo("body"), options); + var modal = UI.modal(UI.$(UI.modal.dialog.template).appendTo('body'), options); - modal.on("hide.uk.modal", function(){ + modal.on('hide.uk.modal', function(){ if (modal.persist) { - modal.persist.appendTo(modal.persist.data("modalPersistParent")); + modal.persist.appendTo(modal.persist.data('modalPersistParent')); modal.persist = false; } modal.element.remove(); @@ -2420,31 +2901,34 @@ }, 50); }); - modal.show(); + return modal.show(); }; - UI.modal.confirm = function(content, onconfirm, options) { + UI.modal.confirm = function(content, onconfirm, oncancel) { + + var options = arguments.length > 1 && arguments[arguments.length-1] ? arguments[arguments.length-1] : {}; onconfirm = UI.$.isFunction(onconfirm) ? onconfirm : function(){}; - options = UI.$.extend(true, {bgclose:false, keyboard:false, modal:false, labels:UI.modal.labels}, options); + oncancel = UI.$.isFunction(oncancel) ? oncancel : function(){}; + options = UI.$.extend(true, {bgclose:false, keyboard:false, modal:false, labels:UI.modal.labels}, UI.$.isFunction(options) ? {}:options); var modal = UI.modal.dialog(([ '
          '+String(content)+'
          ', - '' + '' ]).join(""), options); - modal.element.find(".js-modal-confirm").on("click", function(){ - onconfirm(); + modal.element.find(".js-modal-confirm, .js-modal-confirm-cancel").on("click", function(){ + UI.$(this).is('.js-modal-confirm') ? onconfirm() : oncancel(); modal.hide(); }); modal.on('show.uk.modal', function(){ setTimeout(function(){ - modal.element.find('button:first').focus(); + modal.element.find('.js-modal-confirm').focus(); }, 50); }); - modal.show(); + return modal.show(); }; UI.modal.prompt = function(text, value, onsubmit, options) { @@ -2455,28 +2939,22 @@ var modal = UI.modal.dialog(([ text ? '
          '+String(text)+'
          ':'', '

          ', - '' + '' ]).join(""), options), input = modal.element.find("input[type='text']").val(value || '').on('keyup', function(e){ if (e.keyCode == 13) { - modal.element.find(".js-modal-ok").trigger('click'); + modal.element.find('.js-modal-ok').trigger('click'); } }); - modal.element.find(".js-modal-ok").on("click", function(){ + modal.element.find('.js-modal-ok').on('click', function(){ if (onsubmit(input.val())!==false){ modal.hide(); } }); - modal.on('show.uk.modal', function(){ - setTimeout(function(){ - input.focus(); - }, 50); - }); - - modal.show(); + return modal.show(); }; UI.modal.blockUI = function(content, options) { @@ -2486,18 +2964,15 @@ ]).join(""), UI.$.extend({bgclose:false, keyboard:false, modal:false}, options)); modal.content = modal.element.find('.uk-modal-content:first'); - modal.show(); - return modal; + return modal.show(); }; - UI.modal.labels = { - 'Ok': 'Ok', - 'Cancel': 'Cancel' + Ok: 'Ok', + Cancel: 'Cancel' }; - // helper functions function setContent(content, modal){ @@ -2510,14 +2985,14 @@ if(content.parent().length) { modal.persist = content; - modal.persist.data("modalPersistParent", content.parent()); + modal.persist.data('modalPersistParent', content.parent()); } }else if (typeof content === 'string' || typeof content === 'number') { // just insert the data as innerHTML content = UI.$('
          ').html(content); }else { // unsupported data type! - content = UI.$('
          ').html('UIkit.modal Error: Unsupported data type: ' + typeof content); + content = UI.$('
          ').html('UIkit2.modal Error: Unsupported data type: ' + typeof content); } content.appendTo(modal.element.find('.uk-modal-dialog')); @@ -2525,7 +3000,7 @@ return modal; } -})(UIkit); +})(UIkit2); (function(UI) { @@ -2534,9 +3009,9 @@ UI.component('nav', { defaults: { - "toggle": ">li.uk-parent > a[href='#']", - "lists": ">li.uk-parent > ul", - "multiple": false + toggle: '>li.uk-parent > a[href="#"]', + lists: '>li.uk-parent > ul', + multiple: false }, boot: function() { @@ -2544,11 +3019,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-nav]", context).each(function() { + UI.$('[data-uk-nav]', context).each(function() { var nav = UI.$(this); - if (!nav.data("nav")) { - var obj = UI.nav(nav, UI.Utils.options(nav.attr("data-uk-nav"))); + if (!nav.data('nav')) { + var obj = UI.nav(nav, UI.Utils.options(nav.attr('data-uk-nav'))); } }); }); @@ -2558,26 +3033,41 @@ var $this = this; - this.on("click.uikit.nav", this.options.toggle, function(e) { + this.on('click.uk.nav', this.options.toggle, function(e) { e.preventDefault(); var ele = UI.$(this); $this.open(ele.parent()[0] == $this.element[0] ? ele : ele.parent("li")); }); + this.update(); + + UI.domObserve(this.element, function(e) { + if ($this.element.find($this.options.lists).not('[role]').length) { + $this.update(); + } + }); + }, + + update: function() { + + var $this = this; + this.find(this.options.lists).each(function() { - var $ele = UI.$(this), - parent = $ele.parent(), + + var $ele = UI.$(this).attr('role', 'menu'), + parent = $ele.closest('li'), active = parent.hasClass("uk-active"); - $ele.wrap('
          '); - parent.data("list-container", $ele.parent()[active ? 'removeClass':'addClass']('uk-hidden')); + if (!parent.data('list-container')) { + $ele.wrap('
          '); + parent.data('list-container', $ele.parent()[active ? 'removeClass':'addClass']('uk-hidden')); + } // Init ARIA parent.attr('aria-expanded', parent.hasClass("uk-open")); if (active) $this.open(parent, true); }); - }, open: function(li, noanimation) { @@ -2642,15 +3132,17 @@ // helper function getHeight(ele) { - var $ele = UI.$(ele), height = "auto"; - if ($ele.is(":visible")) { + var $ele = UI.$(ele), height = 'auto'; + + if ($ele.is(':visible')) { height = $ele.outerHeight(); } else { + var tmp = { - position: $ele.css("position"), - visibility: $ele.css("visibility"), - display: $ele.css("display") + position: $ele.css('position'), + visibility: $ele.css('visibility'), + display: $ele.css('display') }; height = $ele.css({position: 'absolute', visibility: 'hidden', display: 'block'}).outerHeight(); @@ -2661,7 +3153,7 @@ return height; } -})(UIkit); +})(UIkit2); (function(UI) { @@ -2673,28 +3165,41 @@ $html = UI.$html, Offcanvas = { - show: function(element) { + show: function(element, options) { element = UI.$(element); if (!element.length) return; + options = UI.$.extend({mode: 'push'}, options); + var $body = UI.$('body'), - bar = element.find(".uk-offcanvas-bar:first"), - rtl = (UI.langdirection == "right"), - flip = bar.hasClass("uk-offcanvas-bar-flip") ? -1:1, - dir = flip * (rtl ? -1 : 1); + bar = element.find('.uk-offcanvas-bar:first'), + rtl = (UI.langdirection == 'right'), + flip = bar.hasClass('uk-offcanvas-bar-flip') ? -1:1, + dir = flip * (rtl ? -1 : 1), + + scrollbarwidth = window.innerWidth - $body.width(); scrollpos = {x: window.pageXOffset, y: window.pageYOffset}; - element.addClass("uk-active"); + bar.attr('mode', options.mode); + element.addClass('uk-active'); - $body.css({"width": window.innerWidth, "height": window.innerHeight}).addClass("uk-offcanvas-page"); - $body.css((rtl ? "margin-right" : "margin-left"), (rtl ? -1 : 1) * (bar.outerWidth() * dir)).width(); // .width() - force redraw + $body.css({width: window.innerWidth - scrollbarwidth, height: window.innerHeight}).addClass('uk-offcanvas-page'); - $html.css('margin-top', scrollpos.y * -1); + if (options.mode == 'push' || options.mode == 'reveal') { + $body.css((rtl ? 'margin-right' : 'margin-left'), (rtl ? -1 : 1) * (bar.outerWidth() * dir)); + } - bar.addClass("uk-offcanvas-bar-show"); + if (options.mode == 'reveal') { + bar.css('clip', 'rect(0, '+bar.outerWidth()+'px, 100vh, 0)'); + } + + $html.css('margin-top', scrollpos.y * -1).width(); // .width() - force redraw + + + bar.addClass('uk-offcanvas-bar-show'); this._initElement(element); @@ -2707,14 +3212,14 @@ hide: function(force) { var $body = UI.$('body'), - panel = UI.$(".uk-offcanvas.uk-active"), - rtl = (UI.langdirection == "right"), - bar = panel.find(".uk-offcanvas-bar:first"), + panel = UI.$('.uk-offcanvas.uk-active'), + rtl = (UI.langdirection == 'right'), + bar = panel.find('.uk-offcanvas-bar:first'), finalize = function() { - $body.removeClass("uk-offcanvas-page").css({"width": "", "height": "", "margin-left": "", "margin-right": ""}); - panel.removeClass("uk-active"); + $body.removeClass('uk-offcanvas-page').css({width: '', height: '', marginLeft: '', marginRight: ''}); + panel.removeClass('uk-active'); - bar.removeClass("uk-offcanvas-bar-show"); + bar.removeClass('uk-offcanvas-bar-show'); $html.css('margin-top', ''); window.scrollTo(scrollpos.x, scrollpos.y); bar.trigger('hide.uk.offcanvas', [panel, bar]); @@ -2724,15 +3229,20 @@ }; if (!panel.length) return; + if (bar.attr('mode') == 'none') force = true; if (UI.support.transition && !force) { $body.one(UI.support.transition.end, function() { finalize(); - }).css((rtl ? "margin-right" : "margin-left"), ""); + }).css((rtl ? 'margin-right' : 'margin-left'), ''); + + if (bar.attr('mode') == 'reveal') { + bar.css('clip', ''); + } setTimeout(function(){ - bar.removeClass("uk-offcanvas-bar-show"); + bar.removeClass('uk-offcanvas-bar-show'); }, 0); } else { @@ -2742,17 +3252,17 @@ _initElement: function(element) { - if (element.data("OffcanvasInit")) return; + if (element.data('OffcanvasInit')) return; - element.on("click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas", function(e) { + element.on('click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas', function(e) { var target = UI.$(e.target); if (!e.type.match(/swipe/)) { - if (!target.hasClass("uk-offcanvas-close")) { - if (target.hasClass("uk-offcanvas-bar")) return; - if (target.parents(".uk-offcanvas-bar:first").length) return; + if (!target.hasClass('uk-offcanvas-close')) { + if (target.hasClass('uk-offcanvas-bar')) return; + if (target.parents('.uk-offcanvas-bar:first').length) return; } } @@ -2760,12 +3270,12 @@ Offcanvas.hide(); }); - element.on("click", "a[href^='#']", function(e){ + element.on('click', 'a[href*="#"]', function(e){ var link = UI.$(this), - href = link.attr("href"); + href = link.attr('href'); - if (href == "#") { + if (href == '#') { return; } @@ -2774,16 +3284,16 @@ var target; try { - target = UI.$(href); + target = UI.$(link[0].hash); } catch (e){ - target = "" + target = ''; } if (!target.length) { - target = UI.$('[name="'+href.replace('#','')+'"]'); + target = UI.$('[name="'+link[0].hash.replace('#','')+'"]'); } - if (target.length && link.attr('data-uk-smooth-scroll') && UI.Utils.scrollToElement) { + if (target.length && UI.Utils.scrollToElement) { UI.Utils.scrollToElement(target, UI.Utils.options(link.attr('data-uk-smooth-scroll') || '{}')); } else { window.location.href = href; @@ -2793,7 +3303,7 @@ Offcanvas.hide(); }); - element.data("OffcanvasInit", true); + element.data('OffcanvasInit', true); } }; @@ -2802,14 +3312,14 @@ boot: function() { // init code - $html.on("click.offcanvas.uikit", "[data-uk-offcanvas]", function(e) { + $html.on('click.offcanvas.uikit', '[data-uk-offcanvas]', function(e) { e.preventDefault(); var ele = UI.$(this); - if (!ele.data("offcanvasTrigger")) { - var obj = UI.offcanvasTrigger(ele, UI.Utils.options(ele.attr("data-uk-offcanvas"))); + if (!ele.data('offcanvasTrigger')) { + var obj = UI.offcanvasTrigger(ele, UI.Utils.options(ele.attr('data-uk-offcanvas'))); ele.trigger("click"); } }); @@ -2827,19 +3337,20 @@ var $this = this; this.options = UI.$.extend({ - "target": $this.element.is("a") ? $this.element.attr("href") : false + target: $this.element.is('a') ? $this.element.attr('href') : false, + mode: 'push' }, this.options); - this.on("click", function(e) { + this.on('click', function(e) { e.preventDefault(); - Offcanvas.show($this.options.target); + Offcanvas.show($this.options.target, $this.options); }); } }); UI.offcanvas = Offcanvas; -})(UIkit); +})(UIkit2); (function(UI) { @@ -2851,10 +3362,11 @@ defaults: { connect : false, - toggle : ">*", + toggle : '>*', active : 0, animation : false, - duration : 200 + duration : 200, + swiping : true }, animating: false, @@ -2864,11 +3376,11 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-switcher]", context).each(function() { + UI.$('[data-uk-switcher]', context).each(function() { var switcher = UI.$(this); - if (!switcher.data("switcher")) { - var obj = UI.switcher(switcher, UI.Utils.options(switcher.attr("data-uk-switcher"))); + if (!switcher.data('switcher')) { + var obj = UI.switcher(switcher, UI.Utils.options(switcher.attr('data-uk-switcher'))); } }); }); @@ -2878,69 +3390,72 @@ var $this = this; - this.on("click.uikit.switcher", this.options.toggle, function(e) { + this.on('click.uk.switcher', this.options.toggle, function(e) { e.preventDefault(); $this.show(this); }); - if (this.options.connect) { + if (!this.options.connect) { + return; + } - this.connect = UI.$(this.options.connect); + this.connect = UI.$(this.options.connect); - this.connect.find(".uk-active").removeClass(".uk-active"); + if (!this.connect.length) { + return; + } - // delegate switch commands within container content - if (this.connect.length) { + this.connect.on('click.uk.switcher', '[data-uk-switcher-item]', function(e) { - // Init ARIA for connect - this.connect.children().attr('aria-hidden', 'true'); + e.preventDefault(); - this.connect.on("click", '[data-uk-switcher-item]', function(e) { + var item = UI.$(this).attr('data-uk-switcher-item'); - e.preventDefault(); + if ($this.index == item) return; - var item = UI.$(this).attr('data-uk-switcher-item'); - - if ($this.index == item) return; - - switch(item) { - case 'next': - case 'previous': - $this.show($this.index + (item=='next' ? 1:-1)); - break; - default: - $this.show(parseInt(item, 10)); - } - }).on('swipeRight swipeLeft', function(e) { - e.preventDefault(); - if(!window.getSelection().toString()) { - $this.show($this.index + (e.type == 'swipeLeft' ? 1 : -1)); - } - }); + switch(item) { + case 'next': + case 'previous': + $this.show($this.index + (item=='next' ? 1:-1)); + break; + default: + $this.show(parseInt(item, 10)); } + }); - var toggles = this.find(this.options.toggle), - active = toggles.filter(".uk-active"); + if (this.options.swiping) { - if (active.length) { - this.show(active, false); - } else { - - if (this.options.active===false) return; - - active = toggles.eq(this.options.active); - this.show(active.length ? active : toggles.eq(0), false); - } - - // Init ARIA for toggles - toggles.not(active).attr('aria-expanded', 'false'); - active.attr('aria-expanded', 'true'); - - this.on('changed.uk.dom', function() { - $this.connect = UI.$($this.options.connect); + this.connect.on('swipeRight swipeLeft', function(e) { + e.preventDefault(); + if (!window.getSelection().toString()) { + $this.show($this.index + (e.type == 'swipeLeft' ? 1 : -1)); + } }); } + this.update(); + }, + + update: function() { + + this.connect.children().removeClass('uk-active').attr('aria-hidden', 'true'); + + var toggles = this.find(this.options.toggle), + active = toggles.filter('.uk-active'); + + if (active.length) { + this.show(active, false); + } else { + + if (this.options.active===false) return; + + active = toggles.eq(this.options.active); + this.show(active.length ? active : toggles.eq(0), false); + } + + // Init ARIA for toggles + toggles.not(active).attr('aria-expanded', 'false'); + active.attr('aria-expanded', 'true'); }, show: function(tab, animate) { @@ -2949,18 +3464,16 @@ return; } + var toggles = this.find(this.options.toggle); + if (isNaN(tab)) { tab = UI.$(tab); } else { - - var toggles = this.find(this.options.toggle); - tab = tab < 0 ? toggles.length-1 : tab; tab = toggles.eq(toggles[tab] ? tab : 0); } var $this = this, - toggles = this.find(this.options.toggle), active = UI.$(tab), animation = Animations[this.options.animation] || function(current, next) { @@ -3022,6 +3535,7 @@ UI.Utils.checkDisplay(next, true); $this.animating = false; + }); }); } @@ -3104,16 +3618,22 @@ clsOut = cls[1] || cls[0]; } + UI.$body.css('overflow-x', 'hidden'); // fix scroll jumping in iOS + release = function() { if (current) current.hide().removeClass('uk-active '+clsOut+' uk-animation-reverse'); next.addClass(clsIn).one(UI.support.animation.end, function() { - next.removeClass(''+clsIn+'').css({opacity:'', display:''}); + setTimeout(function () { + next.removeClass(''+clsIn+'').css({opacity:'', display:''}); + }, 0); d.resolve(); + UI.$body.css('overflow-x', ''); + if (current) current.css({opacity:'', display:''}); }.bind(this)).show(); @@ -3137,7 +3657,7 @@ return d.promise(); } -})(UIkit); +})(UIkit2); (function(UI) { @@ -3146,11 +3666,12 @@ UI.component('tab', { defaults: { - 'target' : '>li:not(.uk-tab-responsive, .uk-disabled)', - 'connect' : false, - 'active' : 0, - 'animation' : false, - 'duration' : 200 + target : '>li:not(.uk-tab-responsive, .uk-disabled)', + connect : false, + active : 0, + animation : false, + duration : 200, + swiping : true }, boot: function() { @@ -3158,12 +3679,12 @@ // init code UI.ready(function(context) { - UI.$("[data-uk-tab]", context).each(function() { + UI.$('[data-uk-tab]', context).each(function() { var tab = UI.$(this); - if (!tab.data("tab")) { - var obj = UI.tab(tab, UI.Utils.options(tab.attr("data-uk-tab"))); + if (!tab.data('tab')) { + var obj = UI.tab(tab, UI.Utils.options(tab.attr('data-uk-tab'))); } }); }); @@ -3175,7 +3696,7 @@ this.current = false; - this.on("click.uikit.tab", this.options.target, function(e) { + this.on('click.uk.tab', this.options.target, function(e) { e.preventDefault(); @@ -3185,9 +3706,9 @@ var current = $this.find($this.options.target).not(this); - current.removeClass("uk-active").blur(); + current.removeClass('uk-active').blur(); - $this.trigger("change.uk.tab", [UI.$(this).addClass("uk-active"), $this.current]); + $this.trigger('change.uk.tab', [UI.$(this).addClass('uk-active'), $this.current]); $this.current = UI.$(this); @@ -3209,10 +3730,10 @@ this.responsivetab.lst = this.responsivetab.dropdown.find('ul'); this.responsivetab.caption = this.responsivetab.find('a:first'); - if (this.element.hasClass("uk-tab-bottom")) this.responsivetab.dropdown.addClass("uk-dropdown-up"); + if (this.element.hasClass('uk-tab-bottom')) this.responsivetab.dropdown.addClass('uk-dropdown-up'); // handle click - this.responsivetab.lst.on('click.uikit.tab', 'a', function(e) { + this.responsivetab.lst.on('click.uk.tab', 'a', function(e) { e.preventDefault(); e.stopPropagation(); @@ -3230,28 +3751,30 @@ // init UIkit components if (this.options.connect) { + this.switcher = UI.switcher(this.element, { - "toggle" : ">li:not(.uk-tab-responsive)", - "connect" : this.options.connect, - "active" : this.options.active, - "animation" : this.options.animation, - "duration" : this.options.duration + toggle : '>li:not(.uk-tab-responsive)', + connect : this.options.connect, + active : this.options.active, + animation : this.options.animation, + duration : this.options.duration, + swiping : this.options.swiping }); } - UI.dropdown(this.responsivetab, {"mode": "click"}); + UI.dropdown(this.responsivetab, {mode: 'click', preventflip: 'y'}); // init - $this.trigger("change.uk.tab", [this.element.find(this.options.target).not('.uk-tab-responsive').filter('.uk-active')]); + $this.trigger('change.uk.tab', [this.element.find(this.options.target).not('.uk-tab-responsive').filter('.uk-active')]); this.check(); UI.$win.on('resize orientationchange', UI.Utils.debounce(function(){ - if ($this.element.is(":visible")) $this.check(); + if ($this.element.is(':visible')) $this.check(); }, 100)); this.on('display.uk.check', function(){ - if ($this.element.is(":visible")) $this.check(); + if ($this.element.is(':visible')) $this.check(); }); }, @@ -3288,7 +3811,8 @@ if (!item.hasClass('uk-disabled')) { - clone = item[0].outerHTML.replace(' -1 ? '&':'?'), 'enablejsapi=1&api=1'].join('')); } }, check: function() { - this.element.css({ - 'width' : '', - 'height' : '' - }); + this.element.css({ width : '', height : '' }); this.dimension = {w: this.element.width(), h: this.element.height()}; @@ -3373,7 +3892,7 @@ this.dimension.h = this.element.attr('height'); } - this.ratio = this.dimension.w / this.dimension.h; + this.ratio = this.dimension.w / this.dimension.h; var w = this.parent.width(), h = this.parent.height(), width, height; @@ -3390,11 +3909,8 @@ height = Math.ceil(w / this.ratio); } - this.element.css({ - 'width' : width, - 'height' : height - }); + this.element.css({ width : width, height : height }); } }); -})(UIkit); +})(UIkit2); diff --git a/media/uikit-v2/js/uikit.min.js b/media/uikit-v2/js/uikit.min.js new file mode 100644 index 0000000..ec84934 --- /dev/null +++ b/media/uikit-v2/js/uikit.min.js @@ -0,0 +1,3 @@ +/*! UIkit 2.27.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +!function(t){var i;if(!window.jQuery)throw new Error("UIkit 2.x requires jQuery");i=t(window.jQuery),"function"==typeof define&&define.amd&&define("uikit",function(){return i.load=function(t,e,n,o){var s,a=t.split(","),r=[],l=(o.config&&o.config.uikit&&o.config.uikit.base?o.config.uikit.base:"").replace(/\/+$/g,"");if(!l)throw new Error("Please define base path to UIkit in the requirejs config.");for(s=0;s0||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>0||!1,i.support.mutationobserver=window.MutationObserver||window.WebKitMutationObserver||null,i.Utils={},i.Utils.isFullscreen=function(){return document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.fullscreenElement||!1},i.Utils.str2json=function(t,i){try{return i?JSON.parse(t.replace(/([\$\w]+)\s*:/g,function(t,i){return'"'+i+'":'}).replace(/'([^']+)'/g,function(t,i){return'"'+i+'"'})):new Function("","var json = "+t+"; return JSON.parse(JSON.stringify(json));")()}catch(e){return!1}},i.Utils.debounce=function(t,i,e){var n;return function(){var o=this,s=arguments,a=function(){n=null,e||t.apply(o,s)},r=e&&!n;clearTimeout(n),n=setTimeout(a,i),r&&t.apply(o,s)}},i.Utils.throttle=function(t,i){var e=!1;return function(){e||(t.call(),e=!0,setTimeout(function(){e=!1},i))}},i.Utils.removeCssRules=function(t){var i,e,n,o,s,a,r,l,c,u;t&&setTimeout(function(){try{for(u=document.styleSheets,o=0,r=u.length;r>o;o++){for(n=u[o],e=[],n.cssRules=n.cssRules,i=s=0,l=n.cssRules.length;l>s;i=++s)n.cssRules[i].type===CSSRule.STYLE_RULE&&t.test(n.cssRules[i].selectorText)&&e.unshift(i);for(a=0,c=e.length;c>a;a++)n.deleteRule(e[a])}}catch(d){}},0)},i.Utils.isInView=function(e,n){var o=t(e);if(!o.is(":visible"))return!1;var s=i.$win.scrollLeft(),a=i.$win.scrollTop(),r=o.offset(),l=r.left,c=r.top;return n=t.extend({topoffset:0,leftoffset:0},n),c+o.height()>=a&&c-n.topoffset<=a+i.$win.height()&&l+o.width()>=s&&l-n.leftoffset<=s+i.$win.width()?!0:!1},i.Utils.checkDisplay=function(e,n){var o=i.$("[data-uk-margin], [data-uk-grid-match], [data-uk-grid-margin], [data-uk-check-display]",e||document);return e&&!o.length&&(o=t(e)),o.trigger("display.uk.check"),n&&("string"!=typeof n&&(n='[class*="uk-animation-"]'),o.find(n).each(function(){var t=i.$(this),e=t.attr("class"),n=e.match(/uk-animation-(.+)/);t.removeClass(n[0]).width(),t.addClass(n[0])})),o},i.Utils.options=function(e){if("string"!=t.type(e))return e;-1!=e.indexOf(":")&&"}"!=e.trim().substr(-1)&&(e="{"+e+"}");var n=e?e.indexOf("{"):-1,o={};if(-1!=n)try{o=i.Utils.str2json(e.substr(n))}catch(s){}return o},i.Utils.animate=function(e,n){var o=t.Deferred();return e=i.$(e),e.css("display","none").addClass(n).one(i.support.animation.end,function(){e.removeClass(n),o.resolve()}),e.css("display",""),o.promise()},i.Utils.uid=function(t){return(t||"id")+(new Date).getTime()+"RAND"+Math.ceil(1e5*Math.random())},i.Utils.template=function(t,i){for(var e,n,o,s,a=t.replace(/\n/g,"\\n").replace(/\{\{\{\s*(.+?)\s*\}\}\}/g,"{{!$1}}").split(/(\{\{\s*(.+?)\s*\}\})/g),r=0,l=[],c=0;r/g, '>');}"].join("\n")),i?s(i):s},i.Utils.focus=function(i,e){if(i=t(i),!i.length)return i;var n,o=i.find("[autofocus]:first");return o.length?o.focus():(o=i.find(":input"+(e&&","+e||"")).first(),o.length?o.focus():(i.attr("tabindex")||(n=1e3,i.attr("tabindex",n)),i[0].focus(),n&&i.attr("tabindex",""),i))},i.Utils.events={},i.Utils.events.click=i.support.touch?"tap":"click",i.fn=function(e,n){var o=arguments,s=e.match(/^([a-z\-]+)(?:\.([a-z]+))?/i),a=s[1],r=s[2];return i[a]?this.each(function(){var e=t(this),s=e.data(a);s||e.data(a,s=i[a](this,r?void 0:n)),r&&s[r].apply(s,Array.prototype.slice.call(o,1))}):(t.error("UIkit component ["+a+"] does not exist."),this)},t.UIkit=i,t.fn.uk=i.fn,i.langdirection="rtl"==i.$html.attr("dir")?"right":"left",i.components={},i.component=function(e,n,o){if(i.components[e]&&!o)return i.components[e];var s=function(n,o){var a=this;return this.UIkit=i,this.element=n?i.$(n):null,this.options=t.extend(!0,{},this.defaults,o),this.plugins={},this.element&&this.element.data(e,this),this.init(),(this.options.plugins.length?this.options.plugins:Object.keys(s.plugins)).forEach(function(t){s.plugins[t].init&&(s.plugins[t].init(a),a.plugins[t]=!0)}),this.trigger("init.uk.component",[e,this]),this};return s.plugins={},t.extend(!0,s.prototype,{defaults:{plugins:[]},boot:function(){},init:function(){},on:function(t,e,n){return i.$(this.element||this).on(t,e,n)},one:function(t,e,n){return i.$(this.element||this).one(t,e,n)},off:function(t){return i.$(this.element||this).off(t)},trigger:function(t,e){return i.$(this.element||this).trigger(t,e)},find:function(t){return i.$(this.element?this.element:[]).find(t)},proxy:function(t,i){var e=this;i.split(" ").forEach(function(i){e[i]||(e[i]=function(){return t[i].apply(t,arguments)})})},mixin:function(t,i){var e=this;i.split(" ").forEach(function(i){e[i]||(e[i]=t[i].bind(e))})},option:function(){return 1==arguments.length?this.options[arguments[0]]||void 0:(2==arguments.length&&(this.options[arguments[0]]=arguments[1]),void 0)}},n),this.components[e]=s,this[e]=function(){var n,o;if(arguments.length)switch(arguments.length){case 1:"string"==typeof arguments[0]||arguments[0].nodeType||arguments[0]instanceof jQuery?n=t(arguments[0]):o=arguments[0];break;case 2:n=t(arguments[0]),o=arguments[1]}return n&&n.data(e)?n.data(e):new i.components[e](n,o)},i.domready&&i.component.boot(e),s},i.plugin=function(t,i,e){this.components[t].plugins[i]=e},i.component.boot=function(t){i.components[t].prototype&&i.components[t].prototype.boot&&!i.components[t].booted&&(i.components[t].prototype.boot.apply(i,[]),i.components[t].booted=!0)},i.component.bootComponents=function(){for(var t in i.components)i.component.boot(t)},i.domObservers=[],i.domready=!1,i.ready=function(t){i.domObservers.push(t),i.domready&&t(document)},i.on=function(t,e,n){return t&&t.indexOf("ready.uk.dom")>-1&&i.domready&&e.apply(i.$doc),i.$doc.on(t,e,n)},i.one=function(t,e,n){return t&&t.indexOf("ready.uk.dom")>-1&&i.domready?(e.apply(i.$doc),i.$doc):i.$doc.one(t,e,n)},i.trigger=function(t,e){return i.$doc.trigger(t,e)},i.domObserve=function(t,e){i.support.mutationobserver&&(e=e||function(){},i.$(t).each(function(){var t=this,n=i.$(t);if(!n.data("observer"))try{var o=new i.support.mutationobserver(i.Utils.debounce(function(){e.apply(t,[n]),n.trigger("changed.uk.dom")},50),{childList:!0,subtree:!0});o.observe(t,{childList:!0,subtree:!0}),n.data("observer",o)}catch(s){}}))},i.init=function(t){t=t||document,i.domObservers.forEach(function(i){i(t)})},i.on("domready.uk.dom",function(){i.init(),i.domready&&i.Utils.checkDisplay()}),document.addEventListener("DOMContentLoaded",function(){var e=function(){i.$body=i.$("body"),i.trigger("beforeready.uk.dom"),i.component.bootComponents();var e=requestAnimationFrame(function(){var t={dir:{x:0,y:0},x:window.pageXOffset,y:window.pageYOffset},n=function(){var o=window.pageXOffset,s=window.pageYOffset;(t.x!=o||t.y!=s)&&(t.dir.x=o!=t.x?o>t.x?1:-1:0,t.dir.y=s!=t.y?s>t.y?1:-1:0,t.x=o,t.y=s,i.$doc.trigger("scrolling.uk.document",[{dir:{x:t.dir.x,y:t.dir.y},x:o,y:s}])),cancelAnimationFrame(e),e=requestAnimationFrame(n)};return i.support.touch&&i.$html.on("touchmove touchend MSPointerMove MSPointerUp pointermove pointerup",n),(t.x||t.y)&&n(),n}());if(i.trigger("domready.uk.dom"),i.support.touch&&navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&i.$win.on("load orientationchange resize",i.Utils.debounce(function(){var i=function(){return t(".uk-height-viewport").css("height",window.innerHeight),i};return i()}(),100)),i.trigger("afterready.uk.dom"),i.domready=!0,i.support.mutationobserver){var n=i.Utils.debounce(function(){requestAnimationFrame(function(){i.init(document.body)})},10);new i.support.mutationobserver(function(t){var i=!1;t.every(function(t){if("childList"!=t.type)return!0;for(var e,n=0;n=Math.abs(e-n)?t-i>0?"Left":"Right":e-n>0?"Up":"Down"}function e(){c=null,d.last&&(void 0!==d.el&&d.el.trigger("longTap"),d={})}function n(){c&&clearTimeout(c),c=null}function o(){a&&clearTimeout(a),r&&clearTimeout(r),l&&clearTimeout(l),c&&clearTimeout(c),a=r=l=c=null,d={}}function s(t){return t.pointerType==t.MSPOINTER_TYPE_TOUCH&&t.isPrimary}if(!t.fn.swipeLeft){var a,r,l,c,u,d={},h=750,p="ontouchstart"in window,f=window.PointerEvent,m=p||window.DocumentTouch&&document instanceof DocumentTouch||navigator.msPointerEnabled&&navigator.msMaxTouchPoints>0||navigator.pointerEnabled&&navigator.maxTouchPoints>0;t(function(){var g,v,k,w=0,b=0;"MSGesture"in window&&(u=new MSGesture,u.target=document.body),t(document).on("MSGestureEnd gestureend",function(t){var i=t.originalEvent.velocityX>1?"Right":t.originalEvent.velocityX<-1?"Left":t.originalEvent.velocityY>1?"Down":t.originalEvent.velocityY<-1?"Up":null;i&&void 0!==d.el&&(d.el.trigger("swipe"),d.el.trigger("swipe"+i))}).on("touchstart MSPointerDown pointerdown",function(i){("MSPointerDown"!=i.type||s(i.originalEvent))&&(k="MSPointerDown"==i.type||"pointerdown"==i.type?i:i.originalEvent.touches[0],g=Date.now(),v=g-(d.last||g),d.el=t("tagName"in k.target?k.target:k.target.parentNode),a&&clearTimeout(a),d.x1=k.pageX,d.y1=k.pageY,v>0&&250>=v&&(d.isDoubleTap=!0),d.last=g,c=setTimeout(e,h),i.originalEvent&&i.originalEvent.pointerId&&u&&("MSPointerDown"==i.type||"pointerdown"==i.type||"touchstart"==i.type)&&u.addPointer(i.originalEvent.pointerId))}).on("touchmove MSPointerMove pointermove",function(t){("MSPointerMove"!=t.type||s(t.originalEvent))&&(k="MSPointerMove"==t.type||"pointermove"==t.type?t:t.originalEvent.touches[0],n(),d.x2=k.pageX,d.y2=k.pageY,w+=Math.abs(d.x1-d.x2),b+=Math.abs(d.y1-d.y2))}).on("touchend MSPointerUp pointerup",function(e){("MSPointerUp"!=e.type||s(e.originalEvent))&&(n(),d.x2&&Math.abs(d.x1-d.x2)>30||d.y2&&Math.abs(d.y1-d.y2)>30?l=setTimeout(function(){void 0!==d.el&&(d.el.trigger("swipe"),d.el.trigger("swipe"+i(d.x1,d.x2,d.y1,d.y2))),d={}},0):"last"in d&&(isNaN(w)||30>w&&30>b?r=setTimeout(function(){var i=t.Event("tap");i.cancelTouch=o,void 0!==d.el&&d.el.trigger(i),d.isDoubleTap?(void 0!==d.el&&d.el.trigger("doubleTap"),d={}):a=setTimeout(function(){a=null,void 0!==d.el&&d.el.trigger("singleTap"),d={}},250)},0):d={},w=b=0))}).on("touchcancel MSPointerCancel pointercancel",function(t){("touchcancel"==t.type&&p&&m||!p&&"pointercancel"==t.type&&f)&&o()}),t(window).on("scroll",o)}),["swipe","swipeLeft","swipeRight","swipeUp","swipeDown","doubleTap","tap","singleTap","longTap"].forEach(function(i){t.fn[i]=function(e){return t(this).on(i,e)}})}}(jQuery),function(t){"use strict";var i=[];t.component("stackMargin",{defaults:{cls:"uk-margin-small-top",rowfirst:!1,observe:!1},boot:function(){t.ready(function(i){t.$("[data-uk-margin]",i).each(function(){var i=t.$(this);i.data("stackMargin")||t.stackMargin(i,t.Utils.options(i.attr("data-uk-margin")))})})},init:function(){var e=this;t.$win.on("resize orientationchange",function(){var i=function(){e.process()};return t.$(function(){i(),t.$win.on("load",i)}),t.Utils.debounce(i,20)}()),this.on("display.uk.check",function(){this.element.is(":visible")&&this.process()}.bind(this)),this.options.observe&&t.domObserve(this.element,function(){e.element.is(":visible")&&e.process()}),i.push(this)},process:function(){var i=this.element.children();if(t.Utils.stackMargin(i,this.options),!this.options.rowfirst||!i.length)return this;var e={},n=!1;return i.removeClass(this.options.rowfirst).each(function(i,o){o=t.$(this),"none"!=this.style.display&&(i=o.offset().left,((e[i]=e[i]||[])&&e[i]).push(this),n=n===!1?i:Math.min(n,i))}),t.$(e[n]).addClass(this.options.rowfirst),this}}),function(){var i=[],e=function(t){if(t.is(":visible")){var i=t.parent().width(),e=t.data("width"),n=i/e,o=Math.floor(n*t.data("height"));t.css({height:e>i?o:t.data("height")})}};t.component("responsiveElement",{defaults:{},boot:function(){t.ready(function(i){t.$("iframe.uk-responsive-width, [data-uk-responsive]",i).each(function(){var i,e=t.$(this);e.data("responsiveElement")||(i=t.responsiveElement(e,{}))})})},init:function(){var t=this.element;t.attr("width")&&t.attr("height")&&(t.data({width:t.attr("width"),height:t.attr("height")}).on("display.uk.check",function(){e(t)}),e(t),i.push(t))}}),t.$win.on("resize load",t.Utils.debounce(function(){i.forEach(function(t){e(t)})},15))}(),t.Utils.stackMargin=function(i,e){e=t.$.extend({cls:"uk-margin-small-top"},e),i=t.$(i).removeClass(e.cls);var n=!1;i.each(function(i,e,o,s){s=t.$(this),"none"!=s.css("display")&&(i=s.offset(),e=s.outerHeight(),o=i.top+e,s.data({ukMarginPos:o,ukMarginTop:i.top}),(n===!1||i.topn.top&&i.data("ukMarginPos")>n.pos&&i.addClass(e.cls)})},t.Utils.matchHeights=function(i,e){i=t.$(i).css("min-height",""),e=t.$.extend({row:!0},e);var n=function(i){if(!(i.length<2)){var e=0;i.each(function(){e=Math.max(e,t.$(this).outerHeight())}).each(function(){var i=t.$(this),n=e-("border-box"==i.css("box-sizing")?0:i.outerHeight()-i.height());i.css("min-height",n+"px")})}};e.row?(i.first().width(),setTimeout(function(){var e=!1,o=[];i.each(function(){var i=t.$(this),s=i.offset().top;s!=e&&o.length&&(n(t.$(o)),o=[],s=i.offset().top),o.push(i),e=s}),o.length&&n(t.$(o))},0)):n(i)},function(i){t.Utils.inlineSvg=function(e,n){t.$(e||'img[src$=".svg"]',n||document).each(function(){var e=t.$(this),n=e.attr("src");if(!i[n]){var o=t.$.Deferred();t.$.get(n,{nc:Math.random()},function(i){o.resolve(t.$(i).find("svg"))}),i[n]=o.promise()}i[n].then(function(i){var n=t.$(i).clone();e.attr("id")&&n.attr("id",e.attr("id")),e.attr("class")&&n.attr("class",e.attr("class")),e.attr("style")&&n.attr("style",e.attr("style")),e.attr("width")&&(n.attr("width",e.attr("width")),e.attr("height")||n.removeAttr("height")),e.attr("height")&&(n.attr("height",e.attr("height")),e.attr("width")||n.removeAttr("width")),e.replaceWith(n)})})},t.ready(function(i){t.Utils.inlineSvg("[data-uk-svg]",i)})}({}),t.Utils.getCssVar=function(t){var i,e=document.documentElement,n=e.appendChild(document.createElement("div"));n.classList.add("var-"+t);try{i=JSON.parse(i=getComputedStyle(n,":before").content.replace(/^["'](.*)["']$/,"$1"))}catch(o){i=void 0}return e.removeChild(n),i}}(UIkit2),function(t){"use strict";function i(i,e){e=t.$.extend({duration:1e3,transition:"easeOutExpo",offset:0,complete:function(){}},e);var n=i.offset().top-e.offset,o=t.$doc.height(),s=window.innerHeight;n+s>o&&(n=o-s),t.$("html,body").stop().animate({scrollTop:n},e.duration,e.transition).promise().done(e.complete)}t.component("smoothScroll",{boot:function(){t.$html.on("click.smooth-scroll.uikit","[data-uk-smooth-scroll]",function(){var i=t.$(this);if(!i.data("smoothScroll")){{t.smoothScroll(i,t.Utils.options(i.attr("data-uk-smooth-scroll")))}i.trigger("click")}return!1})},init:function(){var e=this;this.on("click",function(n){n.preventDefault(),i(t.$(this.hash).length?t.$(this.hash):t.$("body"),e.options)})}}),t.Utils.scrollToElement=i,t.$.easing.easeOutExpo||(t.$.easing.easeOutExpo=function(t,i,e,n,o){return i==o?e+n:n*(-Math.pow(2,-10*i/o)+1)+e})}(UIkit2),function(t){"use strict";var i=t.$win,e=t.$doc,n=[],o=function(){for(var t=0;t=u)return e[t]}();if(!d)return;c.options.closest?(o.blur().closest(l).removeClass(r),s=o.filter("a[href='#"+d.attr("id")+"']").closest(l).addClass(r)):s=o.removeClass(r).filter("a[href='#"+d.attr("id")+"']").addClass(r),c.element.trigger("inview.uk.scrollspynav",[d,s])}};this.options.smoothscroll&&t.smoothScroll&&o.each(function(){t.smoothScroll(this,c.options.smoothscroll)}),u(),this.element.data("scrollspynav",this),this.check=u,s.push(this)}})}(UIkit2),function(t){"use strict";var i=[];t.component("toggle",{defaults:{target:!1,cls:"uk-hidden",animation:!1,duration:200},boot:function(){t.ready(function(e){t.$("[data-uk-toggle]",e).each(function(){var i=t.$(this);if(!i.data("toggle")){t.toggle(i,t.Utils.options(i.attr("data-uk-toggle")))}}),setTimeout(function(){i.forEach(function(t){t.getToggles()})},0)})},init:function(){var t=this;this.aria=-1!==this.options.cls.indexOf("uk-hidden"),this.on("click",function(i){t.element.is('a[href="#"]')&&i.preventDefault(),t.toggle()}),i.push(this)},toggle:function(){if(this.getToggles(),this.totoggle.length){if(this.options.animation&&t.support.animation){var i=this,e=this.options.animation.split(",");1==e.length&&(e[1]=e[0]),e[0]=e[0].trim(),e[1]=e[1].trim(),this.totoggle.css("animation-duration",this.options.duration+"ms"),this.totoggle.each(function(){var n=t.$(this);n.hasClass(i.options.cls)?(n.toggleClass(i.options.cls),t.Utils.animate(n,e[0]).then(function(){n.css("animation-duration",""),t.Utils.checkDisplay(n)})):t.Utils.animate(this,e[1]+" uk-animation-reverse").then(function(){n.toggleClass(i.options.cls).css("animation-duration",""),t.Utils.checkDisplay(n)})})}else this.totoggle.toggleClass(this.options.cls),t.Utils.checkDisplay(this.totoggle);this.updateAria()}},getToggles:function(){this.totoggle=this.options.target?t.$(this.options.target):[],this.updateAria()},updateAria:function(){this.aria&&this.totoggle.length&&this.totoggle.not("[aria-hidden]").each(function(){t.$(this).attr("aria-hidden",t.$(this).hasClass("uk-hidden"))})}})}(UIkit2),function(t){"use strict";t.component("alert",{defaults:{fade:!0,duration:200,trigger:".uk-alert-close"},boot:function(){t.$html.on("click.alert.uikit","[data-uk-alert]",function(i){var e=t.$(this);if(!e.data("alert")){var n=t.alert(e,t.Utils.options(e.attr("data-uk-alert")));t.$(i.target).is(n.options.trigger)&&(i.preventDefault(),n.close())}})},init:function(){var t=this;this.on("click",this.options.trigger,function(i){i.preventDefault(),t.close()})},close:function(){var t=this.trigger("close.uk.alert"),i=function(){this.trigger("closed.uk.alert").remove()}.bind(this);this.options.fade?t.css("overflow","hidden").css("max-height",t.height()).animate({height:0,opacity:0,paddingTop:0,paddingBottom:0,marginTop:0,marginBottom:0},this.options.duration,i):i()}})}(UIkit2),function(t){"use strict";t.component("buttonRadio",{defaults:{activeClass:"uk-active",target:".uk-button"},boot:function(){t.$html.on("click.buttonradio.uikit","[data-uk-button-radio]",function(i){var e=t.$(this);if(!e.data("buttonRadio")){var n=t.buttonRadio(e,t.Utils.options(e.attr("data-uk-button-radio"))),o=t.$(i.target);o.is(n.options.target)&&o.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter("."+i.options.activeClass).attr("aria-checked","true"),this.on("click",this.options.target,function(e){var n=t.$(this);n.is('a[href="#"]')&&e.preventDefault(),i.find(i.options.target).not(n).removeClass(i.options.activeClass).blur(),n.addClass(i.options.activeClass),i.find(i.options.target).not(n).attr("aria-checked","false"),n.attr("aria-checked","true"),i.trigger("change.uk.button",[n])})},getSelected:function(){return this.find("."+this.options.activeClass)}}),t.component("buttonCheckbox",{defaults:{activeClass:"uk-active",target:".uk-button"},boot:function(){t.$html.on("click.buttoncheckbox.uikit","[data-uk-button-checkbox]",function(i){var e=t.$(this);if(!e.data("buttonCheckbox")){var n=t.buttonCheckbox(e,t.Utils.options(e.attr("data-uk-button-checkbox"))),o=t.$(i.target);o.is(n.options.target)&&o.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter("."+i.options.activeClass).attr("aria-checked","true"),this.on("click",this.options.target,function(e){var n=t.$(this);n.is('a[href="#"]')&&e.preventDefault(),n.toggleClass(i.options.activeClass).blur(),n.attr("aria-checked",n.hasClass(i.options.activeClass)),i.trigger("change.uk.button",[n])})},getSelected:function(){return this.find("."+this.options.activeClass)}}),t.component("button",{defaults:{},boot:function(){t.$html.on("click.button.uikit","[data-uk-button]",function(){var i=t.$(this);if(!i.data("button")){{t.button(i,t.Utils.options(i.attr("data-uk-button")))}i.trigger("click")}})},init:function(){var t=this;this.element.attr("aria-pressed",this.element.hasClass("uk-active")),this.on("click",function(i){t.element.is('a[href="#"]')&&i.preventDefault(),t.toggle(),t.trigger("change.uk.button",[t.element.blur().hasClass("uk-active")])})},toggle:function(){this.element.toggleClass("uk-active"),this.element.attr("aria-pressed",this.element.hasClass("uk-active"))}})}(UIkit2),function(t){"use strict";function i(i,e,n,o){if(i=t.$(i),e=t.$(e),n=n||window.innerWidth,o=o||i.offset(),e.length){var s=e.outerWidth();if(i.css("min-width",s),"right"==t.langdirection){var a=n-(e.offset().left+s),r=n-(i.offset().left+i.outerWidth());i.css("margin-right",a-r)}else i.css("margin-left",e.offset().left-o.left)}}var e,n=!1,o={x:{"bottom-left":"bottom-right","bottom-right":"bottom-left","bottom-center":"bottom-center","top-left":"top-right","top-right":"top-left","top-center":"top-center","left-top":"right-top","left-bottom":"right-bottom","left-center":"right-center","right-top":"left-top","right-bottom":"left-bottom","right-center":"left-center"},y:{"bottom-left":"top-left","bottom-right":"top-right","bottom-center":"top-center","top-left":"bottom-left","top-right":"bottom-right","top-center":"bottom-center","left-top":"left-bottom","left-bottom":"left-top","left-center":"left-center","right-top":"right-bottom","right-bottom":"right-top","right-center":"right-center"},xy:{"bottom-left":"top-right","bottom-right":"top-left","bottom-center":"top-center","top-left":"bottom-right","top-right":"bottom-left","top-center":"bottom-center","left-top":"right-bottom","left-bottom":"right-top","left-center":"right-center","right-top":"left-bottom","right-bottom":"left-top","right-center":"left-center"}};t.component("dropdown",{defaults:{mode:"hover",pos:"bottom-left",offset:0,remaintime:800,justify:!1,boundary:t.$win,delay:0,dropdownSelector:".uk-dropdown,.uk-dropdown-blank",hoverDelayIdle:250,preventflip:!1},remainIdle:!1,boot:function(){var i=t.support.touch?"click":"mouseenter";t.$html.on(i+".dropdown.uikit focus pointerdown","[data-uk-dropdown]",function(e){var n=t.$(this);if(!n.data("dropdown")){var o=t.dropdown(n,t.Utils.options(n.attr("data-uk-dropdown")));("click"==e.type||"mouseenter"==e.type&&"hover"==o.options.mode)&&o.element.trigger(i),o.dropdown.length&&e.preventDefault()}})},init:function(){var i=this;this.dropdown=this.find(this.options.dropdownSelector),this.offsetParent=this.dropdown.parents().filter(function(){return-1!==t.$.inArray(t.$(this).css("position"),["relative","fixed","absolute"])}).slice(0,1),this.offsetParent.length||(this.offsetParent=this.element),this.centered=this.dropdown.hasClass("uk-dropdown-center"),this.justified=this.options.justify?t.$(this.options.justify):!1,this.boundary=t.$(this.options.boundary),this.boundary.length||(this.boundary=t.$win),this.dropdown.hasClass("uk-dropdown-up")&&(this.options.pos="top-left"),this.dropdown.hasClass("uk-dropdown-flip")&&(this.options.pos=this.options.pos.replace("left","right")),this.dropdown.hasClass("uk-dropdown-center")&&(this.options.pos=this.options.pos.replace(/(left|right)/,"center")),this.element.attr("aria-haspopup","true"),this.element.attr("aria-expanded",this.element.hasClass("uk-open")),this.dropdown.attr("aria-hidden","true"),"click"==this.options.mode||t.support.touch?this.on("click.uk.dropdown",function(e){var n=t.$(e.target);n.parents(i.options.dropdownSelector).length||((n.is("a[href='#']")||n.parent().is("a[href='#']")||i.dropdown.length&&!i.dropdown.is(":visible"))&&e.preventDefault(),n.blur()),i.element.hasClass("uk-open")?(!i.dropdown.find(e.target).length||n.is(".uk-dropdown-close")||n.parents(".uk-dropdown-close").length)&&i.hide():i.show()}):this.on("mouseenter",function(){i.trigger("pointerenter.uk.dropdown",[i]),i.remainIdle&&clearTimeout(i.remainIdle),e&&clearTimeout(e),n&&n==i||(e=n&&n!=i?setTimeout(function(){e=setTimeout(i.show.bind(i),i.options.delay)},i.options.hoverDelayIdle):setTimeout(i.show.bind(i),i.options.delay))}).on("mouseleave",function(){e&&clearTimeout(e),i.remainIdle=setTimeout(function(){n&&n==i&&i.hide()},i.options.remaintime),i.trigger("pointerleave.uk.dropdown",[i])}).on("click",function(e){var o=t.$(e.target);return i.remainIdle&&clearTimeout(i.remainIdle),n&&n==i?((!i.dropdown.find(e.target).length||o.is(".uk-dropdown-close")||o.parents(".uk-dropdown-close").length)&&i.hide(),void 0):((o.is("a[href='#']")||o.parent().is("a[href='#']"))&&e.preventDefault(),i.show(),void 0)})},show:function(){t.$html.off("click.outer.dropdown"),n&&n!=this&&n.hide(!0),e&&clearTimeout(e),this.trigger("beforeshow.uk.dropdown",[this]),this.checkDimensions(),this.element.addClass("uk-open"),this.element.attr("aria-expanded","true"),this.dropdown.attr("aria-hidden","false"),this.trigger("show.uk.dropdown",[this]),t.Utils.checkDisplay(this.dropdown,!0),t.Utils.focus(this.dropdown),n=this,this.registerOuterClick()},hide:function(t){this.trigger("beforehide.uk.dropdown",[this,t]),this.element.removeClass("uk-open"),this.remainIdle&&clearTimeout(this.remainIdle),this.remainIdle=!1,this.element.attr("aria-expanded","false"),this.dropdown.attr("aria-hidden","true"),this.trigger("hide.uk.dropdown",[this,t]),n==this&&(n=!1)},registerOuterClick:function(){var i=this;t.$html.off("click.outer.dropdown"),setTimeout(function(){t.$html.on("click.outer.dropdown",function(o){e&&clearTimeout(e);t.$(o.target);n!=i||i.element.find(o.target).length||(i.hide(!0),t.$html.off("click.outer.dropdown"))})},10)},checkDimensions:function(){if(this.dropdown.length){this.dropdown.removeClass("uk-dropdown-top uk-dropdown-bottom uk-dropdown-left uk-dropdown-right uk-dropdown-stack uk-dropdown-autoflip").css({topLeft:"",left:"",marginLeft:"",marginRight:""}),this.justified&&this.justified.length&&this.dropdown.css("min-width","");var e,n=t.$.extend({},this.offsetParent.offset(),{width:this.offsetParent[0].offsetWidth,height:this.offsetParent[0].offsetHeight}),s=this.options.offset,a=this.dropdown,r=(a.show().offset()||{left:0,top:0},a.outerWidth()),l=a.outerHeight(),c=this.boundary.width(),u=(this.boundary[0]!==window&&this.boundary.offset()?this.boundary.offset():{top:0,left:0},this.options.pos),d={"bottom-left":{top:0+n.height+s,left:0},"bottom-right":{top:0+n.height+s,left:0+n.width-r},"bottom-center":{top:0+n.height+s,left:0+n.width/2-r/2},"top-left":{top:0-l-s,left:0},"top-right":{top:0-l-s,left:0+n.width-r},"top-center":{top:0-l-s,left:0+n.width/2-r/2},"left-top":{top:0,left:0-r-s},"left-bottom":{top:0+n.height-l,left:0-r-s},"left-center":{top:0+n.height/2-l/2,left:0-r-s},"right-top":{top:0,left:0+n.width+s},"right-bottom":{top:0+n.height-l,left:0+n.width+s},"right-center":{top:0+n.height/2-l/2,left:0+n.width+s}},h={}; +if(e=u.split("-"),h=d[u]?d[u]:d["bottom-left"],this.justified&&this.justified.length)i(a.css({left:0}),this.justified,c);else if(this.options.preventflip!==!0){var p;switch(this.checkBoundary(n.left+h.left,n.top+h.top,r,l,c)){case"x":"x"!==this.options.preventflip&&(p=o.x[u]||"right-top");break;case"y":"y"!==this.options.preventflip&&(p=o.y[u]||"top-left");break;case"xy":this.options.preventflip||(p=o.xy[u]||"right-bottom")}p&&(e=p.split("-"),h=d[p]?d[p]:d["bottom-left"],a.addClass("uk-dropdown-autoflip"),this.checkBoundary(n.left+h.left,n.top+h.top,r,l,c)&&(e=u.split("-"),h=d[u]?d[u]:d["bottom-left"]))}r>c&&(a.addClass("uk-dropdown-stack"),this.trigger("stack.uk.dropdown",[this])),a.css(h).css("display","").addClass("uk-dropdown-"+e[0])}},checkBoundary:function(i,e,n,o,s){var a="";return(0>i||i-t.$win.scrollLeft()+n>s)&&(a+="x"),(e-t.$win.scrollTop()<0||e-t.$win.scrollTop()+o>window.innerHeight)&&(a+="y"),a}}),t.component("dropdownOverlay",{defaults:{justify:!1,cls:"",duration:200},boot:function(){t.ready(function(i){t.$("[data-uk-dropdown-overlay]",i).each(function(){var i=t.$(this);i.data("dropdownOverlay")||t.dropdownOverlay(i,t.Utils.options(i.attr("data-uk-dropdown-overlay")))})})},init:function(){var e=this;this.justified=this.options.justify?t.$(this.options.justify):!1,this.overlay=this.element.find("uk-dropdown-overlay"),this.overlay.length||(this.overlay=t.$('
          ').appendTo(this.element)),this.overlay.addClass(this.options.cls),this.on({"beforeshow.uk.dropdown":function(t,n){e.dropdown=n,e.justified&&e.justified.length&&i(e.overlay.css({display:"block",marginLeft:"",marginRight:""}),e.justified,e.justified.outerWidth())},"show.uk.dropdown":function(){var i=e.dropdown.dropdown.outerHeight(!0);e.dropdown.element.removeClass("uk-open"),e.overlay.stop().css("display","block").animate({height:i},e.options.duration,function(){e.dropdown.dropdown.css("visibility",""),e.dropdown.element.addClass("uk-open"),t.Utils.checkDisplay(e.dropdown.dropdown,!0)}),e.pointerleave=!1},"hide.uk.dropdown":function(){e.overlay.stop().animate({height:0},e.options.duration)},"pointerenter.uk.dropdown":function(){clearTimeout(e.remainIdle)},"pointerleave.uk.dropdown":function(){e.pointerleave=!0}}),this.overlay.on({mouseenter:function(){e.remainIdle&&(clearTimeout(e.dropdown.remainIdle),clearTimeout(e.remainIdle))},mouseleave:function(){e.pointerleave&&n&&(e.remainIdle=setTimeout(function(){n&&n.hide()},n.options.remaintime))}})}})}(UIkit2),function(t){"use strict";var i=[];t.component("gridMatchHeight",{defaults:{target:!1,row:!0,ignorestacked:!1,observe:!1},boot:function(){t.ready(function(i){t.$("[data-uk-grid-match]",i).each(function(){var i,e=t.$(this);e.data("gridMatchHeight")||(i=t.gridMatchHeight(e,t.Utils.options(e.attr("data-uk-grid-match"))))})})},init:function(){var e=this;this.columns=this.element.children(),this.elements=this.options.target?this.find(this.options.target):this.columns,this.columns.length&&(t.$win.on("load resize orientationchange",function(){var i=function(){e.element.is(":visible")&&e.match()};return t.$(function(){i()}),t.Utils.debounce(i,50)}()),this.options.observe&&t.domObserve(this.element,function(){e.element.is(":visible")&&e.match()}),this.on("display.uk.check",function(){this.element.is(":visible")&&this.match()}.bind(this)),i.push(this))},match:function(){var i=this.columns.filter(":visible:first");if(i.length){var e=Math.ceil(100*parseFloat(i.css("width"))/parseFloat(i.parent().css("width")))>=100;return e&&!this.options.ignorestacked?this.revert():t.Utils.matchHeights(this.elements,this.options),this}},revert:function(){return this.elements.css("min-height",""),this}}),t.component("gridMargin",{defaults:{cls:"uk-grid-margin",rowfirst:"uk-row-first"},boot:function(){t.ready(function(i){t.$("[data-uk-grid-margin]",i).each(function(){var i,e=t.$(this);e.data("gridMargin")||(i=t.gridMargin(e,t.Utils.options(e.attr("data-uk-grid-margin"))))})})},init:function(){t.stackMargin(this.element,this.options)}})}(UIkit2),function(t){"use strict";function i(i,e){return e?("object"==typeof i?(i=i instanceof jQuery?i:t.$(i),i.parent().length&&(e.persist=i,e.persist.data("modalPersistParent",i.parent()))):i="string"==typeof i||"number"==typeof i?t.$("
          ").html(i):t.$("
          ").html("UIkit2.modal Error: Unsupported data type: "+typeof i),i.appendTo(e.element.find(".uk-modal-dialog")),e):void 0}var e,n=!1,o=0,s=t.$html;t.$win.on("resize orientationchange",t.Utils.debounce(function(){t.$(".uk-modal.uk-open").each(function(){return t.$(this).data("modal")&&t.$(this).data("modal").resize()})},150)),t.component("modal",{defaults:{keyboard:!0,bgclose:!0,minScrollHeight:150,center:!1,modal:!0},scrollable:!1,transition:!1,hasTransitioned:!0,init:function(){if(e||(e=t.$("body")),this.element.length){var i=this;this.paddingdir="padding-"+("left"==t.langdirection?"right":"left"),this.dialog=this.find(".uk-modal-dialog"),this.active=!1,this.element.attr("aria-hidden",this.element.hasClass("uk-open")),this.on("click",".uk-modal-close",function(t){t.preventDefault(),i.hide()}).on("click",function(e){var n=t.$(e.target);n[0]==i.element[0]&&i.options.bgclose&&i.hide()}),t.domObserve(this.element,function(){i.resize()})}},toggle:function(){return this[this.isActive()?"hide":"show"]()},show:function(){if(this.element.length){var i=this;if(!this.isActive())return this.options.modal&&n&&n.hide(!0),this.element.removeClass("uk-open").show(),this.resize(!0),this.options.modal&&(n=this),this.active=!0,o++,t.support.transition?(this.hasTransitioned=!1,this.element.one(t.support.transition.end,function(){i.hasTransitioned=!0,t.Utils.focus(i.dialog,"a[href]")}).addClass("uk-open")):(this.element.addClass("uk-open"),t.Utils.focus(this.dialog,"a[href]")),s.addClass("uk-modal-page").height(),this.element.attr("aria-hidden","false"),this.element.trigger("show.uk.modal"),t.Utils.checkDisplay(this.dialog,!0),this}},hide:function(i){if(!i&&t.support.transition&&this.hasTransitioned){var e=this;this.one(t.support.transition.end,function(){e._hide()}).removeClass("uk-open")}else this._hide();return this},resize:function(t){if(this.isActive()||t){var i=e.width();if(this.scrollbarwidth=window.innerWidth-i,e.css(this.paddingdir,this.scrollbarwidth),this.element.css("overflow-y",this.scrollbarwidth?"scroll":"auto"),!this.updateScrollable()&&this.options.center){var n=this.dialog.outerHeight(),o=parseInt(this.dialog.css("margin-top"),10)+parseInt(this.dialog.css("margin-bottom"),10);n+oi?20:i)-e;return t.css({maxHeight:o0?o--:o=0,this.element.hide().removeClass("uk-open"),this.element.attr("aria-hidden","true"),o||(s.removeClass("uk-modal-page"),e.css(this.paddingdir,"")),n===this&&(n=!1),this.trigger("hide.uk.modal")},isActive:function(){return this.element.hasClass("uk-open")}}),t.component("modalTrigger",{boot:function(){t.$html.on("click.modal.uikit","[data-uk-modal]",function(i){var e=t.$(this);if(e.is("a")&&i.preventDefault(),!e.data("modalTrigger")){var n=t.modalTrigger(e,t.Utils.options(e.attr("data-uk-modal")));n.show()}}),t.$html.on("keydown.modal.uikit",function(t){n&&27===t.keyCode&&n.options.keyboard&&(t.preventDefault(),n.hide())})},init:function(){var i=this;this.options=t.$.extend({target:i.element.is("a")?i.element.attr("href"):!1},this.options),this.modal=t.modal(this.options.target,this.options),this.on("click",function(t){t.preventDefault(),i.show()}),this.proxy(this.modal,"show hide isActive")}}),t.modal.dialog=function(e,n){var o=t.modal(t.$(t.modal.dialog.template).appendTo("body"),n);return o.on("hide.uk.modal",function(){o.persist&&(o.persist.appendTo(o.persist.data("modalPersistParent")),o.persist=!1),o.element.remove()}),i(e,o),o},t.modal.dialog.template='
          ',t.modal.alert=function(i,e){e=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},e);var n=t.modal.dialog(['
          '+String(i)+"
          ",'"].join(""),e);return n.on("show.uk.modal",function(){setTimeout(function(){n.element.find("button:first").focus()},50)}),n.show()},t.modal.confirm=function(i,e,n){var o=arguments.length>1&&arguments[arguments.length-1]?arguments[arguments.length-1]:{};e=t.$.isFunction(e)?e:function(){},n=t.$.isFunction(n)?n:function(){},o=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},t.$.isFunction(o)?{}:o);var s=t.modal.dialog(['
          '+String(i)+"
          ",'"].join(""),o);return s.element.find(".js-modal-confirm, .js-modal-confirm-cancel").on("click",function(){t.$(this).is(".js-modal-confirm")?e():n(),s.hide()}),s.on("show.uk.modal",function(){setTimeout(function(){s.element.find(".js-modal-confirm").focus()},50)}),s.show()},t.modal.prompt=function(i,e,n,o){n=t.$.isFunction(n)?n:function(){},o=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},o);var s=t.modal.dialog([i?'
          '+String(i)+"
          ":"",'

          ','"].join(""),o),a=s.element.find("input[type='text']").val(e||"").on("keyup",function(t){13==t.keyCode&&s.element.find(".js-modal-ok").trigger("click")});return s.element.find(".js-modal-ok").on("click",function(){n(a.val())!==!1&&s.hide()}),s.show()},t.modal.blockUI=function(i,e){var n=t.modal.dialog(['
          '+String(i||'
          ...
          ')+"
          "].join(""),t.$.extend({bgclose:!1,keyboard:!1,modal:!1},e));return n.content=n.element.find(".uk-modal-content:first"),n.show()},t.modal.labels={Ok:"Ok",Cancel:"Cancel"}}(UIkit2),function(t){"use strict";function i(i){var e=t.$(i),n="auto";if(e.is(":visible"))n=e.outerHeight();else{var o={position:e.css("position"),visibility:e.css("visibility"),display:e.css("display")};n=e.css({position:"absolute",visibility:"hidden",display:"block"}).outerHeight(),e.css(o)}return n}t.component("nav",{defaults:{toggle:'>li.uk-parent > a[href="#"]',lists:">li.uk-parent > ul",multiple:!1},boot:function(){t.ready(function(i){t.$("[data-uk-nav]",i).each(function(){var i=t.$(this);if(!i.data("nav")){t.nav(i,t.Utils.options(i.attr("data-uk-nav")))}})})},init:function(){var i=this;this.on("click.uk.nav",this.options.toggle,function(e){e.preventDefault();var n=t.$(this);i.open(n.parent()[0]==i.element[0]?n:n.parent("li"))}),this.update(),t.domObserve(this.element,function(){i.element.find(i.options.lists).not("[role]").length&&i.update()})},update:function(){var i=this;this.find(this.options.lists).each(function(){var e=t.$(this).attr("role","menu"),n=e.closest("li"),o=n.hasClass("uk-active");n.data("list-container")||(e.wrap('
          '),n.data("list-container",e.parent()[o?"removeClass":"addClass"]("uk-hidden"))),n.attr("aria-expanded",n.hasClass("uk-open")),o&&i.open(n,!0)})},open:function(e,n){var o=this,s=this.element,a=t.$(e),r=a.data("list-container");this.options.multiple||s.children(".uk-open").not(e).each(function(){var i=t.$(this);i.data("list-container")&&i.data("list-container").stop().animate({height:0},function(){t.$(this).parent().removeClass("uk-open").end().addClass("uk-hidden")})}),a.toggleClass("uk-open"),a.attr("aria-expanded",a.hasClass("uk-open")),r&&(a.hasClass("uk-open")&&r.removeClass("uk-hidden"),n?(r.stop().height(a.hasClass("uk-open")?"auto":0),a.hasClass("uk-open")||r.addClass("uk-hidden"),this.trigger("display.uk.check")):r.stop().animate({height:a.hasClass("uk-open")?i(r.find("ul:first")):0},function(){a.hasClass("uk-open")?r.css("height",""):r.addClass("uk-hidden"),o.trigger("display.uk.check")}))}})}(UIkit2),function(t){"use strict";var i={x:window.scrollX,y:window.scrollY},e=(t.$win,t.$doc,t.$html),n={show:function(n,o){if(n=t.$(n),n.length){o=t.$.extend({mode:"push"},o);var s=t.$("body"),a=n.find(".uk-offcanvas-bar:first"),r="right"==t.langdirection,l=a.hasClass("uk-offcanvas-bar-flip")?-1:1,c=l*(r?-1:1),u=window.innerWidth-s.width();i={x:window.pageXOffset,y:window.pageYOffset},a.attr("mode",o.mode),n.addClass("uk-active"),s.css({width:window.innerWidth-u,height:window.innerHeight}).addClass("uk-offcanvas-page"),("push"==o.mode||"reveal"==o.mode)&&s.css(r?"margin-right":"margin-left",(r?-1:1)*a.outerWidth()*c),"reveal"==o.mode&&a.css("clip","rect(0, "+a.outerWidth()+"px, 100vh, 0)"),e.css("margin-top",-1*i.y).width(),a.addClass("uk-offcanvas-bar-show"),this._initElement(n),a.trigger("show.uk.offcanvas",[n,a]),n.attr("aria-hidden","false")}},hide:function(n){var o=t.$("body"),s=t.$(".uk-offcanvas.uk-active"),a="right"==t.langdirection,r=s.find(".uk-offcanvas-bar:first"),l=function(){o.removeClass("uk-offcanvas-page").css({width:"",height:"",marginLeft:"",marginRight:""}),s.removeClass("uk-active"),r.removeClass("uk-offcanvas-bar-show"),e.css("margin-top",""),window.scrollTo(i.x,i.y),r.trigger("hide.uk.offcanvas",[s,r]),s.attr("aria-hidden","true")};s.length&&("none"==r.attr("mode")&&(n=!0),t.support.transition&&!n?(o.one(t.support.transition.end,function(){l()}).css(a?"margin-right":"margin-left",""),"reveal"==r.attr("mode")&&r.css("clip",""),setTimeout(function(){r.removeClass("uk-offcanvas-bar-show")},0)):l())},_initElement:function(i){i.data("OffcanvasInit")||(i.on("click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas",function(i){var e=t.$(i.target);if(!i.type.match(/swipe/)&&!e.hasClass("uk-offcanvas-close")){if(e.hasClass("uk-offcanvas-bar"))return;if(e.parents(".uk-offcanvas-bar:first").length)return}i.stopImmediatePropagation(),n.hide()}),i.on("click",'a[href*="#"]',function(){var i=t.$(this),e=i.attr("href");"#"!=e&&(t.$doc.one("hide.uk.offcanvas",function(){var n;try{n=t.$(i[0].hash)}catch(o){n=""}n.length||(n=t.$('[name="'+i[0].hash.replace("#","")+'"]')),n.length&&t.Utils.scrollToElement?t.Utils.scrollToElement(n,t.Utils.options(i.attr("data-uk-smooth-scroll")||"{}")):window.location.href=e}),n.hide())}),i.data("OffcanvasInit",!0))}};t.component("offcanvasTrigger",{boot:function(){e.on("click.offcanvas.uikit","[data-uk-offcanvas]",function(i){i.preventDefault();var e=t.$(this);if(!e.data("offcanvasTrigger")){{t.offcanvasTrigger(e,t.Utils.options(e.attr("data-uk-offcanvas")))}e.trigger("click")}}),e.on("keydown.uk.offcanvas",function(t){27===t.keyCode&&n.hide()})},init:function(){var i=this;this.options=t.$.extend({target:i.element.is("a")?i.element.attr("href"):!1,mode:"push"},this.options),this.on("click",function(t){t.preventDefault(),n.show(i.options.target,i.options)})}}),t.offcanvas=n}(UIkit2),function(t){"use strict";function i(i,e,n){var o,s=t.$.Deferred(),a=i,r=i;return n[0]===e[0]?(s.resolve(),s.promise()):("object"==typeof i&&(a=i[0],r=i[1]||i[0]),t.$body.css("overflow-x","hidden"),o=function(){e&&e.hide().removeClass("uk-active "+r+" uk-animation-reverse"),n.addClass(a).one(t.support.animation.end,function(){setTimeout(function(){n.removeClass(""+a).css({opacity:"",display:""})},0),s.resolve(),t.$body.css("overflow-x",""),e&&e.css({opacity:"",display:""})}.bind(this)).show()},n.css("animation-duration",this.options.duration+"ms"),e&&e.length?(e.css("animation-duration",this.options.duration+"ms"),e.css("display","none").addClass(r+" uk-animation-reverse").one(t.support.animation.end,function(){o()}.bind(this)).css("display","")):(n.addClass("uk-active"),o()),s.promise())}var e;t.component("switcher",{defaults:{connect:!1,toggle:">*",active:0,animation:!1,duration:200,swiping:!0},animating:!1,boot:function(){t.ready(function(i){t.$("[data-uk-switcher]",i).each(function(){var i=t.$(this);if(!i.data("switcher")){t.switcher(i,t.Utils.options(i.attr("data-uk-switcher")))}})})},init:function(){var i=this;this.on("click.uk.switcher",this.options.toggle,function(t){t.preventDefault(),i.show(this)}),this.options.connect&&(this.connect=t.$(this.options.connect),this.connect.length&&(this.connect.on("click.uk.switcher","[data-uk-switcher-item]",function(e){e.preventDefault();var n=t.$(this).attr("data-uk-switcher-item");if(i.index!=n)switch(n){case"next":case"previous":i.show(i.index+("next"==n?1:-1));break;default:i.show(parseInt(n,10))}}),this.options.swiping&&this.connect.on("swipeRight swipeLeft",function(t){t.preventDefault(),window.getSelection().toString()||i.show(i.index+("swipeLeft"==t.type?1:-1))}),this.update()))},update:function(){this.connect.children().removeClass("uk-active").attr("aria-hidden","true");var t=this.find(this.options.toggle),i=t.filter(".uk-active");if(i.length)this.show(i,!1);else{if(this.options.active===!1)return;i=t.eq(this.options.active),this.show(i.length?i:t.eq(0),!1)}t.not(i).attr("aria-expanded","false"),i.attr("aria-expanded","true")},show:function(n,o){if(!this.animating){var s=this.find(this.options.toggle);isNaN(n)?n=t.$(n):(n=0>n?s.length-1:n,n=s.eq(s[n]?n:0));var a=this,r=t.$(n),l=e[this.options.animation]||function(t,n){if(!a.options.animation)return e.none.apply(a);var o=a.options.animation.split(",");return 1==o.length&&(o[1]=o[0]),o[0]=o[0].trim(),o[1]=o[1].trim(),i.apply(a,[o,t,n])};o!==!1&&t.support.animation||(l=e.none),r.hasClass("uk-disabled")||(s.attr("aria-expanded","false"),r.attr("aria-expanded","true"),s.filter(".uk-active").removeClass("uk-active"),r.addClass("uk-active"),this.options.connect&&this.connect.length&&(this.index=this.find(this.options.toggle).index(r),-1==this.index&&(this.index=0),this.connect.each(function(){var i=t.$(this),e=t.$(i.children()),n=t.$(e.filter(".uk-active")),o=t.$(e.eq(a.index));a.animating=!0,l.apply(a,[n,o]).then(function(){n.removeClass("uk-active"),o.addClass("uk-active"),n.attr("aria-hidden","true"),o.attr("aria-hidden","false"),t.Utils.checkDisplay(o,!0),a.animating=!1})})),this.trigger("show.uk.switcher",[r]))}}}),e={none:function(){var i=t.$.Deferred();return i.resolve(),i.promise()},fade:function(t,e){return i.apply(this,["uk-animation-fade",t,e])},"slide-bottom":function(t,e){return i.apply(this,["uk-animation-slide-bottom",t,e])},"slide-top":function(t,e){return i.apply(this,["uk-animation-slide-top",t,e])},"slide-vertical":function(t,e){var n=["uk-animation-slide-top","uk-animation-slide-bottom"];return t&&t.index()>e.index()&&n.reverse(),i.apply(this,[n,t,e])},"slide-left":function(t,e){return i.apply(this,["uk-animation-slide-left",t,e])},"slide-right":function(t,e){return i.apply(this,["uk-animation-slide-right",t,e])},"slide-horizontal":function(t,e){var n=["uk-animation-slide-right","uk-animation-slide-left"];return t&&t.index()>e.index()&&n.reverse(),i.apply(this,[n,t,e])},scale:function(t,e){return i.apply(this,["uk-animation-scale-up",t,e])}},t.switcher.animations=e}(UIkit2),function(t){"use strict";t.component("tab",{defaults:{target:">li:not(.uk-tab-responsive, .uk-disabled)",connect:!1,active:0,animation:!1,duration:200,swiping:!0},boot:function(){t.ready(function(i){t.$("[data-uk-tab]",i).each(function(){var i=t.$(this);if(!i.data("tab")){t.tab(i,t.Utils.options(i.attr("data-uk-tab")))}})})},init:function(){var i=this;this.current=!1,this.on("click.uk.tab",this.options.target,function(e){if(e.preventDefault(),!i.switcher||!i.switcher.animating){var n=i.find(i.options.target).not(this);n.removeClass("uk-active").blur(),i.trigger("change.uk.tab",[t.$(this).addClass("uk-active"),i.current]),i.current=t.$(this),i.options.connect||(n.attr("aria-expanded","false"),t.$(this).attr("aria-expanded","true"))}}),this.options.connect&&(this.connect=t.$(this.options.connect)),this.responsivetab=t.$('
        • ').append('
            '),this.responsivetab.dropdown=this.responsivetab.find(".uk-dropdown"),this.responsivetab.lst=this.responsivetab.dropdown.find("ul"),this.responsivetab.caption=this.responsivetab.find("a:first"),this.element.hasClass("uk-tab-bottom")&&this.responsivetab.dropdown.addClass("uk-dropdown-up"),this.responsivetab.lst.on("click.uk.tab","a",function(e){e.preventDefault(),e.stopPropagation();var n=t.$(this);i.element.children("li:not(.uk-tab-responsive)").eq(n.data("index")).trigger("click")}),this.on("show.uk.switcher change.uk.tab",function(t,e){i.responsivetab.caption.html(e.text())}),this.element.append(this.responsivetab),this.options.connect&&(this.switcher=t.switcher(this.element,{toggle:">li:not(.uk-tab-responsive)",connect:this.options.connect,active:this.options.active,animation:this.options.animation,duration:this.options.duration,swiping:this.options.swiping})),t.dropdown(this.responsivetab,{mode:"click",preventflip:"y"}),i.trigger("change.uk.tab",[this.element.find(this.options.target).not(".uk-tab-responsive").filter(".uk-active")]),this.check(),t.$win.on("resize orientationchange",t.Utils.debounce(function(){i.element.is(":visible")&&i.check()},100)),this.on("display.uk.check",function(){i.element.is(":visible")&&i.check()})},check:function(){var i=this.element.children("li:not(.uk-tab-responsive)").removeClass("uk-hidden");if(!i.length)return this.responsivetab.addClass("uk-hidden"),void 0;var e,n,o,s=i.eq(0).offset().top+Math.ceil(i.eq(0).height()/2),a=!1;if(this.responsivetab.lst.empty(),i.each(function(){t.$(this).offset().top>s&&(a=!0)}),a)for(var r=0;r-1?"&":"?","enablejsapi=1&api=1"].join(""))}},check:function(){this.element.css({width:"",height:""}),this.dimension={w:this.element.width(),h:this.element.height()},this.element.attr("width")&&!isNaN(this.element.attr("width"))&&(this.dimension.w=this.element.attr("width")),this.element.attr("height")&&!isNaN(this.element.attr("height"))&&(this.dimension.h=this.element.attr("height")),this.ratio=this.dimension.w/this.dimension.h;var t,i,e=this.parent.width(),n=this.parent.height();e/this.ratioli>a{color:#444}.uk-nav-autocomplete>li.uk-active>a{background:#00a8e6;color:#fff;outline:0;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-autocomplete .uk-nav-header{color:#999}.uk-nav-autocomplete .uk-nav-divider{border-top:1px solid #ddd} \ No newline at end of file diff --git a/media/uikit/css/components/autocomplete.gradient.min.css b/media/uikit/css/components/autocomplete.gradient.min.css deleted file mode 100644 index 8304137..0000000 --- a/media/uikit/css/components/autocomplete.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-autocomplete{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-nav-autocomplete>li>a{color:#444}.uk-nav-autocomplete>li.uk-active>a{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-autocomplete .uk-nav-header{color:#999}.uk-nav-autocomplete .uk-nav-divider{border-top:1px solid #ddd} \ No newline at end of file diff --git a/media/uikit/css/components/autocomplete.min.css b/media/uikit/css/components/autocomplete.min.css deleted file mode 100644 index 03b1be2..0000000 --- a/media/uikit/css/components/autocomplete.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-autocomplete{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-nav-autocomplete>li>a{color:#444}.uk-nav-autocomplete>li.uk-active>a{background:#00a8e6;color:#fff;outline:0}.uk-nav-autocomplete .uk-nav-header{color:#999}.uk-nav-autocomplete .uk-nav-divider{border-top:1px solid #ddd} \ No newline at end of file diff --git a/media/uikit/css/components/dotnav.almost-flat.min.css b/media/uikit/css/components/dotnav.almost-flat.min.css deleted file mode 100644 index f1410c4..0000000 --- a/media/uikit/css/components/dotnav.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-dotnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-15px;margin-top:-15px;padding:0;list-style:none}.uk-dotnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:15px;margin-top:15px}.uk-dotnav:after,.uk-dotnav:before{content:"";display:block;overflow:hidden}.uk-dotnav:after{clear:both}.uk-dotnav>*{float:left}.uk-dotnav>*>*{display:block;-moz-box-sizing:content-box;box-sizing:content-box;width:20px;height:20px;border-radius:50%;background:rgba(50,50,50,.1);text-indent:100%;overflow:hidden;white-space:nowrap;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.uk-dotnav>*>:focus,.uk-dotnav>*>:hover{background:rgba(50,50,50,.4);outline:0}.uk-dotnav>*>:active{background:rgba(50,50,50,.6)}.uk-dotnav>.uk-active>*{background:rgba(50,50,50,.4);-webkit-transform:scale(1.3);transform:scale(1.3)}.uk-dotnav-contrast>*>*{background:rgba(255,255,255,.4)}.uk-dotnav-contrast>*>:focus,.uk-dotnav-contrast>*>:hover{background:rgba(255,255,255,.7)}.uk-dotnav-contrast>*>:active{background:rgba(255,255,255,.9)}.uk-dotnav-contrast>.uk-active>*{background:rgba(255,255,255,.9)}.uk-dotnav-vertical{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-dotnav-vertical>*{float:none} \ No newline at end of file diff --git a/media/uikit/css/components/dotnav.gradient.min.css b/media/uikit/css/components/dotnav.gradient.min.css deleted file mode 100644 index f1410c4..0000000 --- a/media/uikit/css/components/dotnav.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-dotnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-15px;margin-top:-15px;padding:0;list-style:none}.uk-dotnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:15px;margin-top:15px}.uk-dotnav:after,.uk-dotnav:before{content:"";display:block;overflow:hidden}.uk-dotnav:after{clear:both}.uk-dotnav>*{float:left}.uk-dotnav>*>*{display:block;-moz-box-sizing:content-box;box-sizing:content-box;width:20px;height:20px;border-radius:50%;background:rgba(50,50,50,.1);text-indent:100%;overflow:hidden;white-space:nowrap;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.uk-dotnav>*>:focus,.uk-dotnav>*>:hover{background:rgba(50,50,50,.4);outline:0}.uk-dotnav>*>:active{background:rgba(50,50,50,.6)}.uk-dotnav>.uk-active>*{background:rgba(50,50,50,.4);-webkit-transform:scale(1.3);transform:scale(1.3)}.uk-dotnav-contrast>*>*{background:rgba(255,255,255,.4)}.uk-dotnav-contrast>*>:focus,.uk-dotnav-contrast>*>:hover{background:rgba(255,255,255,.7)}.uk-dotnav-contrast>*>:active{background:rgba(255,255,255,.9)}.uk-dotnav-contrast>.uk-active>*{background:rgba(255,255,255,.9)}.uk-dotnav-vertical{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-dotnav-vertical>*{float:none} \ No newline at end of file diff --git a/media/uikit/css/components/dotnav.min.css b/media/uikit/css/components/dotnav.min.css deleted file mode 100644 index 8db104c..0000000 --- a/media/uikit/css/components/dotnav.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-dotnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-15px;margin-top:-15px;padding:0;list-style:none}.uk-dotnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:15px;margin-top:15px}.uk-dotnav:after,.uk-dotnav:before{content:"";display:block;overflow:hidden}.uk-dotnav:after{clear:both}.uk-dotnav>*{float:left}.uk-dotnav>*>*{display:block;-moz-box-sizing:content-box;box-sizing:content-box;width:20px;height:20px;border-radius:50%;background:rgba(50,50,50,.1);text-indent:100%;overflow:hidden;white-space:nowrap}.uk-dotnav>*>:focus,.uk-dotnav>*>:hover{background:rgba(50,50,50,.4);outline:0}.uk-dotnav>*>:active{background:rgba(50,50,50,.6)}.uk-dotnav>.uk-active>*{background:rgba(50,50,50,.4)}.uk-dotnav-contrast>*>*{background:rgba(255,255,255,.4)}.uk-dotnav-contrast>*>:focus,.uk-dotnav-contrast>*>:hover{background:rgba(255,255,255,.7)}.uk-dotnav-contrast>*>:active{background:rgba(255,255,255,.9)}.uk-dotnav-contrast>.uk-active>*{background:rgba(255,255,255,.9)}.uk-dotnav-vertical{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-dotnav-vertical>*{float:none} \ No newline at end of file diff --git a/media/uikit/css/components/htmleditor.almost-flat.min.css b/media/uikit/css/components/htmleditor.almost-flat.min.css deleted file mode 100644 index e50023d..0000000 --- a/media/uikit/css/components/htmleditor.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-htmleditor-navbar{background:#f5f5f5;border:1px solid rgba(0,0,0,.06);border-top-left-radius:4px;border-top-right-radius:4px}.uk-htmleditor-navbar:after,.uk-htmleditor-navbar:before{content:"";display:table}.uk-htmleditor-navbar:after{clear:both}.uk-htmleditor-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-htmleditor-navbar-nav>li{float:left}.uk-htmleditor-navbar-nav>li>a{display:block;-moz-box-sizing:border-box;box-sizing:border-box;text-decoration:none;height:41px;padding:0 15px;line-height:40px;color:#444;font-size:11px;cursor:pointer;margin-top:-1px;margin-left:-1px;border:1px solid transparent;border-bottom-width:0;text-shadow:0 1px 0 #fff}.uk-htmleditor-navbar-nav>li:hover>a,.uk-htmleditor-navbar-nav>li>a:focus{background-color:#fafafa;color:#444;outline:0;position:relative;z-index:1;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1)}.uk-htmleditor-navbar-nav>li>a:active{background-color:#eee;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2)}.uk-htmleditor-navbar-nav>li.uk-active>a{background-color:#fafafa;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1)}.uk-htmleditor-navbar-flip{float:right}[data-mode=split] .uk-htmleditor-button-code,[data-mode=split] .uk-htmleditor-button-preview{display:none}.uk-htmleditor-content{border-left:1px solid #ddd;border-right:1px solid #ddd;border-bottom:1px solid #ddd;background:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.uk-htmleditor-content:after,.uk-htmleditor-content:before{content:"";display:table}.uk-htmleditor-content:after{clear:both}.uk-htmleditor-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;z-index:990}.uk-htmleditor-fullscreen .uk-htmleditor-content{position:absolute;top:41px;left:0;right:0;bottom:0}.uk-htmleditor-fullscreen .uk-icon-expand:before{content:"\f066"}.uk-htmleditor-code,.uk-htmleditor-preview{-moz-box-sizing:border-box;box-sizing:border-box}.uk-htmleditor-preview{padding:20px;overflow-y:scroll;position:relative}[data-mode=tab][data-active-tab=code] .uk-htmleditor-preview,[data-mode=tab][data-active-tab=preview] .uk-htmleditor-code{display:none}[data-mode=split] .uk-htmleditor-code,[data-mode=split] .uk-htmleditor-preview{float:left;width:50%}[data-mode=split] .uk-htmleditor-code{border-right:1px solid #eee}.uk-htmleditor-iframe{position:absolute;top:0;left:0;width:100%;height:100%}.uk-htmleditor .CodeMirror{padding:10px;-moz-box-sizing:border-box;box-sizing:border-box}.uk-htmleditor-navbar-nav:first-child>li:first-child>a{border-top-left-radius:4px}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav>li>a{margin-left:0;margin-right:-1px}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav:first-child>li:first-child>a{border-top-left-radius:0}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav:last-child>li:last-child>a{border-top-right-radius:4px}.uk-htmleditor-fullscreen .uk-htmleditor-navbar{border-top:none;border-left:none;border-right:none;border-radius:0}.uk-htmleditor-fullscreen .uk-htmleditor-content{border:none;border-radius:0}.uk-htmleditor-fullscreen .uk-htmleditor-navbar-nav>li>a{border-radius:0!important} \ No newline at end of file diff --git a/media/uikit/css/components/htmleditor.gradient.min.css b/media/uikit/css/components/htmleditor.gradient.min.css deleted file mode 100644 index f717802..0000000 --- a/media/uikit/css/components/htmleditor.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-htmleditor-navbar{background:#f7f7f7;border:1px solid rgba(0,0,0,.1);border-bottom-color:rgba(0,0,0,.2);border-top-left-radius:4px;border-top-right-radius:4px;background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee)}.uk-htmleditor-navbar:after,.uk-htmleditor-navbar:before{content:"";display:table}.uk-htmleditor-navbar:after{clear:both}.uk-htmleditor-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-htmleditor-navbar-nav>li{float:left}.uk-htmleditor-navbar-nav>li>a{display:block;-moz-box-sizing:border-box;box-sizing:border-box;text-decoration:none;height:41px;padding:0 15px;line-height:40px;color:#444;font-size:11px;cursor:pointer;margin-top:-1px;margin-left:-1px;border:1px solid transparent;border-bottom-width:0;text-shadow:0 1px 0 #fff}.uk-htmleditor-navbar-nav>li:hover>a,.uk-htmleditor-navbar-nav>li>a:focus{background-color:transparent;color:#444;outline:0;position:relative;z-index:1;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-htmleditor-navbar-nav>li>a:active{background-color:#f5f5f5;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-htmleditor-navbar-nav>li.uk-active>a{background-color:#fafafa;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-htmleditor-navbar-flip{float:right}[data-mode=split] .uk-htmleditor-button-code,[data-mode=split] .uk-htmleditor-button-preview{display:none}.uk-htmleditor-content{border-left:1px solid #ddd;border-right:1px solid #ddd;border-bottom:1px solid #ddd;background:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.uk-htmleditor-content:after,.uk-htmleditor-content:before{content:"";display:table}.uk-htmleditor-content:after{clear:both}.uk-htmleditor-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;z-index:990}.uk-htmleditor-fullscreen .uk-htmleditor-content{position:absolute;top:41px;left:0;right:0;bottom:0}.uk-htmleditor-fullscreen .uk-icon-expand:before{content:"\f066"}.uk-htmleditor-code,.uk-htmleditor-preview{-moz-box-sizing:border-box;box-sizing:border-box}.uk-htmleditor-preview{padding:20px;overflow-y:scroll;position:relative}[data-mode=tab][data-active-tab=code] .uk-htmleditor-preview,[data-mode=tab][data-active-tab=preview] .uk-htmleditor-code{display:none}[data-mode=split] .uk-htmleditor-code,[data-mode=split] .uk-htmleditor-preview{float:left;width:50%}[data-mode=split] .uk-htmleditor-code{border-right:1px solid #eee}.uk-htmleditor-iframe{position:absolute;top:0;left:0;width:100%;height:100%}.uk-htmleditor .CodeMirror{padding:10px;-moz-box-sizing:border-box;box-sizing:border-box}.uk-htmleditor-navbar-nav:first-child>li:first-child>a{border-top-left-radius:4px}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav>li>a{margin-left:0;margin-right:-1px}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav:first-child>li:first-child>a{border-top-left-radius:0}.uk-htmleditor-navbar-flip .uk-htmleditor-navbar-nav:last-child>li:last-child>a{border-top-right-radius:4px}.uk-htmleditor-fullscreen .uk-htmleditor-navbar{border-top:none;border-left:none;border-right:none;border-radius:0}.uk-htmleditor-fullscreen .uk-htmleditor-content{border:none;border-radius:0}.uk-htmleditor-fullscreen .uk-htmleditor-navbar-nav>li>a{border-radius:0!important} \ No newline at end of file diff --git a/media/uikit/css/components/htmleditor.min.css b/media/uikit/css/components/htmleditor.min.css deleted file mode 100644 index 074b3d4..0000000 --- a/media/uikit/css/components/htmleditor.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-htmleditor-navbar{background:#eee}.uk-htmleditor-navbar:after,.uk-htmleditor-navbar:before{content:"";display:table}.uk-htmleditor-navbar:after{clear:both}.uk-htmleditor-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-htmleditor-navbar-nav>li{float:left}.uk-htmleditor-navbar-nav>li>a{display:block;-moz-box-sizing:border-box;box-sizing:border-box;text-decoration:none;height:40px;padding:0 15px;line-height:40px;color:#444;font-size:11px;cursor:pointer}.uk-htmleditor-navbar-nav>li:hover>a,.uk-htmleditor-navbar-nav>li>a:focus{background-color:#f5f5f5;color:#444;outline:0}.uk-htmleditor-navbar-nav>li>a:active{background-color:#ddd;color:#444}.uk-htmleditor-navbar-nav>li.uk-active>a{background-color:#f5f5f5;color:#444}.uk-htmleditor-navbar-flip{float:right}[data-mode=split] .uk-htmleditor-button-code,[data-mode=split] .uk-htmleditor-button-preview{display:none}.uk-htmleditor-content{border-left:1px solid #ddd;border-right:1px solid #ddd;border-bottom:1px solid #ddd;background:#fff}.uk-htmleditor-content:after,.uk-htmleditor-content:before{content:"";display:table}.uk-htmleditor-content:after{clear:both}.uk-htmleditor-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;z-index:990}.uk-htmleditor-fullscreen .uk-htmleditor-content{position:absolute;top:40px;left:0;right:0;bottom:0}.uk-htmleditor-fullscreen .uk-icon-expand:before{content:"\f066"}.uk-htmleditor-code,.uk-htmleditor-preview{-moz-box-sizing:border-box;box-sizing:border-box}.uk-htmleditor-preview{padding:20px;overflow-y:scroll;position:relative}[data-mode=tab][data-active-tab=code] .uk-htmleditor-preview,[data-mode=tab][data-active-tab=preview] .uk-htmleditor-code{display:none}[data-mode=split] .uk-htmleditor-code,[data-mode=split] .uk-htmleditor-preview{float:left;width:50%}[data-mode=split] .uk-htmleditor-code{border-right:1px solid #eee}.uk-htmleditor-iframe{position:absolute;top:0;left:0;width:100%;height:100%}.uk-htmleditor .CodeMirror{padding:10px;-moz-box-sizing:border-box;box-sizing:border-box} \ No newline at end of file diff --git a/media/uikit/css/components/nestable.almost-flat.min.css b/media/uikit/css/components/nestable.almost-flat.min.css deleted file mode 100644 index 8d651de..0000000 --- a/media/uikit/css/components/nestable.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-nestable{padding:0;list-style:none}.uk-nestable a,.uk-nestable img{-webkit-touch-callout:none}.uk-nestable-list{margin:0;padding-left:40px;list-style:none}.uk-nestable-item{touch-action:none}.uk-nestable-item+.uk-nestable-item{margin-top:10px}.uk-nestable-list:not(.uk-nestable-dragged)>.uk-nestable-item:first-child{margin-top:10px}.uk-nestable-dragged{position:absolute;z-index:1050;pointer-events:none;padding-left:0}.uk-nestable-placeholder{position:relative}.uk-nestable-placeholder>*{opacity:0}.uk-nestable-placeholder:after{content:'';position:absolute;top:0;bottom:0;left:0;right:0;border:1px dashed #ddd;opacity:1}.uk-nestable:empty{min-height:30px}.uk-nestable-handle{touch-action:none}.uk-nestable-handle:hover{cursor:move}.uk-nestable-moving,.uk-nestable-moving *{cursor:move}[data-nestable-action=toggle]{cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-nestable-toggle{display:inline-block;visibility:hidden}.uk-nestable-toggle:after{content:"\f147";font-family:FontAwesome}.uk-parent>:not(.uk-nestable-list) .uk-nestable-toggle{visibility:visible}.uk-collapsed .uk-nestable-list{display:none}.uk-collapsed .uk-nestable-toggle:after{content:"\f196"}.uk-nestable-panel{padding:5px;background:#f5f5f5;border-radius:4px;border:1px solid rgba(0,0,0,.06);text-shadow:0 1px 0 #fff} \ No newline at end of file diff --git a/media/uikit/css/components/nestable.gradient.min.css b/media/uikit/css/components/nestable.gradient.min.css deleted file mode 100644 index 58a8f71..0000000 --- a/media/uikit/css/components/nestable.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-nestable{padding:0;list-style:none}.uk-nestable a,.uk-nestable img{-webkit-touch-callout:none}.uk-nestable-list{margin:0;padding-left:40px;list-style:none}.uk-nestable-item{touch-action:none}.uk-nestable-item+.uk-nestable-item{margin-top:10px}.uk-nestable-list:not(.uk-nestable-dragged)>.uk-nestable-item:first-child{margin-top:10px}.uk-nestable-dragged{position:absolute;z-index:1050;pointer-events:none;padding-left:0}.uk-nestable-placeholder{position:relative}.uk-nestable-placeholder>*{opacity:0}.uk-nestable-placeholder:after{content:'';position:absolute;top:0;bottom:0;left:0;right:0;border:1px dashed #ddd;opacity:1}.uk-nestable:empty{min-height:30px}.uk-nestable-handle{touch-action:none}.uk-nestable-handle:hover{cursor:move}.uk-nestable-moving,.uk-nestable-moving *{cursor:move}[data-nestable-action=toggle]{cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-nestable-toggle{display:inline-block;visibility:hidden}.uk-nestable-toggle:after{content:"\f147";font-family:FontAwesome}.uk-parent>:not(.uk-nestable-list) .uk-nestable-toggle{visibility:visible}.uk-collapsed .uk-nestable-list{display:none}.uk-collapsed .uk-nestable-toggle:after{content:"\f196"}.uk-nestable-panel{padding:5px;background:#f7f7f7;border-radius:4px;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);text-shadow:0 1px 0 #fff} \ No newline at end of file diff --git a/media/uikit/css/components/notify.almost-flat.min.css b/media/uikit/css/components/notify.almost-flat.min.css deleted file mode 100644 index 4d33bb3..0000000 --- a/media/uikit/css/components/notify.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-notify{position:fixed;top:10px;left:10px;z-index:1040;-moz-box-sizing:border-box;box-sizing:border-box;width:350px}.uk-notify-bottom-right,.uk-notify-top-right{left:auto;right:10px}.uk-notify-bottom-center,.uk-notify-top-center{left:50%;margin-left:-175px}.uk-notify-bottom-center,.uk-notify-bottom-left,.uk-notify-bottom-right{top:auto;bottom:10px}@media (max-width:479px){.uk-notify{left:10px;right:10px;width:auto;margin:0}}.uk-notify-message{position:relative;margin-bottom:10px;padding:15px;background:#444;color:#fff;font-size:16px;line-height:22px;cursor:pointer;border:1px solid #444;border-radius:4px}.uk-notify-message>.uk-close{visibility:hidden;float:right}.uk-notify-message:hover>.uk-close{visibility:visible}.uk-notify-message-primary{background:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-notify-message-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-notify-message-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-notify-message-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)} \ No newline at end of file diff --git a/media/uikit/css/components/notify.gradient.min.css b/media/uikit/css/components/notify.gradient.min.css deleted file mode 100644 index 4d33bb3..0000000 --- a/media/uikit/css/components/notify.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-notify{position:fixed;top:10px;left:10px;z-index:1040;-moz-box-sizing:border-box;box-sizing:border-box;width:350px}.uk-notify-bottom-right,.uk-notify-top-right{left:auto;right:10px}.uk-notify-bottom-center,.uk-notify-top-center{left:50%;margin-left:-175px}.uk-notify-bottom-center,.uk-notify-bottom-left,.uk-notify-bottom-right{top:auto;bottom:10px}@media (max-width:479px){.uk-notify{left:10px;right:10px;width:auto;margin:0}}.uk-notify-message{position:relative;margin-bottom:10px;padding:15px;background:#444;color:#fff;font-size:16px;line-height:22px;cursor:pointer;border:1px solid #444;border-radius:4px}.uk-notify-message>.uk-close{visibility:hidden;float:right}.uk-notify-message:hover>.uk-close{visibility:visible}.uk-notify-message-primary{background:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-notify-message-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-notify-message-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-notify-message-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)} \ No newline at end of file diff --git a/media/uikit/css/components/notify.min.css b/media/uikit/css/components/notify.min.css deleted file mode 100644 index 3aa6b89..0000000 --- a/media/uikit/css/components/notify.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-notify{position:fixed;top:10px;left:10px;z-index:1040;-moz-box-sizing:border-box;box-sizing:border-box;width:350px}.uk-notify-bottom-right,.uk-notify-top-right{left:auto;right:10px}.uk-notify-bottom-center,.uk-notify-top-center{left:50%;margin-left:-175px}.uk-notify-bottom-center,.uk-notify-bottom-left,.uk-notify-bottom-right{top:auto;bottom:10px}@media (max-width:479px){.uk-notify{left:10px;right:10px;width:auto;margin:0}}.uk-notify-message{position:relative;margin-bottom:10px;padding:15px;background:#444;color:#fff;font-size:16px;line-height:22px;cursor:pointer}.uk-notify-message>.uk-close{visibility:hidden;float:right}.uk-notify-message:hover>.uk-close{visibility:visible}.uk-notify-message-primary{background:#ebf7fd;color:#2d7091}.uk-notify-message-success{background:#f2fae3;color:#659f13}.uk-notify-message-warning{background:#fffceb;color:#e28327}.uk-notify-message-danger{background:#fff1f0;color:#d85030} \ No newline at end of file diff --git a/media/uikit/css/components/placeholder.almost-flat.min.css b/media/uikit/css/components/placeholder.almost-flat.min.css deleted file mode 100644 index ba4b565..0000000 --- a/media/uikit/css/components/placeholder.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-placeholder{margin-bottom:15px;padding:20px;border:1px dashed #ddd;background:#fafafa;color:#444}*+.uk-placeholder{margin-top:15px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder-large{padding-top:80px;padding-bottom:80px} \ No newline at end of file diff --git a/media/uikit/css/components/placeholder.gradient.min.css b/media/uikit/css/components/placeholder.gradient.min.css deleted file mode 100644 index ba4b565..0000000 --- a/media/uikit/css/components/placeholder.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-placeholder{margin-bottom:15px;padding:20px;border:1px dashed #ddd;background:#fafafa;color:#444}*+.uk-placeholder{margin-top:15px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder-large{padding-top:80px;padding-bottom:80px} \ No newline at end of file diff --git a/media/uikit/css/components/placeholder.min.css b/media/uikit/css/components/placeholder.min.css deleted file mode 100644 index ba4b565..0000000 --- a/media/uikit/css/components/placeholder.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-placeholder{margin-bottom:15px;padding:20px;border:1px dashed #ddd;background:#fafafa;color:#444}*+.uk-placeholder{margin-top:15px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder-large{padding-top:80px;padding-bottom:80px} \ No newline at end of file diff --git a/media/uikit/css/components/progress.almost-flat.min.css b/media/uikit/css/components/progress.almost-flat.min.css deleted file mode 100644 index 33b0604..0000000 --- a/media/uikit/css/components/progress.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-progress{-moz-box-sizing:border-box;box-sizing:border-box;height:20px;margin-bottom:15px;background:#f5f5f5;overflow:hidden;line-height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);border-radius:4px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#00a8e6;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#8cc14c}.uk-progress-warning .uk-progress-bar{background-color:#faa732}.uk-progress-danger .uk-progress-bar{background-color:#da314b}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}.uk-progress-mini,.uk-progress-small{border-radius:500px} \ No newline at end of file diff --git a/media/uikit/css/components/progress.gradient.min.css b/media/uikit/css/components/progress.gradient.min.css deleted file mode 100644 index 3913719..0000000 --- a/media/uikit/css/components/progress.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-progress{-moz-box-sizing:border-box;box-sizing:border-box;height:20px;margin-bottom:15px;background:#f7f7f7;overflow:hidden;line-height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.07),inset 0 2px 2px rgba(0,0,0,.07);border-radius:4px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#009dd8;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);box-shadow:inset 0 -1px 0 rgba(0,0,0,.2),inset 0 0 0 1px rgba(0,0,0,.1);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#82bb42;background-image:-webkit-linear-gradient(top,#9fd256,#6fac34);background-image:linear-gradient(to bottom,#9fd256,#6fac34)}.uk-progress-warning .uk-progress-bar{background-color:#f9a124;background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406)}.uk-progress-danger .uk-progress-bar{background-color:#d32c46;background-image:-webkit-linear-gradient(top,#ee465a,#c11a39);background-image:linear-gradient(to bottom,#ee465a,#c11a39)}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}.uk-progress-mini,.uk-progress-small{border-radius:500px} \ No newline at end of file diff --git a/media/uikit/css/components/progress.min.css b/media/uikit/css/components/progress.min.css deleted file mode 100644 index fec2675..0000000 --- a/media/uikit/css/components/progress.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-progress{-moz-box-sizing:border-box;box-sizing:border-box;height:20px;margin-bottom:15px;background:#eee;overflow:hidden;line-height:20px}*+.uk-progress{margin-top:15px}.uk-progress-bar{width:0;height:100%;background:#00a8e6;float:left;-webkit-transition:width .6s ease;transition:width .6s ease;font-size:12px;color:#fff;text-align:center}.uk-progress-mini{height:6px}.uk-progress-small{height:12px}.uk-progress-success .uk-progress-bar{background-color:#8cc14c}.uk-progress-warning .uk-progress-bar{background-color:#faa732}.uk-progress-danger .uk-progress-bar{background-color:#da314b}.uk-progress-striped .uk-progress-bar{background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:30px 30px}.uk-progress-striped.uk-active .uk-progress-bar{-webkit-animation:uk-progress-bar-stripes 2s linear infinite;animation:uk-progress-bar-stripes 2s linear infinite}@-webkit-keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}}@keyframes uk-progress-bar-stripes{0%{background-position:0 0}100%{background-position:30px 0}} \ No newline at end of file diff --git a/media/uikit/css/components/search.almost-flat.min.css b/media/uikit/css/components/search.almost-flat.min.css deleted file mode 100644 index bdbc0b7..0000000 --- a/media/uikit/css/components/search.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-search{display:inline-block;position:relative;margin:0}.uk-search:before{content:"\f002";position:absolute;top:0;left:0;width:30px;line-height:30px;text-align:center;font-family:FontAwesome;font-size:14px;color:rgba(0,0,0,.2)}.uk-search-field::-moz-focus-inner{border:0;padding:0}.uk-search-field::-webkit-search-cancel-button,.uk-search-field::-webkit-search-decoration{-webkit-appearance:none}.uk-search-field::-ms-clear{display:none}.uk-search-field::-moz-placeholder{opacity:1}.uk-search-field{-moz-box-sizing:border-box;box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:#444;-webkit-appearance:none;width:120px;height:30px;padding:0 0 0 30px;border:1px solid transparent;background:transparent;-webkit-transition:all linear .2s;transition:all linear .2s;vertical-align:middle}.uk-search-field:-ms-input-placeholder{color:#999!important}.uk-search-field::-moz-placeholder{color:#999}.uk-search-field::-webkit-input-placeholder{color:#999}.uk-search-field:focus{outline:0}.uk-search-field:focus,.uk-search.uk-active .uk-search-field{width:180px}.uk-dropdown-search{width:300px;margin-top:0;background:#fff;color:#444}.uk-open>.uk-dropdown-search{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-navbar-flip .uk-dropdown-search{margin-top:12px;margin-right:-16px}.uk-nav-search>li>a{color:#444}.uk-nav-search>li.uk-active>a{background:#00a8e6;color:#fff;outline:0;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-search .uk-nav-header{color:#999}.uk-nav-search .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-search ul a{color:#07d}.uk-nav-search ul a:hover{color:#059}.uk-offcanvas .uk-search{display:block;margin:20px 15px}.uk-offcanvas .uk-search:before{color:#777}.uk-offcanvas .uk-search-field{width:100%;border-color:transparent;background:#1a1a1a;color:#ccc}.uk-offcanvas .uk-search-field:-ms-input-placeholder{color:#777!important}.uk-offcanvas .uk-search-field::-moz-placeholder{color:#777}.uk-offcanvas .uk-search-field::-webkit-input-placeholder{color:#777} \ No newline at end of file diff --git a/media/uikit/css/components/search.gradient.min.css b/media/uikit/css/components/search.gradient.min.css deleted file mode 100644 index 166173b..0000000 --- a/media/uikit/css/components/search.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-search{display:inline-block;position:relative;margin:0}.uk-search:before{content:"\f002";position:absolute;top:0;left:0;width:30px;line-height:30px;text-align:center;font-family:FontAwesome;font-size:14px;color:rgba(0,0,0,.2)}.uk-search-field::-moz-focus-inner{border:0;padding:0}.uk-search-field::-webkit-search-cancel-button,.uk-search-field::-webkit-search-decoration{-webkit-appearance:none}.uk-search-field::-ms-clear{display:none}.uk-search-field::-moz-placeholder{opacity:1}.uk-search-field{-moz-box-sizing:border-box;box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:#444;-webkit-appearance:none;width:120px;height:30px;padding:0 0 0 30px;border:1px solid transparent;background:transparent;-webkit-transition:all linear .2s;transition:all linear .2s;vertical-align:middle}.uk-search-field:-ms-input-placeholder{color:#999!important}.uk-search-field::-moz-placeholder{color:#999}.uk-search-field::-webkit-input-placeholder{color:#999}.uk-search-field:focus{outline:0}.uk-search-field:focus,.uk-search.uk-active .uk-search-field{width:180px}.uk-dropdown-search{width:300px;margin-top:0;background:#fff;color:#444}.uk-open>.uk-dropdown-search{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-navbar-flip .uk-dropdown-search{margin-top:12px;margin-right:-16px}.uk-nav-search>li>a{color:#444}.uk-nav-search>li.uk-active>a{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-search .uk-nav-header{color:#999}.uk-nav-search .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-search ul a{color:#07d}.uk-nav-search ul a:hover{color:#059}.uk-offcanvas .uk-search{display:block;margin:20px 15px}.uk-offcanvas .uk-search:before{color:#777}.uk-offcanvas .uk-search-field{width:100%;border-color:transparent;background:#1a1a1a;color:#ccc}.uk-offcanvas .uk-search-field:-ms-input-placeholder{color:#777!important}.uk-offcanvas .uk-search-field::-moz-placeholder{color:#777}.uk-offcanvas .uk-search-field::-webkit-input-placeholder{color:#777} \ No newline at end of file diff --git a/media/uikit/css/components/search.min.css b/media/uikit/css/components/search.min.css deleted file mode 100644 index 8e826a4..0000000 --- a/media/uikit/css/components/search.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-search{display:inline-block;position:relative;margin:0}.uk-search:before{content:"\f002";position:absolute;top:0;left:0;width:30px;line-height:30px;text-align:center;font-family:FontAwesome;font-size:14px;color:rgba(0,0,0,.2)}.uk-search-field::-moz-focus-inner{border:0;padding:0}.uk-search-field::-webkit-search-cancel-button,.uk-search-field::-webkit-search-decoration{-webkit-appearance:none}.uk-search-field::-ms-clear{display:none}.uk-search-field::-moz-placeholder{opacity:1}.uk-search-field{-moz-box-sizing:border-box;box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:#444;-webkit-appearance:none;width:120px;height:30px;padding:0 0 0 30px;border:1px solid transparent;background:transparent;-webkit-transition:all linear .2s;transition:all linear .2s;vertical-align:middle}.uk-search-field:-ms-input-placeholder{color:#999!important}.uk-search-field::-moz-placeholder{color:#999}.uk-search-field::-webkit-input-placeholder{color:#999}.uk-search-field:focus{outline:0}.uk-search-field:focus,.uk-search.uk-active .uk-search-field{width:180px}.uk-dropdown-search{width:300px;margin-top:0;background:#f5f5f5;color:#444}.uk-open>.uk-dropdown-search{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-navbar-flip .uk-dropdown-search{margin-top:5px;margin-right:-15px}.uk-nav-search>li>a{color:#444}.uk-nav-search>li.uk-active>a{background:#00a8e6;color:#fff;outline:0}.uk-nav-search .uk-nav-header{color:#999}.uk-nav-search .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-search ul a{color:#07d}.uk-nav-search ul a:hover{color:#059}.uk-offcanvas .uk-search{display:block;margin:20px 15px}.uk-offcanvas .uk-search:before{color:#777}.uk-offcanvas .uk-search-field{width:100%;border-color:transparent;background:#1a1a1a;color:#ccc}.uk-offcanvas .uk-search-field:-ms-input-placeholder{color:#777!important}.uk-offcanvas .uk-search-field::-moz-placeholder{color:#777}.uk-offcanvas .uk-search-field::-webkit-input-placeholder{color:#777} \ No newline at end of file diff --git a/media/uikit/css/components/slidenav.almost-flat.min.css b/media/uikit/css/components/slidenav.almost-flat.min.css deleted file mode 100644 index 31445f0..0000000 --- a/media/uikit/css/components/slidenav.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slidenav{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;width:60px;height:60px;line-height:60px;color:rgba(50,50,50,.4);font-size:60px;text-align:center}.uk-slidenav:focus,.uk-slidenav:hover{outline:0;text-decoration:none;color:rgba(50,50,50,.7);cursor:pointer}.uk-slidenav:active{color:rgba(50,50,50,.9)}.uk-slidenav-previous:before{content:"\f104";font-family:FontAwesome}.uk-slidenav-next:before{content:"\f105";font-family:FontAwesome}.uk-slidenav-position{position:relative}.uk-slidenav-position .uk-slidenav{display:none;position:absolute;top:50%;z-index:1;margin-top:-30px}.uk-slidenav-position:hover .uk-slidenav{display:block}.uk-slidenav-position .uk-slidenav-previous{left:20px}.uk-slidenav-position .uk-slidenav-next{right:20px}.uk-slidenav-contrast{color:rgba(255,255,255,.5)}.uk-slidenav-contrast:focus,.uk-slidenav-contrast:hover{color:rgba(255,255,255,.7)}.uk-slidenav-contrast:active{color:rgba(255,255,255,.9)} \ No newline at end of file diff --git a/media/uikit/css/components/slidenav.gradient.min.css b/media/uikit/css/components/slidenav.gradient.min.css deleted file mode 100644 index 31445f0..0000000 --- a/media/uikit/css/components/slidenav.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slidenav{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;width:60px;height:60px;line-height:60px;color:rgba(50,50,50,.4);font-size:60px;text-align:center}.uk-slidenav:focus,.uk-slidenav:hover{outline:0;text-decoration:none;color:rgba(50,50,50,.7);cursor:pointer}.uk-slidenav:active{color:rgba(50,50,50,.9)}.uk-slidenav-previous:before{content:"\f104";font-family:FontAwesome}.uk-slidenav-next:before{content:"\f105";font-family:FontAwesome}.uk-slidenav-position{position:relative}.uk-slidenav-position .uk-slidenav{display:none;position:absolute;top:50%;z-index:1;margin-top:-30px}.uk-slidenav-position:hover .uk-slidenav{display:block}.uk-slidenav-position .uk-slidenav-previous{left:20px}.uk-slidenav-position .uk-slidenav-next{right:20px}.uk-slidenav-contrast{color:rgba(255,255,255,.5)}.uk-slidenav-contrast:focus,.uk-slidenav-contrast:hover{color:rgba(255,255,255,.7)}.uk-slidenav-contrast:active{color:rgba(255,255,255,.9)} \ No newline at end of file diff --git a/media/uikit/css/components/slidenav.min.css b/media/uikit/css/components/slidenav.min.css deleted file mode 100644 index 31445f0..0000000 --- a/media/uikit/css/components/slidenav.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slidenav{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;width:60px;height:60px;line-height:60px;color:rgba(50,50,50,.4);font-size:60px;text-align:center}.uk-slidenav:focus,.uk-slidenav:hover{outline:0;text-decoration:none;color:rgba(50,50,50,.7);cursor:pointer}.uk-slidenav:active{color:rgba(50,50,50,.9)}.uk-slidenav-previous:before{content:"\f104";font-family:FontAwesome}.uk-slidenav-next:before{content:"\f105";font-family:FontAwesome}.uk-slidenav-position{position:relative}.uk-slidenav-position .uk-slidenav{display:none;position:absolute;top:50%;z-index:1;margin-top:-30px}.uk-slidenav-position:hover .uk-slidenav{display:block}.uk-slidenav-position .uk-slidenav-previous{left:20px}.uk-slidenav-position .uk-slidenav-next{right:20px}.uk-slidenav-contrast{color:rgba(255,255,255,.5)}.uk-slidenav-contrast:focus,.uk-slidenav-contrast:hover{color:rgba(255,255,255,.7)}.uk-slidenav-contrast:active{color:rgba(255,255,255,.9)} \ No newline at end of file diff --git a/media/uikit/css/components/slider.almost-flat.min.css b/media/uikit/css/components/slider.almost-flat.min.css deleted file mode 100644 index 4b177be..0000000 --- a/media/uikit/css/components/slider.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slider{position:relative;z-index:0;touch-action:pan-y}.uk-slider:not(.uk-grid){margin:0;padding:0;list-style:none}.uk-slider>*{position:absolute;top:0;left:0}.uk-slider-container{overflow:hidden}.uk-slider:not(.uk-drag){-webkit-transition:-webkit-transform 200ms linear;transition:transform 200ms linear}.uk-slider.uk-drag{cursor:col-resize;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-slider a,.uk-slider img{-webkit-user-drag:none;user-drag:none;-webkit-touch-callout:none}.uk-slider img{pointer-events:none}.uk-slider-fullscreen,.uk-slider-fullscreen>li{height:100vh} \ No newline at end of file diff --git a/media/uikit/css/components/slider.gradient.min.css b/media/uikit/css/components/slider.gradient.min.css deleted file mode 100644 index 4b177be..0000000 --- a/media/uikit/css/components/slider.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slider{position:relative;z-index:0;touch-action:pan-y}.uk-slider:not(.uk-grid){margin:0;padding:0;list-style:none}.uk-slider>*{position:absolute;top:0;left:0}.uk-slider-container{overflow:hidden}.uk-slider:not(.uk-drag){-webkit-transition:-webkit-transform 200ms linear;transition:transform 200ms linear}.uk-slider.uk-drag{cursor:col-resize;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-slider a,.uk-slider img{-webkit-user-drag:none;user-drag:none;-webkit-touch-callout:none}.uk-slider img{pointer-events:none}.uk-slider-fullscreen,.uk-slider-fullscreen>li{height:100vh} \ No newline at end of file diff --git a/media/uikit/css/components/slider.min.css b/media/uikit/css/components/slider.min.css deleted file mode 100644 index 4b177be..0000000 --- a/media/uikit/css/components/slider.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slider{position:relative;z-index:0;touch-action:pan-y}.uk-slider:not(.uk-grid){margin:0;padding:0;list-style:none}.uk-slider>*{position:absolute;top:0;left:0}.uk-slider-container{overflow:hidden}.uk-slider:not(.uk-drag){-webkit-transition:-webkit-transform 200ms linear;transition:transform 200ms linear}.uk-slider.uk-drag{cursor:col-resize;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.uk-slider a,.uk-slider img{-webkit-user-drag:none;user-drag:none;-webkit-touch-callout:none}.uk-slider img{pointer-events:none}.uk-slider-fullscreen,.uk-slider-fullscreen>li{height:100vh} \ No newline at end of file diff --git a/media/uikit/css/components/slideshow.almost-flat.min.css b/media/uikit/css/components/slideshow.almost-flat.min.css deleted file mode 100644 index e9348e0..0000000 --- a/media/uikit/css/components/slideshow.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slideshow{position:relative;z-index:0;width:100%;margin:0;padding:0;list-style:none;overflow:hidden;touch-action:pan-y}.uk-slideshow>li{position:absolute;top:0;left:0;width:100%;opacity:0}.uk-slideshow>.uk-active{z-index:10;opacity:1}.uk-slideshow>li>img{visibility:hidden}[data-uk-slideshow-slide]{cursor:pointer}.uk-slideshow-fullscreen,.uk-slideshow-fullscreen>li{height:100vh}.uk-slideshow-fade-out{-webkit-animation:uk-fade .5s linear reverse;animation:uk-fade .5s linear reverse}.uk-slideshow-scroll-forward-in{-webkit-animation:uk-slide-right .5s ease-in-out;animation:uk-slide-right .5s ease-in-out}.uk-slideshow-scroll-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-scroll-backward-in{-webkit-animation:uk-slide-left .5s ease-in-out;animation:uk-slide-left .5s ease-in-out}.uk-slideshow-scroll-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-scale-out{-webkit-animation:uk-fade-scale-15 .5s ease-in-out reverse;animation:uk-fade-scale-15 .5s ease-in-out reverse}.uk-slideshow-swipe-forward-in{-webkit-animation:uk-slide-left-33 .5s ease-in-out;animation:uk-slide-left-33 .5s ease-in-out}.uk-slideshow-swipe-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in{-webkit-animation:uk-slide-right-33 .5s ease-in-out;animation:uk-slide-right-33 .5s ease-in-out}.uk-slideshow-swipe-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in:before,.uk-slideshow-swipe-forward-in:before{content:'';position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;background:rgba(0,0,0,.6);-webkit-animation:uk-fade .5s ease-in-out reverse;animation:uk-fade .5s ease-in-out reverse} \ No newline at end of file diff --git a/media/uikit/css/components/slideshow.gradient.min.css b/media/uikit/css/components/slideshow.gradient.min.css deleted file mode 100644 index e9348e0..0000000 --- a/media/uikit/css/components/slideshow.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slideshow{position:relative;z-index:0;width:100%;margin:0;padding:0;list-style:none;overflow:hidden;touch-action:pan-y}.uk-slideshow>li{position:absolute;top:0;left:0;width:100%;opacity:0}.uk-slideshow>.uk-active{z-index:10;opacity:1}.uk-slideshow>li>img{visibility:hidden}[data-uk-slideshow-slide]{cursor:pointer}.uk-slideshow-fullscreen,.uk-slideshow-fullscreen>li{height:100vh}.uk-slideshow-fade-out{-webkit-animation:uk-fade .5s linear reverse;animation:uk-fade .5s linear reverse}.uk-slideshow-scroll-forward-in{-webkit-animation:uk-slide-right .5s ease-in-out;animation:uk-slide-right .5s ease-in-out}.uk-slideshow-scroll-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-scroll-backward-in{-webkit-animation:uk-slide-left .5s ease-in-out;animation:uk-slide-left .5s ease-in-out}.uk-slideshow-scroll-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-scale-out{-webkit-animation:uk-fade-scale-15 .5s ease-in-out reverse;animation:uk-fade-scale-15 .5s ease-in-out reverse}.uk-slideshow-swipe-forward-in{-webkit-animation:uk-slide-left-33 .5s ease-in-out;animation:uk-slide-left-33 .5s ease-in-out}.uk-slideshow-swipe-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in{-webkit-animation:uk-slide-right-33 .5s ease-in-out;animation:uk-slide-right-33 .5s ease-in-out}.uk-slideshow-swipe-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in:before,.uk-slideshow-swipe-forward-in:before{content:'';position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;background:rgba(0,0,0,.6);-webkit-animation:uk-fade .5s ease-in-out reverse;animation:uk-fade .5s ease-in-out reverse} \ No newline at end of file diff --git a/media/uikit/css/components/slideshow.min.css b/media/uikit/css/components/slideshow.min.css deleted file mode 100644 index e9348e0..0000000 --- a/media/uikit/css/components/slideshow.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-slideshow{position:relative;z-index:0;width:100%;margin:0;padding:0;list-style:none;overflow:hidden;touch-action:pan-y}.uk-slideshow>li{position:absolute;top:0;left:0;width:100%;opacity:0}.uk-slideshow>.uk-active{z-index:10;opacity:1}.uk-slideshow>li>img{visibility:hidden}[data-uk-slideshow-slide]{cursor:pointer}.uk-slideshow-fullscreen,.uk-slideshow-fullscreen>li{height:100vh}.uk-slideshow-fade-out{-webkit-animation:uk-fade .5s linear reverse;animation:uk-fade .5s linear reverse}.uk-slideshow-scroll-forward-in{-webkit-animation:uk-slide-right .5s ease-in-out;animation:uk-slide-right .5s ease-in-out}.uk-slideshow-scroll-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-scroll-backward-in{-webkit-animation:uk-slide-left .5s ease-in-out;animation:uk-slide-left .5s ease-in-out}.uk-slideshow-scroll-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-scale-out{-webkit-animation:uk-fade-scale-15 .5s ease-in-out reverse;animation:uk-fade-scale-15 .5s ease-in-out reverse}.uk-slideshow-swipe-forward-in{-webkit-animation:uk-slide-left-33 .5s ease-in-out;animation:uk-slide-left-33 .5s ease-in-out}.uk-slideshow-swipe-forward-out{-webkit-animation:uk-slide-left .5s ease-in-out reverse;animation:uk-slide-left .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in{-webkit-animation:uk-slide-right-33 .5s ease-in-out;animation:uk-slide-right-33 .5s ease-in-out}.uk-slideshow-swipe-backward-out{-webkit-animation:uk-slide-right .5s ease-in-out reverse;animation:uk-slide-right .5s ease-in-out reverse}.uk-slideshow-swipe-backward-in:before,.uk-slideshow-swipe-forward-in:before{content:'';position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;background:rgba(0,0,0,.6);-webkit-animation:uk-fade .5s ease-in-out reverse;animation:uk-fade .5s ease-in-out reverse} \ No newline at end of file diff --git a/media/uikit/css/components/sticky.almost-flat.min.css b/media/uikit/css/components/sticky.almost-flat.min.css deleted file mode 100644 index 01857ab..0000000 --- a/media/uikit/css/components/sticky.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -[data-uk-sticky].uk-active{z-index:980;-moz-box-sizing:border-box;box-sizing:border-box}.uk-sticky-placeholder>*{-webkit-backface-visibility:hidden;backface-visibility:hidden}[data-uk-sticky][class*=uk-animation-]{-webkit-animation-duration:.15s;animation-duration:.15s}[data-uk-sticky].uk-animation-reverse{-webkit-animation-duration:.04s;animation-duration:.04s} \ No newline at end of file diff --git a/media/uikit/css/components/sticky.gradient.min.css b/media/uikit/css/components/sticky.gradient.min.css deleted file mode 100644 index 01857ab..0000000 --- a/media/uikit/css/components/sticky.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -[data-uk-sticky].uk-active{z-index:980;-moz-box-sizing:border-box;box-sizing:border-box}.uk-sticky-placeholder>*{-webkit-backface-visibility:hidden;backface-visibility:hidden}[data-uk-sticky][class*=uk-animation-]{-webkit-animation-duration:.15s;animation-duration:.15s}[data-uk-sticky].uk-animation-reverse{-webkit-animation-duration:.04s;animation-duration:.04s} \ No newline at end of file diff --git a/media/uikit/css/components/sticky.min.css b/media/uikit/css/components/sticky.min.css deleted file mode 100644 index 01857ab..0000000 --- a/media/uikit/css/components/sticky.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -[data-uk-sticky].uk-active{z-index:980;-moz-box-sizing:border-box;box-sizing:border-box}.uk-sticky-placeholder>*{-webkit-backface-visibility:hidden;backface-visibility:hidden}[data-uk-sticky][class*=uk-animation-]{-webkit-animation-duration:.15s;animation-duration:.15s}[data-uk-sticky].uk-animation-reverse{-webkit-animation-duration:.04s;animation-duration:.04s} \ No newline at end of file diff --git a/media/uikit/css/components/tooltip.almost-flat.min.css b/media/uikit/css/components/tooltip.almost-flat.min.css deleted file mode 100644 index 1660ddc..0000000 --- a/media/uikit/css/components/tooltip.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-tooltip{display:none;position:absolute;z-index:1030;-moz-box-sizing:border-box;box-sizing:border-box;max-width:200px;padding:5px 8px;background:#333;color:rgba(255,255,255,.7);font-size:12px;line-height:18px;text-align:center;border-radius:3px;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-tooltip:after{content:"";display:block;position:absolute;width:0;height:0;border:5px dashed #333}.uk-tooltip-top-left:after,.uk-tooltip-top-right:after,.uk-tooltip-top:after{bottom:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent;border-top-color:#333}.uk-tooltip-bottom-left:after,.uk-tooltip-bottom-right:after,.uk-tooltip-bottom:after{top:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent;border-bottom-color:#333}.uk-tooltip-bottom:after,.uk-tooltip-top:after{left:50%;margin-left:-5px}.uk-tooltip-bottom-left:after,.uk-tooltip-top-left:after{left:10px}.uk-tooltip-bottom-right:after,.uk-tooltip-top-right:after{right:10px}.uk-tooltip-left:after{right:-5px;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent;border-left-color:#333}.uk-tooltip-right:after{left:-5px;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent;border-right-color:#333} \ No newline at end of file diff --git a/media/uikit/css/components/tooltip.gradient.min.css b/media/uikit/css/components/tooltip.gradient.min.css deleted file mode 100644 index 1660ddc..0000000 --- a/media/uikit/css/components/tooltip.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-tooltip{display:none;position:absolute;z-index:1030;-moz-box-sizing:border-box;box-sizing:border-box;max-width:200px;padding:5px 8px;background:#333;color:rgba(255,255,255,.7);font-size:12px;line-height:18px;text-align:center;border-radius:3px;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-tooltip:after{content:"";display:block;position:absolute;width:0;height:0;border:5px dashed #333}.uk-tooltip-top-left:after,.uk-tooltip-top-right:after,.uk-tooltip-top:after{bottom:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent;border-top-color:#333}.uk-tooltip-bottom-left:after,.uk-tooltip-bottom-right:after,.uk-tooltip-bottom:after{top:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent;border-bottom-color:#333}.uk-tooltip-bottom:after,.uk-tooltip-top:after{left:50%;margin-left:-5px}.uk-tooltip-bottom-left:after,.uk-tooltip-top-left:after{left:10px}.uk-tooltip-bottom-right:after,.uk-tooltip-top-right:after{right:10px}.uk-tooltip-left:after{right:-5px;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent;border-left-color:#333}.uk-tooltip-right:after{left:-5px;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent;border-right-color:#333} \ No newline at end of file diff --git a/media/uikit/css/components/tooltip.min.css b/media/uikit/css/components/tooltip.min.css deleted file mode 100644 index 07e31dc..0000000 --- a/media/uikit/css/components/tooltip.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-tooltip{display:none;position:absolute;z-index:1030;-moz-box-sizing:border-box;box-sizing:border-box;max-width:200px;padding:5px 8px;background:#333;color:rgba(255,255,255,.7);font-size:12px;line-height:18px;text-align:center}.uk-tooltip:after{content:"";display:block;position:absolute;width:0;height:0;border:5px dashed #333}.uk-tooltip-top-left:after,.uk-tooltip-top-right:after,.uk-tooltip-top:after{bottom:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent;border-top-color:#333}.uk-tooltip-bottom-left:after,.uk-tooltip-bottom-right:after,.uk-tooltip-bottom:after{top:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent;border-bottom-color:#333}.uk-tooltip-bottom:after,.uk-tooltip-top:after{left:50%;margin-left:-5px}.uk-tooltip-bottom-left:after,.uk-tooltip-top-left:after{left:10px}.uk-tooltip-bottom-right:after,.uk-tooltip-top-right:after{right:10px}.uk-tooltip-left:after{right:-5px;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent;border-left-color:#333}.uk-tooltip-right:after{left:-5px;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent;border-right-color:#333} \ No newline at end of file diff --git a/media/uikit/css/components/upload.almost-flat.min.css b/media/uikit/css/components/upload.almost-flat.min.css deleted file mode 100644 index f1d2c79..0000000 --- a/media/uikit/css/components/upload.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)} \ No newline at end of file diff --git a/media/uikit/css/components/upload.gradient.min.css b/media/uikit/css/components/upload.gradient.min.css deleted file mode 100644 index f1d2c79..0000000 --- a/media/uikit/css/components/upload.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)} \ No newline at end of file diff --git a/media/uikit/css/components/upload.min.css b/media/uikit/css/components/upload.min.css deleted file mode 100644 index f1d2c79..0000000 --- a/media/uikit/css/components/upload.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)} \ No newline at end of file diff --git a/media/uikit/css/uikit.almost-flat.min.css b/media/uikit/css/uikit.almost-flat.min.css deleted file mode 100644 index 7f70f78..0000000 --- a/media/uikit/css/uikit.almost-flat.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -html{font:400 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;background:#fff;color:#444}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}.uk-link,a{color:#07d;text-decoration:none;cursor:pointer}.uk-link:hover,a:hover{color:#059;text-decoration:underline}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-size:12px;font-family:Consolas,monospace,serif;color:#d05;white-space:nowrap;padding:0 4px;border:1px solid #ddd;border-radius:3px;background:#fafafa}em{color:#d05}ins{background:#ffa;color:#444;text-decoration:none}mark{background:#ffa;color:#444}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{max-width:100%;height:auto;-moz-box-sizing:border-box;box-sizing:border-box;border:0;vertical-align:middle}.uk-img-preserve,.uk-img-preserve img{max-width:none}svg:not(:root){overflow:hidden}blockquote,figure{margin:0}address,blockquote,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 15px 0}*+address,*+blockquote,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:15px}h1,h2,h3,h4,h5,h6{margin:0 0 15px 0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;color:#444;text-transform:none}*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:25px}.uk-h1,h1{font-size:36px;line-height:42px}.uk-h2,h2{font-size:24px;line-height:30px}.uk-h3,h3{font-size:18px;line-height:24px}.uk-h4,h4{font-size:16px;line-height:22px}.uk-h5,h5{font-size:14px;line-height:20px}.uk-h6,h6{font-size:12px;line-height:18px}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;margin:15px 0;border:0;border-top:1px solid #ddd}address{font-style:normal}blockquote{padding-left:15px;border-left:5px solid #ddd;font-size:16px;line-height:22px;font-style:italic}pre{padding:10px;background:#fafafa;font:12px/18px Consolas,monospace,serif;color:#444;-moz-tab-size:4;tab-size:4;overflow:auto;border:1px solid #ddd;border-radius:3px}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}article,aside,details,figcaption,figure,footer,header,main,nav,section,summary{display:block}progress{vertical-align:baseline}audio:not([controls]){display:none}[hidden],template{display:none}iframe{border:0}@media screen and (max-width:400px){@-ms-viewport{width:device-width}}.uk-grid{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid:after,.uk-grid:before{content:"";display:block;overflow:hidden}.uk-grid:after{clear:both}.uk-grid>*{-ms-flex:none;-webkit-flex:none;flex:none;margin:0;float:left}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-25px}.uk-grid>*{padding-left:25px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:25px}@media (min-width:1220px){.uk-grid{margin-left:-35px}.uk-grid>*{padding-left:35px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:35px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid-collapse+.uk-grid-collapse,.uk-grid-collapse>*>.uk-panel+.uk-panel,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-small{margin-left:-10px}.uk-grid-small>*{padding-left:10px}.uk-grid-small+.uk-grid-small,.uk-grid-small>*>.uk-panel+.uk-panel,.uk-grid-small>.uk-grid-margin{margin-top:10px}.uk-grid-medium{margin-left:-25px}.uk-grid-medium>*{padding-left:25px}.uk-grid-medium+.uk-grid-medium,.uk-grid-medium>*>.uk-panel+.uk-panel,.uk-grid-medium>.uk-grid-margin{margin-top:25px}.uk-grid-divider:not(:empty){margin-left:-25px;margin-right:-25px}.uk-grid-divider>*{padding-left:25px;padding-right:25px}.uk-grid-divider>[class*=uk-width-9-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-1-]:not(.uk-width-1-1):nth-child(n+2),.uk-grid-divider>[class*=uk-width-2-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-3-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-4-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-5-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-6-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-7-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-8-]:nth-child(n+2){border-left:1px solid #ddd}@media (min-width:768px){.uk-grid-divider>[class*=uk-width-medium-]:not(.uk-width-medium-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:960px){.uk-grid-divider>[class*=uk-width-large-]:not(.uk-width-large-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:1220px){.uk-grid-divider:not(:empty){margin-left:-35px;margin-right:-35px}.uk-grid-divider>*{padding-left:35px;padding-right:35px}.uk-grid-divider:empty{margin-top:35px;margin-bottom:35px}}.uk-grid-divider:empty{margin-top:25px;margin-bottom:25px;border-top:1px solid #ddd}.uk-grid-match>*{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-grid-match>*>*{-ms-flex:none;-webkit-flex:none;flex:none;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}[class*=uk-grid-width]>*{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.uk-grid-width-1-2>*{width:50%}.uk-grid-width-1-3>*{width:33.333%}.uk-grid-width-1-4>*{width:25%}.uk-grid-width-1-5>*{width:20%}.uk-grid-width-1-6>*{width:16.666%}.uk-grid-width-1-10>*{width:10%}@media (min-width:480px){.uk-grid-width-small-1-2>*{width:50%}.uk-grid-width-small-1-3>*{width:33.333%}.uk-grid-width-small-1-4>*{width:25%}.uk-grid-width-small-1-5>*{width:20%}.uk-grid-width-small-1-6>*{width:16.666%}.uk-grid-width-small-1-10>*{width:10%}}@media (min-width:768px){.uk-grid-width-medium-1-2>*{width:50%}.uk-grid-width-medium-1-3>*{width:33.333%}.uk-grid-width-medium-1-4>*{width:25%}.uk-grid-width-medium-1-5>*{width:20%}.uk-grid-width-medium-1-6>*{width:16.666%}.uk-grid-width-medium-1-10>*{width:10%}}@media (min-width:960px){.uk-grid-width-large-1-2>*{width:50%}.uk-grid-width-large-1-3>*{width:33.333%}.uk-grid-width-large-1-4>*{width:25%}.uk-grid-width-large-1-5>*{width:20%}.uk-grid-width-large-1-6>*{width:16.666%}.uk-grid-width-large-1-10>*{width:10%}}@media (min-width:1220px){.uk-grid-width-xlarge-1-2>*{width:50%}.uk-grid-width-xlarge-1-3>*{width:33.333%}.uk-grid-width-xlarge-1-4>*{width:25%}.uk-grid-width-xlarge-1-5>*{width:20%}.uk-grid-width-xlarge-1-6>*{width:16.666%}.uk-grid-width-xlarge-1-10>*{width:10%}}[class*=uk-width]{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.uk-width-1-1{width:100%}.uk-width-1-2,.uk-width-2-4,.uk-width-3-6,.uk-width-5-10{width:50%}.uk-width-1-3,.uk-width-2-6{width:33.333%}.uk-width-2-3,.uk-width-4-6{width:66.666%}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5,.uk-width-2-10{width:20%}.uk-width-2-5,.uk-width-4-10{width:40%}.uk-width-3-5,.uk-width-6-10{width:60%}.uk-width-4-5,.uk-width-8-10{width:80%}.uk-width-1-6{width:16.666%}.uk-width-5-6{width:83.333%}.uk-width-1-10{width:10%}.uk-width-3-10{width:30%}.uk-width-7-10{width:70%}.uk-width-9-10{width:90%}@media (min-width:480px){.uk-width-small-1-1{width:100%}.uk-width-small-1-2,.uk-width-small-2-4,.uk-width-small-3-6,.uk-width-small-5-10{width:50%}.uk-width-small-1-3,.uk-width-small-2-6{width:33.333%}.uk-width-small-2-3,.uk-width-small-4-6{width:66.666%}.uk-width-small-1-4{width:25%}.uk-width-small-3-4{width:75%}.uk-width-small-1-5,.uk-width-small-2-10{width:20%}.uk-width-small-2-5,.uk-width-small-4-10{width:40%}.uk-width-small-3-5,.uk-width-small-6-10{width:60%}.uk-width-small-4-5,.uk-width-small-8-10{width:80%}.uk-width-small-1-6{width:16.666%}.uk-width-small-5-6{width:83.333%}.uk-width-small-1-10{width:10%}.uk-width-small-3-10{width:30%}.uk-width-small-7-10{width:70%}.uk-width-small-9-10{width:90%}}@media (min-width:768px){.uk-width-medium-1-1{width:100%}.uk-width-medium-1-2,.uk-width-medium-2-4,.uk-width-medium-3-6,.uk-width-medium-5-10{width:50%}.uk-width-medium-1-3,.uk-width-medium-2-6{width:33.333%}.uk-width-medium-2-3,.uk-width-medium-4-6{width:66.666%}.uk-width-medium-1-4{width:25%}.uk-width-medium-3-4{width:75%}.uk-width-medium-1-5,.uk-width-medium-2-10{width:20%}.uk-width-medium-2-5,.uk-width-medium-4-10{width:40%}.uk-width-medium-3-5,.uk-width-medium-6-10{width:60%}.uk-width-medium-4-5,.uk-width-medium-8-10{width:80%}.uk-width-medium-1-6{width:16.666%}.uk-width-medium-5-6{width:83.333%}.uk-width-medium-1-10{width:10%}.uk-width-medium-3-10{width:30%}.uk-width-medium-7-10{width:70%}.uk-width-medium-9-10{width:90%}}@media (min-width:960px){.uk-width-large-1-1{width:100%}.uk-width-large-1-2,.uk-width-large-2-4,.uk-width-large-3-6,.uk-width-large-5-10{width:50%}.uk-width-large-1-3,.uk-width-large-2-6{width:33.333%}.uk-width-large-2-3,.uk-width-large-4-6{width:66.666%}.uk-width-large-1-4{width:25%}.uk-width-large-3-4{width:75%}.uk-width-large-1-5,.uk-width-large-2-10{width:20%}.uk-width-large-2-5,.uk-width-large-4-10{width:40%}.uk-width-large-3-5,.uk-width-large-6-10{width:60%}.uk-width-large-4-5,.uk-width-large-8-10{width:80%}.uk-width-large-1-6{width:16.666%}.uk-width-large-5-6{width:83.333%}.uk-width-large-1-10{width:10%}.uk-width-large-3-10{width:30%}.uk-width-large-7-10{width:70%}.uk-width-large-9-10{width:90%}}@media (min-width:768px){[class*=uk-push-],[class*=uk-pull-]{position:relative}.uk-push-1-2,.uk-push-2-4,.uk-push-3-6,.uk-push-5-10{left:50%}.uk-push-1-3,.uk-push-2-6{left:33.333%}.uk-push-2-3,.uk-push-4-6{left:66.666%}.uk-push-1-4{left:25%}.uk-push-3-4{left:75%}.uk-push-1-5,.uk-push-2-10{left:20%}.uk-push-2-5,.uk-push-4-10{left:40%}.uk-push-3-5,.uk-push-6-10{left:60%}.uk-push-4-5,.uk-push-8-10{left:80%}.uk-push-1-6{left:16.666%}.uk-push-5-6{left:83.333%}.uk-push-1-10{left:10%}.uk-push-3-10{left:30%}.uk-push-7-10{left:70%}.uk-push-9-10{left:90%}.uk-pull-1-2,.uk-pull-2-4,.uk-pull-3-6,.uk-pull-5-10{left:-50%}.uk-pull-1-3,.uk-pull-2-6{left:-33.333%}.uk-pull-2-3,.uk-pull-4-6{left:-66.666%}.uk-pull-1-4{left:-25%}.uk-pull-3-4{left:-75%}.uk-pull-1-5,.uk-pull-2-10{left:-20%}.uk-pull-2-5,.uk-pull-4-10{left:-40%}.uk-pull-3-5,.uk-pull-6-10{left:-60%}.uk-pull-4-5,.uk-pull-8-10{left:-80%}.uk-pull-1-6{left:-16.666%}.uk-pull-5-6{left:-83.333%}.uk-pull-1-10{left:-10%}.uk-pull-3-10{left:-30%}.uk-pull-7-10{left:-70%}.uk-pull-9-10{left:-90%}}.uk-panel{display:block;position:relative}.uk-panel,.uk-panel:hover{text-decoration:none}.uk-panel:after,.uk-panel:before{content:"";display:table}.uk-panel:after{clear:both}.uk-panel>:not(.uk-panel-title):last-child{margin-bottom:0}.uk-panel-title{margin-top:0;margin-bottom:15px;font-size:18px;line-height:24px;font-weight:400;text-transform:none;color:#444}.uk-panel-badge{position:absolute;top:0;right:0;z-index:1}.uk-panel-teaser{margin-bottom:15px}.uk-panel-box{padding:15px;background:#fafafa;color:#444;border:1px solid #ddd;border-radius:4px}.uk-panel-box-hover:hover{color:#444}.uk-panel-box .uk-panel-title{color:#444}.uk-panel-box .uk-panel-badge{top:10px;right:10px}.uk-panel-box .uk-panel-teaser{margin-top:-16px;margin-left:-16px;margin-right:-16px}.uk-panel-box>.uk-nav-side{margin:0 -15px}.uk-panel-box-primary{background-color:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-panel-box-primary-hover:hover{color:#2d7091}.uk-panel-box-primary .uk-panel-title{color:#2d7091}.uk-panel-box-secondary{background-color:#fff;color:#444}.uk-panel-box-secondary-hover:hover{color:#444}.uk-panel-box-secondary .uk-panel-title{color:#444}.uk-panel-hover{padding:15px;color:#444;border:1px solid transparent;border-radius:4px}.uk-panel-hover:hover{background:#fafafa;color:#444;border-color:#ddd}.uk-panel-hover .uk-panel-badge{top:10px;right:10px}.uk-panel-hover .uk-panel-teaser{margin-top:-16px;margin-left:-16px;margin-right:-16px}.uk-panel-header .uk-panel-title{padding-bottom:10px;border-bottom:1px solid #ddd;color:#444}.uk-panel-space{padding:30px}.uk-panel-space .uk-panel-badge{top:30px;right:30px}.uk-panel+.uk-panel-divider{margin-top:50px!important}.uk-panel+.uk-panel-divider:before{content:"";display:block;position:absolute;top:-25px;left:0;right:0;border-top:1px solid #ddd}@media (min-width:1220px){.uk-panel+.uk-panel-divider{margin-top:70px!important}.uk-panel+.uk-panel-divider:before{top:-35px}}.uk-panel-box .uk-panel-teaser{border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden;-webkit-transform:translateZ(0)}.uk-block{position:relative;-moz-box-sizing:border-box;box-sizing:border-box;padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block{padding-top:50px;padding-bottom:50px}}.uk-block:after,.uk-block:before{content:"";display:table}.uk-block:after{clear:both}.uk-block>:last-child{margin-bottom:0}.uk-block-large{padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block-large{padding-top:50px;padding-bottom:50px}}@media (min-width:960px){.uk-block-large{padding-top:100px;padding-bottom:100px}}.uk-block-default{background:#fff}.uk-block-muted{background:#f9f9f9}.uk-block-primary{background:#00a8e6}.uk-block-secondary{background:#222}.uk-block-default+.uk-block-default,.uk-block-muted+.uk-block-muted,.uk-block-primary+.uk-block-primary,.uk-block-secondary+.uk-block-secondary{padding-top:0}.uk-article:after,.uk-article:before{content:"";display:table}.uk-article:after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:25px}.uk-article-title{font-size:36px;line-height:42px;font-weight:400;text-transform:none}.uk-article-title a{color:inherit;text-decoration:none}.uk-article-meta{font-size:12px;line-height:18px;color:#999}.uk-article-lead{color:#444;font-size:18px;line-height:24px;font-weight:400}.uk-article-divider{margin-bottom:25px;border-color:#ddd}*+.uk-article-divider{margin-top:25px}.uk-article+.uk-article{padding-top:25px;border-top:1px solid #ddd}.uk-comment-header{margin-bottom:15px;padding:10px;border:1px solid #ddd;border-radius:4px;background:#fafafa}.uk-comment-header:after,.uk-comment-header:before{content:"";display:table}.uk-comment-header:after{clear:both}.uk-comment-avatar{margin-right:15px;float:left}.uk-comment-title{margin:5px 0 0 0;font-size:16px;line-height:22px}.uk-comment-meta{margin:2px 0 0 0;font-size:11px;line-height:16px;color:#999}.uk-comment-body{padding-left:10px;padding-right:10px}.uk-comment-body>:last-child{margin-bottom:0}.uk-comment-list{padding:0;list-style:none}.uk-comment-list .uk-comment+ul{margin:25px 0 0 0;list-style:none}.uk-comment-list .uk-comment+ul>li:nth-child(n+2),.uk-comment-list>li:nth-child(n+2){margin-top:25px}@media (min-width:768px){.uk-comment-list .uk-comment+ul{padding-left:100px}}.uk-comment-primary .uk-comment-header{border-color:rgba(45,112,145,.3);background-color:#ebf7fd;color:#2d7091;text-shadow:0 1px 0 #fff}.uk-cover-background{background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.uk-cover{overflow:hidden}.uk-cover-object{width:auto;height:auto;min-width:100%;min-height:100%;max-width:none;position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}[data-uk-cover]{position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav>li>a{padding:5px 15px}.uk-nav ul{padding-left:15px}.uk-nav ul a{padding:2px 0}.uk-nav li>a>div{font-size:12px;line-height:18px}.uk-nav-header{padding:5px 15px;text-transform:uppercase;font-weight:700;font-size:12px}.uk-nav-header:not(:first-child){margin-top:15px}.uk-nav-divider{margin:9px 15px}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-parent-icon>.uk-parent>a:after{content:"\f104";width:20px;margin-right:-10px;float:right;font-family:FontAwesome;text-align:center}.uk-nav-parent-icon>.uk-parent.uk-open>a:after{content:"\f107"}.uk-nav-side>li>a{color:#444}.uk-nav-side>li>a:focus,.uk-nav-side>li>a:hover{background:rgba(0,0,0,.03);color:#444;outline:0;box-shadow:inset 0 0 1px rgba(0,0,0,.06);text-shadow:0 -1px 0 #fff}.uk-nav-side>li.uk-active>a{background:#00a8e6;color:#fff;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-side .uk-nav-header{color:#444}.uk-nav-side .uk-nav-divider{border-top:1px solid #ddd;box-shadow:0 1px 0 #fff}.uk-nav-side ul a{color:#07d}.uk-nav-side ul a:hover{color:#059}.uk-nav-dropdown>li>a{color:#444}.uk-nav-dropdown>li>a:focus,.uk-nav-dropdown>li>a:hover{background:#00a8e6;color:#fff;outline:0;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-dropdown .uk-nav-header{color:#999}.uk-nav-dropdown .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-dropdown ul a{color:#07d}.uk-nav-dropdown ul a:hover{color:#059}.uk-nav-navbar>li>a{color:#444}.uk-nav-navbar>li>a:focus,.uk-nav-navbar>li>a:hover{background:#00a8e6;color:#fff;outline:0;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-nav-navbar .uk-nav-header{color:#999}.uk-nav-navbar .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-navbar ul a{color:#07d}.uk-nav-navbar ul a:hover{color:#059}.uk-nav-offcanvas>li>a{color:#ccc;padding:10px 15px;border-top:1px solid rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05);text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-nav-offcanvas>.uk-open>a,html:not(.uk-touch) .uk-nav-offcanvas>li>a:focus,html:not(.uk-touch) .uk-nav-offcanvas>li>a:hover{background:#404040;color:#fff;outline:0}html .uk-nav.uk-nav-offcanvas>li.uk-active>a{background:#1a1a1a;color:#fff;box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.uk-nav-offcanvas .uk-nav-header{color:#777;margin-top:0;border-top:1px solid rgba(0,0,0,.3);background:#404040;box-shadow:inset 0 1px 0 rgba(255,255,255,.05);text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-nav-offcanvas .uk-nav-divider{border-top:1px solid rgba(255,255,255,.01);margin:0;height:4px;background:rgba(0,0,0,.2);box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.uk-nav-offcanvas ul a{color:#ccc}html:not(.uk-touch) .uk-nav-offcanvas ul a:hover{color:#fff}.uk-nav-offcanvas{border-bottom:1px solid rgba(0,0,0,.3);box-shadow:0 1px 0 rgba(255,255,255,.05)}.uk-nav-offcanvas .uk-nav-sub{border-top:1px solid rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}.uk-navbar{background:#f5f5f5;color:#444;border:1px solid rgba(0,0,0,.06);border-radius:4px}.uk-navbar:after,.uk-navbar:before{content:"";display:table}.uk-navbar:after{clear:both}.uk-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-navbar-nav>li{float:left;position:relative}.uk-navbar-nav>li>a{display:block;-moz-box-sizing:border-box;box-sizing:border-box;text-decoration:none;height:41px;padding:0 15px;line-height:40px;color:#444;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;margin-top:-1px;margin-left:-1px;border:1px solid transparent;border-bottom-width:0;text-shadow:0 1px 0 #fff}.uk-navbar-nav>li>a[href='#']{cursor:text}.uk-navbar-nav>li.uk-open>a,.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus{background-color:#fafafa;color:#444;outline:0;position:relative;z-index:1;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1)}.uk-navbar-nav>li>a:active{background-color:#eee;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2)}.uk-navbar-nav>li.uk-active>a{background-color:#fafafa;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1)}.uk-navbar-nav .uk-navbar-nav-subtitle{line-height:28px}.uk-navbar-nav-subtitle>div{margin-top:-6px;font-size:10px;line-height:12px}.uk-navbar-brand,.uk-navbar-content,.uk-navbar-toggle{-moz-box-sizing:border-box;box-sizing:border-box;display:block;height:41px;padding:0 15px;float:left;margin-top:-1px;text-shadow:0 1px 0 #fff}.uk-navbar-brand:before,.uk-navbar-content:before,.uk-navbar-toggle:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-navbar-content+.uk-navbar-content:not(.uk-navbar-center){padding-left:0}.uk-navbar-content>a:not([class]){color:#07d}.uk-navbar-content>a:not([class]):hover{color:#059}.uk-navbar-brand{font-size:18px;color:#444;text-decoration:none}.uk-navbar-brand:focus,.uk-navbar-brand:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle{font-size:18px;color:#444;text-decoration:none}.uk-navbar-toggle:focus,.uk-navbar-toggle:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle:after{content:"\f0c9";font-family:FontAwesome;vertical-align:middle}.uk-navbar-toggle-alt:after{content:"\f002"}.uk-navbar-center{float:none;text-align:center;max-width:50%;margin-left:auto;margin-right:auto}.uk-navbar-flip{float:right}.uk-navbar-nav:first-child>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.uk-navbar-flip .uk-navbar-nav>li>a{margin-left:0;margin-right:-1px}.uk-navbar-flip .uk-navbar-nav:first-child>li:first-child>a{border-top-left-radius:0;border-bottom-left-radius:0}.uk-navbar-flip .uk-navbar-nav:last-child>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.uk-navbar-attached{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;border-radius:0}.uk-navbar-attached .uk-navbar-nav>li>a{border-radius:0!important}.uk-subnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-subnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px;position:relative}.uk-subnav:after,.uk-subnav:before{content:"";display:block;overflow:hidden}.uk-subnav:after{clear:both}.uk-subnav>*{float:left}.uk-subnav>*>*{display:inline-block;color:#444}.uk-subnav>*>:focus,.uk-subnav>*>:hover{color:#07d;text-decoration:none}.uk-subnav>.uk-active>*{color:#07d}.uk-subnav-line>:before{content:"";display:inline-block;height:10px;vertical-align:middle}.uk-subnav-line>:nth-child(n+2):before{margin-right:10px;border-left:1px solid #ddd}.uk-subnav-pill>*>*{padding:3px 9px;border-radius:4px}.uk-subnav-pill>*>:focus,.uk-subnav-pill>*>:hover{background:#fafafa;color:#444;text-decoration:none;outline:0;box-shadow:0 0 0 1px rgba(0,0,0,.15)}.uk-subnav-pill>.uk-active>*{background:#00a8e6;color:#fff;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.uk-subnav>.uk-disabled>*{background:0 0;color:#999;text-decoration:none;cursor:text;box-shadow:none}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>li{font-size:1rem;vertical-align:top}.uk-breadcrumb>li,.uk-breadcrumb>li>a,.uk-breadcrumb>li>span{display:inline-block}.uk-breadcrumb>li:nth-child(n+2):before{content:"/";display:inline-block;margin:0 8px}.uk-breadcrumb>li:not(.uk-active)>span{color:#999}.uk-pagination{padding:0;list-style:none;text-align:center;font-size:0}.uk-pagination:after,.uk-pagination:before{content:"";display:table}.uk-pagination:after{clear:both}.uk-pagination>li{display:inline-block;font-size:1rem;vertical-align:top}.uk-pagination>li:nth-child(n+2){margin-left:5px}.uk-pagination>li>a,.uk-pagination>li>span{display:inline-block;min-width:16px;padding:3px 5px;line-height:20px;text-decoration:none;-moz-box-sizing:content-box;box-sizing:content-box;text-align:center;border:1px solid rgba(0,0,0,.06);border-radius:4px}.uk-pagination>li>a{background:#f5f5f5;color:#444;text-shadow:0 1px 0 #fff}.uk-pagination>li>a:focus,.uk-pagination>li>a:hover{background-color:#fafafa;color:#444;outline:0;border-color:rgba(0,0,0,.16)}.uk-pagination>li>a:active{background-color:#eee;color:#444}.uk-pagination>.uk-active>span{background:#00a8e6;color:#fff;border-color:transparent;box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-pagination>.uk-disabled>span{background-color:#fafafa;color:#999;border:1px solid rgba(0,0,0,.06);text-shadow:0 1px 0 #fff}.uk-pagination-previous{float:left}.uk-pagination-next{float:right}.uk-pagination-left{text-align:left}.uk-pagination-right{text-align:right}.uk-tab{margin:0;padding:0;list-style:none;border-bottom:1px solid #ddd}.uk-tab:after,.uk-tab:before{content:"";display:table}.uk-tab:after{clear:both}.uk-tab>li{margin-bottom:-1px;float:left;position:relative}.uk-tab>li>a{display:block;padding:8px 12px 8px 12px;border:1px solid transparent;border-bottom-width:0;color:#07d;text-decoration:none;border-radius:4px 4px 0 0;text-shadow:0 1px 0 #fff}.uk-tab>li:nth-child(n+2)>a{margin-left:5px}.uk-tab>li.uk-open>a,.uk-tab>li>a:focus,.uk-tab>li>a:hover{border-color:rgba(0,0,0,.06);background:#f5f5f5;color:#059;outline:0}.uk-tab>li.uk-open:not(.uk-active)>a,.uk-tab>li:not(.uk-active)>a:focus,.uk-tab>li:not(.uk-active)>a:hover{margin-bottom:1px;padding-bottom:7px}.uk-tab>li.uk-active>a{border-color:#ddd;border-bottom-color:transparent;background:#fff;color:#444}.uk-tab>li.uk-disabled>a{color:#999;cursor:text}.uk-tab>li.uk-disabled.uk-active>a,.uk-tab>li.uk-disabled>a:focus,.uk-tab>li.uk-disabled>a:hover{background:0 0;border-color:transparent}.uk-tab-flip>li{float:right}.uk-tab-flip>li:nth-child(n+2)>a{margin-left:0;margin-right:5px}.uk-tab>li.uk-tab-responsive>a{margin-left:0;margin-right:0}.uk-tab-responsive>a:before{content:"\f0c9\00a0";font-family:FontAwesome}.uk-tab-center{border-bottom:1px solid #ddd}.uk-tab-center-bottom{border-bottom:none;border-top:1px solid #ddd}.uk-tab-center:after,.uk-tab-center:before{content:"";display:table}.uk-tab-center:after{clear:both}.uk-tab-center .uk-tab{position:relative;right:50%;border:none;float:right}.uk-tab-center .uk-tab>li{position:relative;right:-50%}.uk-tab-center .uk-tab>li>a{text-align:center}.uk-tab-bottom{border-top:1px solid #ddd;border-bottom:none}.uk-tab-bottom>li{margin-top:-1px;margin-bottom:0}.uk-tab-bottom>li>a{padding-top:8px;padding-bottom:8px;border-bottom-width:1px;border-top-width:0}.uk-tab-bottom>li.uk-open:not(.uk-active)>a,.uk-tab-bottom>li:not(.uk-active)>a:focus,.uk-tab-bottom>li:not(.uk-active)>a:hover{margin-bottom:0;margin-top:1px;padding-bottom:8px;padding-top:7px}.uk-tab-bottom>li.uk-active>a{border-top-color:transparent;border-bottom-color:#ddd}.uk-tab-grid{margin-left:-5px;border-bottom:none;position:relative;z-index:0}.uk-tab-grid:before{display:block;position:absolute;left:5px;right:0;bottom:-1px;border-top:1px solid #ddd;z-index:-1}.uk-tab-grid>li:first-child>a{margin-left:5px}.uk-tab-grid>li>a{text-align:center}.uk-tab-grid.uk-tab-bottom{border-top:none}.uk-tab-grid.uk-tab-bottom:before{top:-1px;bottom:auto}@media (min-width:768px){.uk-tab-left,.uk-tab-right{border-bottom:none}.uk-tab-left>li,.uk-tab-right>li{margin-bottom:0;float:none}.uk-tab-left>li>a,.uk-tab-right>li>a{padding-top:8px;padding-bottom:8px}.uk-tab-left>li:nth-child(n+2)>a,.uk-tab-right>li:nth-child(n+2)>a{margin-left:0;margin-top:5px}.uk-tab-left>li.uk-active>a,.uk-tab-right>li.uk-active>a{border-color:#ddd}.uk-tab-left{border-right:1px solid #ddd}.uk-tab-left>li{margin-right:-1px}.uk-tab-left>li>a{border-bottom-width:1px;border-right-width:0}.uk-tab-left>li:not(.uk-active)>a:focus,.uk-tab-left>li:not(.uk-active)>a:hover{margin-bottom:0;margin-right:1px;padding-bottom:8px;padding-right:11px}.uk-tab-left>li.uk-active>a{border-right-color:transparent}.uk-tab-right{border-left:1px solid #ddd}.uk-tab-right>li{margin-left:-1px}.uk-tab-right>li>a{border-bottom-width:1px;border-left-width:0}.uk-tab-right>li:not(.uk-active)>a:focus,.uk-tab-right>li:not(.uk-active)>a:hover{margin-bottom:0;margin-left:1px;padding-bottom:8px;padding-left:11px}.uk-tab-right>li.uk-active>a{border-left-color:transparent}}.uk-tab-bottom>li>a{border-radius:0 0 4px 4px}@media (min-width:768px){.uk-tab-left>li>a{border-radius:4px 0 0 4px}.uk-tab-right>li>a{border-radius:0 4px 4px 0}}.uk-thumbnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-thumbnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px}.uk-thumbnav:after,.uk-thumbnav:before{content:"";display:block;overflow:hidden}.uk-thumbnav:after{clear:both}.uk-thumbnav>*{float:left}.uk-thumbnav>*>*{display:block;background:#fff}.uk-thumbnav>*>*>img{opacity:.7;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.uk-thumbnav>*>:focus>img,.uk-thumbnav>*>:hover>img{opacity:1}.uk-thumbnav>.uk-active>*>img{opacity:1}.uk-list{padding:0;list-style:none}.uk-list>li:after,.uk-list>li:before{content:"";display:table}.uk-list>li:after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:20px;list-style:none}.uk-list-line>li:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-list-striped>li{padding:5px 5px;border-bottom:1px solid #ddd}.uk-list-striped>li:nth-of-type(odd){background:#fafafa}.uk-list-space>li:nth-child(n+2){margin-top:10px}.uk-list-striped>li:first-child{border-top:1px solid #ddd}@media (min-width:768px){.uk-description-list-horizontal{overflow:hidden}.uk-description-list-horizontal>dt{width:160px;float:left;clear:both;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-description-list-horizontal>dd{margin-left:180px}}.uk-description-list-line>dt{font-weight:400}.uk-description-list-line>dt:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-description-list-line>dd{color:#999}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:15px}*+.uk-table{margin-top:15px}.uk-table td,.uk-table th{padding:8px 8px;border-bottom:1px solid #ddd}.uk-table th{text-align:left}.uk-table td{vertical-align:top}.uk-table thead th{vertical-align:bottom}.uk-table caption,.uk-table tfoot{font-size:12px;font-style:italic}.uk-table caption{text-align:left;color:#999}.uk-table tbody tr.uk-active{background:#f0f0f0}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-striped tbody tr:nth-of-type(odd){background:#fafafa}.uk-table-condensed td{padding:4px 8px}.uk-table-hover tbody tr:hover{background:#f0f0f0}.uk-form input,.uk-form select,.uk-form textarea{-moz-box-sizing:border-box;box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:inherit}.uk-form select{text-transform:none}.uk-form optgroup{font:inherit;font-weight:700}.uk-form input::-moz-focus-inner{border:0;padding:0}.uk-form input[type=checkbox],.uk-form input[type=radio]{padding:0}.uk-form input[type=checkbox]:not(:disabled),.uk-form input[type=radio]:not(:disabled){cursor:pointer}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form textarea{-webkit-appearance:none}.uk-form input[type=search]::-webkit-search-cancel-button,.uk-form input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-form input[type=number]::-webkit-inner-spin-button,.uk-form input[type=number]::-webkit-outer-spin-button{height:auto}.uk-form fieldset{border:none;margin:0;padding:0}.uk-form textarea{overflow:auto;vertical-align:top}.uk-form ::-moz-placeholder{opacity:1}.uk-form :invalid{box-shadow:none}.uk-form input:not([type=radio]):not([type=checkbox]),.uk-form select{vertical-align:middle}.uk-form>:last-child{margin-bottom:0}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form input[type=datetime-local],.uk-form input[type=date],.uk-form input[type=month],.uk-form input[type=time],.uk-form input[type=week],.uk-form input[type=color],.uk-form select,.uk-form textarea{height:30px;max-width:100%;padding:4px 6px;border:1px solid #ddd;background:#fff;color:#444;-webkit-transition:all linear .2s;transition:all linear .2s;border-radius:4px}.uk-form input:not([type]):focus,.uk-form input[type=text]:focus,.uk-form input[type=password]:focus,.uk-form input[type=email]:focus,.uk-form input[type=url]:focus,.uk-form input[type=search]:focus,.uk-form input[type=tel]:focus,.uk-form input[type=number]:focus,.uk-form input[type=datetime]:focus,.uk-form input[type=datetime-local]:focus,.uk-form input[type=date]:focus,.uk-form input[type=month]:focus,.uk-form input[type=time]:focus,.uk-form input[type=week]:focus,.uk-form input[type=color]:focus,.uk-form select:focus,.uk-form textarea:focus{border-color:#99baca;outline:0;background:#f5fbfe;color:#444}.uk-form input:not([type]):disabled,.uk-form input[type=text]:disabled,.uk-form input[type=password]:disabled,.uk-form input[type=email]:disabled,.uk-form input[type=url]:disabled,.uk-form input[type=search]:disabled,.uk-form input[type=tel]:disabled,.uk-form input[type=number]:disabled,.uk-form input[type=datetime]:disabled,.uk-form input[type=datetime-local]:disabled,.uk-form input[type=date]:disabled,.uk-form input[type=month]:disabled,.uk-form input[type=time]:disabled,.uk-form input[type=week]:disabled,.uk-form input[type=color]:disabled,.uk-form select:disabled,.uk-form textarea:disabled{border-color:#ddd;background-color:#fafafa;color:#999}.uk-form :-ms-input-placeholder{color:#999!important}.uk-form ::-moz-placeholder{color:#999}.uk-form ::-webkit-input-placeholder{color:#999}.uk-form :disabled:-ms-input-placeholder{color:#999!important}.uk-form :disabled::-moz-placeholder{color:#999}.uk-form :disabled::-webkit-input-placeholder{color:#999}.uk-form legend{width:100%;border:0;padding:0;padding-bottom:15px;font-size:18px;line-height:30px}.uk-form legend:after{content:"";display:block;border-bottom:1px solid #ddd;width:100%}input:not([type]).uk-form-small,input[type].uk-form-small,select.uk-form-small,textarea.uk-form-small{height:25px;padding:3px 3px;font-size:12px}input:not([type]).uk-form-large,input[type].uk-form-large,select.uk-form-large,textarea.uk-form-large{height:40px;padding:8px 6px;font-size:16px}.uk-form select[multiple],.uk-form select[size],.uk-form textarea{height:auto}.uk-form-danger{border-color:#dc8d99!important;background:#fff7f8!important;color:#d85030!important}.uk-form-success{border-color:#8ec73b!important;background:#fafff2!important;color:#659f13!important}.uk-form-blank{border-color:transparent!important;border-style:dashed!important;background:0 0!important}.uk-form-blank:focus{border-color:#ddd!important}input.uk-form-width-mini{width:40px}select.uk-form-width-mini{width:65px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-form-row:after,.uk-form-row:before{content:"";display:table}.uk-form-row:after{clear:both}.uk-form-row+.uk-form-row{margin-top:15px}.uk-form-help-inline{display:inline-block;margin:0 0 0 10px}.uk-form-help-block{margin:5px 0 0 0}.uk-form-controls>:first-child{margin-top:0}.uk-form-controls>:last-child{margin-bottom:0}.uk-form-controls-condensed{margin:5px 0}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px;font-weight:700}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px;font-weight:700}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:5px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:5px}}.uk-form-icon{display:inline-block;position:relative;max-width:100%}.uk-form-icon>[class*=uk-icon-]{position:absolute;top:50%;width:30px;margin-top:-7px;font-size:14px;color:#999;text-align:center;pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)>input{padding-left:30px!important}.uk-form-icon-flip>[class*=uk-icon-]{right:0}.uk-form-icon-flip>input{padding-right:30px!important}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:#444;text-transform:none;display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 12px;background:#f5f5f5;vertical-align:middle;line-height:28px;min-height:30px;font-size:1rem;text-decoration:none;text-align:center;border:1px solid rgba(0,0,0,.06);border-radius:4px;text-shadow:0 1px 0 #fff}.uk-button:not(:disabled){cursor:pointer}.uk-button:focus,.uk-button:hover{background-color:#fafafa;color:#444;outline:0;text-decoration:none;border-color:rgba(0,0,0,.16)}.uk-button.uk-active,.uk-button:active{background-color:#eee;color:#444}.uk-button-primary{background-color:#00a8e6;color:#fff}.uk-button-primary:focus,.uk-button-primary:hover{background-color:#35b3ee;color:#fff}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#0091ca;color:#fff}.uk-button-success{background-color:#8cc14c;color:#fff}.uk-button-success:focus,.uk-button-success:hover{background-color:#8ec73b;color:#fff}.uk-button-success.uk-active,.uk-button-success:active{background-color:#72ae41;color:#fff}.uk-button-danger{background-color:#da314b;color:#fff}.uk-button-danger:focus,.uk-button-danger:hover{background-color:#e4354f;color:#fff}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#c91032;color:#fff}.uk-button:disabled{background-color:#fafafa;color:#999;border-color:rgba(0,0,0,.06);box-shadow:none;text-shadow:0 1px 0 #fff}.uk-button-link,.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:disabled,.uk-button-link:focus,.uk-button-link:hover{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none}.uk-button-link{color:#07d}.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:focus,.uk-button-link:hover{color:#059;text-decoration:underline}.uk-button-link:disabled{color:#999}.uk-button-link:focus{outline:1px dotted}.uk-button-mini{min-height:20px;padding:0 6px;line-height:18px;font-size:11px}.uk-button-small{min-height:25px;padding:0 10px;line-height:23px;font-size:12px}.uk-button-large{min-height:40px;padding:0 15px;line-height:38px;font-size:16px;border-radius:5px}.uk-button-group{display:inline-block;vertical-align:middle;position:relative;font-size:0;white-space:nowrap}.uk-button-group>*{display:inline-block}.uk-button-group .uk-button{vertical-align:top}.uk-button-dropdown{display:inline-block;vertical-align:middle;position:relative}.uk-button-danger,.uk-button-primary,.uk-button-success{box-shadow:inset 0 0 5px rgba(0,0,0,.05);text-shadow:0 -1px 0 rgba(0,0,0,.1)}.uk-button-danger:focus,.uk-button-danger:hover,.uk-button-primary:focus,.uk-button-primary:hover,.uk-button-success:focus,.uk-button-success:hover{border-color:rgba(0,0,0,.21)}.uk-button-group>.uk-button:not(:first-child):not(:last-child),.uk-button-group>div:not(:first-child):not(:last-child) .uk-button{border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-radius:0}.uk-button-group>.uk-button:first-child,.uk-button-group>div:first-child .uk-button{border-right-color:rgba(0,0,0,.1);border-top-right-radius:0;border-bottom-right-radius:0}.uk-button-group>.uk-button:last-child,.uk-button-group>div:last-child .uk-button{border-left-color:rgba(0,0,0,.1);border-top-left-radius:0;border-bottom-left-radius:0}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:active,.uk-button-group .uk-button:hover{position:relative}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2)format('woff2'),url(../fonts/fontawesome-webfont.woff)format("woff"),url(../fonts/fontawesome-webfont.ttf)format("truetype");font-weight:400;font-style:normal}[class*=uk-icon-]{font-family:FontAwesome;display:inline-block;font-weight:400;font-style:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=uk-icon-],[class*=uk-icon-]:focus,[class*=uk-icon-]:hover{text-decoration:none}.uk-icon-small{font-size:150%;vertical-align:-10%}.uk-icon-medium{font-size:200%;vertical-align:-16%}.uk-icon-large{font-size:250%;vertical-align:-22%}.uk-icon-justify{width:1em;text-align:center}.uk-icon-spin{display:inline-block;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-icon-hover{color:#999}.uk-icon-hover:hover{color:#444}.uk-icon-button{-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;width:35px;height:35px;border-radius:100%;background:#f5f5f5;line-height:35px;color:#444;font-size:18px;text-align:center;border:1px solid #e7e7e7;text-shadow:0 1px 0 #fff}.uk-icon-button:focus,.uk-icon-button:hover{background-color:#fafafa;color:#444;outline:0;border-color:#d3d3d3}.uk-icon-button:active{background-color:#eee;color:#444}.uk-icon-glass:before{content:"\f000"}.uk-icon-music:before{content:"\f001"}.uk-icon-search:before{content:"\f002"}.uk-icon-envelope-o:before{content:"\f003"}.uk-icon-heart:before{content:"\f004"}.uk-icon-star:before{content:"\f005"}.uk-icon-star-o:before{content:"\f006"}.uk-icon-user:before{content:"\f007"}.uk-icon-film:before{content:"\f008"}.uk-icon-th-large:before{content:"\f009"}.uk-icon-th:before{content:"\f00a"}.uk-icon-th-list:before{content:"\f00b"}.uk-icon-check:before{content:"\f00c"}.uk-icon-close:before,.uk-icon-remove:before,.uk-icon-times:before{content:"\f00d"}.uk-icon-search-plus:before{content:"\f00e"}.uk-icon-search-minus:before{content:"\f010"}.uk-icon-power-off:before{content:"\f011"}.uk-icon-signal:before{content:"\f012"}.uk-icon-cog:before,.uk-icon-gear:before{content:"\f013"}.uk-icon-trash-o:before{content:"\f014"}.uk-icon-home:before{content:"\f015"}.uk-icon-file-o:before{content:"\f016"}.uk-icon-clock-o:before{content:"\f017"}.uk-icon-road:before{content:"\f018"}.uk-icon-download:before{content:"\f019"}.uk-icon-arrow-circle-o-down:before{content:"\f01a"}.uk-icon-arrow-circle-o-up:before{content:"\f01b"}.uk-icon-inbox:before{content:"\f01c"}.uk-icon-play-circle-o:before{content:"\f01d"}.uk-icon-repeat:before,.uk-icon-rotate-right:before{content:"\f01e"}.uk-icon-refresh:before{content:"\f021"}.uk-icon-list-alt:before{content:"\f022"}.uk-icon-lock:before{content:"\f023"}.uk-icon-flag:before{content:"\f024"}.uk-icon-headphones:before{content:"\f025"}.uk-icon-volume-off:before{content:"\f026"}.uk-icon-volume-down:before{content:"\f027"}.uk-icon-volume-up:before{content:"\f028"}.uk-icon-qrcode:before{content:"\f029"}.uk-icon-barcode:before{content:"\f02a"}.uk-icon-tag:before{content:"\f02b"}.uk-icon-tags:before{content:"\f02c"}.uk-icon-book:before{content:"\f02d"}.uk-icon-bookmark:before{content:"\f02e"}.uk-icon-print:before{content:"\f02f"}.uk-icon-camera:before{content:"\f030"}.uk-icon-font:before{content:"\f031"}.uk-icon-bold:before{content:"\f032"}.uk-icon-italic:before{content:"\f033"}.uk-icon-text-height:before{content:"\f034"}.uk-icon-text-width:before{content:"\f035"}.uk-icon-align-left:before{content:"\f036"}.uk-icon-align-center:before{content:"\f037"}.uk-icon-align-right:before{content:"\f038"}.uk-icon-align-justify:before{content:"\f039"}.uk-icon-list:before{content:"\f03a"}.uk-icon-dedent:before,.uk-icon-outdent:before{content:"\f03b"}.uk-icon-indent:before{content:"\f03c"}.uk-icon-video-camera:before{content:"\f03d"}.uk-icon-image:before,.uk-icon-photo:before,.uk-icon-picture-o:before{content:"\f03e"}.uk-icon-pencil:before{content:"\f040"}.uk-icon-map-marker:before{content:"\f041"}.uk-icon-adjust:before{content:"\f042"}.uk-icon-tint:before{content:"\f043"}.uk-icon-edit:before,.uk-icon-pencil-square-o:before{content:"\f044"}.uk-icon-share-square-o:before{content:"\f045"}.uk-icon-check-square-o:before{content:"\f046"}.uk-icon-arrows:before{content:"\f047"}.uk-icon-step-backward:before{content:"\f048"}.uk-icon-fast-backward:before{content:"\f049"}.uk-icon-backward:before{content:"\f04a"}.uk-icon-play:before{content:"\f04b"}.uk-icon-pause:before{content:"\f04c"}.uk-icon-stop:before{content:"\f04d"}.uk-icon-forward:before{content:"\f04e"}.uk-icon-fast-forward:before{content:"\f050"}.uk-icon-step-forward:before{content:"\f051"}.uk-icon-eject:before{content:"\f052"}.uk-icon-chevron-left:before{content:"\f053"}.uk-icon-chevron-right:before{content:"\f054"}.uk-icon-plus-circle:before{content:"\f055"}.uk-icon-minus-circle:before{content:"\f056"}.uk-icon-times-circle:before{content:"\f057"}.uk-icon-check-circle:before{content:"\f058"}.uk-icon-question-circle:before{content:"\f059"}.uk-icon-info-circle:before{content:"\f05a"}.uk-icon-crosshairs:before{content:"\f05b"}.uk-icon-times-circle-o:before{content:"\f05c"}.uk-icon-check-circle-o:before{content:"\f05d"}.uk-icon-ban:before{content:"\f05e"}.uk-icon-arrow-left:before{content:"\f060"}.uk-icon-arrow-right:before{content:"\f061"}.uk-icon-arrow-up:before{content:"\f062"}.uk-icon-arrow-down:before{content:"\f063"}.uk-icon-mail-forward:before,.uk-icon-share:before{content:"\f064"}.uk-icon-expand:before{content:"\f065"}.uk-icon-compress:before{content:"\f066"}.uk-icon-plus:before{content:"\f067"}.uk-icon-minus:before{content:"\f068"}.uk-icon-asterisk:before{content:"\f069"}.uk-icon-exclamation-circle:before{content:"\f06a"}.uk-icon-gift:before{content:"\f06b"}.uk-icon-leaf:before{content:"\f06c"}.uk-icon-fire:before{content:"\f06d"}.uk-icon-eye:before{content:"\f06e"}.uk-icon-eye-slash:before{content:"\f070"}.uk-icon-exclamation-triangle:before,.uk-icon-warning:before{content:"\f071"}.uk-icon-plane:before{content:"\f072"}.uk-icon-calendar:before{content:"\f073"}.uk-icon-random:before{content:"\f074"}.uk-icon-comment:before{content:"\f075"}.uk-icon-magnet:before{content:"\f076"}.uk-icon-chevron-up:before{content:"\f077"}.uk-icon-chevron-down:before{content:"\f078"}.uk-icon-retweet:before{content:"\f079"}.uk-icon-shopping-cart:before{content:"\f07a"}.uk-icon-folder:before{content:"\f07b"}.uk-icon-folder-open:before{content:"\f07c"}.uk-icon-arrows-v:before{content:"\f07d"}.uk-icon-arrows-h:before{content:"\f07e"}.uk-icon-bar-chart-o:before,.uk-icon-bar-chart:before{content:"\f080"}.uk-icon-twitter-square:before{content:"\f081"}.uk-icon-facebook-square:before{content:"\f082"}.uk-icon-camera-retro:before{content:"\f083"}.uk-icon-key:before{content:"\f084"}.uk-icon-cogs:before,.uk-icon-gears:before{content:"\f085"}.uk-icon-comments:before{content:"\f086"}.uk-icon-thumbs-o-up:before{content:"\f087"}.uk-icon-thumbs-o-down:before{content:"\f088"}.uk-icon-star-half:before{content:"\f089"}.uk-icon-heart-o:before{content:"\f08a"}.uk-icon-sign-out:before{content:"\f08b"}.uk-icon-linkedin-square:before{content:"\f08c"}.uk-icon-thumb-tack:before{content:"\f08d"}.uk-icon-external-link:before{content:"\f08e"}.uk-icon-sign-in:before{content:"\f090"}.uk-icon-trophy:before{content:"\f091"}.uk-icon-github-square:before{content:"\f092"}.uk-icon-upload:before{content:"\f093"}.uk-icon-lemon-o:before{content:"\f094"}.uk-icon-phone:before{content:"\f095"}.uk-icon-square-o:before{content:"\f096"}.uk-icon-bookmark-o:before{content:"\f097"}.uk-icon-phone-square:before{content:"\f098"}.uk-icon-twitter:before{content:"\f099"}.uk-icon-facebook-f:before,.uk-icon-facebook:before{content:"\f09a"}.uk-icon-github:before{content:"\f09b"}.uk-icon-unlock:before{content:"\f09c"}.uk-icon-credit-card:before{content:"\f09d"}.uk-icon-rss:before{content:"\f09e"}.uk-icon-hdd-o:before{content:"\f0a0"}.uk-icon-bullhorn:before{content:"\f0a1"}.uk-icon-bell:before{content:"\f0f3"}.uk-icon-certificate:before{content:"\f0a3"}.uk-icon-hand-o-right:before{content:"\f0a4"}.uk-icon-hand-o-left:before{content:"\f0a5"}.uk-icon-hand-o-up:before{content:"\f0a6"}.uk-icon-hand-o-down:before{content:"\f0a7"}.uk-icon-arrow-circle-left:before{content:"\f0a8"}.uk-icon-arrow-circle-right:before{content:"\f0a9"}.uk-icon-arrow-circle-up:before{content:"\f0aa"}.uk-icon-arrow-circle-down:before{content:"\f0ab"}.uk-icon-globe:before{content:"\f0ac"}.uk-icon-wrench:before{content:"\f0ad"}.uk-icon-tasks:before{content:"\f0ae"}.uk-icon-filter:before{content:"\f0b0"}.uk-icon-briefcase:before{content:"\f0b1"}.uk-icon-arrows-alt:before{content:"\f0b2"}.uk-icon-group:before,.uk-icon-users:before{content:"\f0c0"}.uk-icon-chain:before,.uk-icon-link:before{content:"\f0c1"}.uk-icon-cloud:before{content:"\f0c2"}.uk-icon-flask:before{content:"\f0c3"}.uk-icon-cut:before,.uk-icon-scissors:before{content:"\f0c4"}.uk-icon-copy:before,.uk-icon-files-o:before{content:"\f0c5"}.uk-icon-paperclip:before{content:"\f0c6"}.uk-icon-floppy-o:before,.uk-icon-save:before{content:"\f0c7"}.uk-icon-square:before{content:"\f0c8"}.uk-icon-bars:before,.uk-icon-navicon:before,.uk-icon-reorder:before{content:"\f0c9"}.uk-icon-list-ul:before{content:"\f0ca"}.uk-icon-list-ol:before{content:"\f0cb"}.uk-icon-strikethrough:before{content:"\f0cc"}.uk-icon-underline:before{content:"\f0cd"}.uk-icon-table:before{content:"\f0ce"}.uk-icon-magic:before{content:"\f0d0"}.uk-icon-truck:before{content:"\f0d1"}.uk-icon-pinterest:before{content:"\f0d2"}.uk-icon-pinterest-square:before{content:"\f0d3"}.uk-icon-google-plus-square:before{content:"\f0d4"}.uk-icon-google-plus:before{content:"\f0d5"}.uk-icon-money:before{content:"\f0d6"}.uk-icon-caret-down:before{content:"\f0d7"}.uk-icon-caret-up:before{content:"\f0d8"}.uk-icon-caret-left:before{content:"\f0d9"}.uk-icon-caret-right:before{content:"\f0da"}.uk-icon-columns:before{content:"\f0db"}.uk-icon-sort:before,.uk-icon-unsorted:before{content:"\f0dc"}.uk-icon-sort-desc:before,.uk-icon-sort-down:before{content:"\f0dd"}.uk-icon-sort-asc:before,.uk-icon-sort-up:before{content:"\f0de"}.uk-icon-envelope:before{content:"\f0e0"}.uk-icon-linkedin:before{content:"\f0e1"}.uk-icon-rotate-left:before,.uk-icon-undo:before{content:"\f0e2"}.uk-icon-gavel:before,.uk-icon-legal:before{content:"\f0e3"}.uk-icon-dashboard:before,.uk-icon-tachometer:before{content:"\f0e4"}.uk-icon-comment-o:before{content:"\f0e5"}.uk-icon-comments-o:before{content:"\f0e6"}.uk-icon-bolt:before,.uk-icon-flash:before{content:"\f0e7"}.uk-icon-sitemap:before{content:"\f0e8"}.uk-icon-umbrella:before{content:"\f0e9"}.uk-icon-clipboard:before,.uk-icon-paste:before{content:"\f0ea"}.uk-icon-lightbulb-o:before{content:"\f0eb"}.uk-icon-exchange:before{content:"\f0ec"}.uk-icon-cloud-download:before{content:"\f0ed"}.uk-icon-cloud-upload:before{content:"\f0ee"}.uk-icon-user-md:before{content:"\f0f0"}.uk-icon-stethoscope:before{content:"\f0f1"}.uk-icon-suitcase:before{content:"\f0f2"}.uk-icon-bell-o:before{content:"\f0a2"}.uk-icon-coffee:before{content:"\f0f4"}.uk-icon-cutlery:before{content:"\f0f5"}.uk-icon-file-text-o:before{content:"\f0f6"}.uk-icon-building-o:before{content:"\f0f7"}.uk-icon-hospital-o:before{content:"\f0f8"}.uk-icon-ambulance:before{content:"\f0f9"}.uk-icon-medkit:before{content:"\f0fa"}.uk-icon-fighter-jet:before{content:"\f0fb"}.uk-icon-beer:before{content:"\f0fc"}.uk-icon-h-square:before{content:"\f0fd"}.uk-icon-plus-square:before{content:"\f0fe"}.uk-icon-angle-double-left:before{content:"\f100"}.uk-icon-angle-double-right:before{content:"\f101"}.uk-icon-angle-double-up:before{content:"\f102"}.uk-icon-angle-double-down:before{content:"\f103"}.uk-icon-angle-left:before{content:"\f104"}.uk-icon-angle-right:before{content:"\f105"}.uk-icon-angle-up:before{content:"\f106"}.uk-icon-angle-down:before{content:"\f107"}.uk-icon-desktop:before{content:"\f108"}.uk-icon-laptop:before{content:"\f109"}.uk-icon-tablet:before{content:"\f10a"}.uk-icon-mobile-phone:before,.uk-icon-mobile:before{content:"\f10b"}.uk-icon-circle-o:before{content:"\f10c"}.uk-icon-quote-left:before{content:"\f10d"}.uk-icon-quote-right:before{content:"\f10e"}.uk-icon-spinner:before{content:"\f110"}.uk-icon-circle:before{content:"\f111"}.uk-icon-mail-reply:before,.uk-icon-reply:before{content:"\f112"}.uk-icon-github-alt:before{content:"\f113"}.uk-icon-folder-o:before{content:"\f114"}.uk-icon-folder-open-o:before{content:"\f115"}.uk-icon-smile-o:before{content:"\f118"}.uk-icon-frown-o:before{content:"\f119"}.uk-icon-meh-o:before{content:"\f11a"}.uk-icon-gamepad:before{content:"\f11b"}.uk-icon-keyboard-o:before{content:"\f11c"}.uk-icon-flag-o:before{content:"\f11d"}.uk-icon-flag-checkered:before{content:"\f11e"}.uk-icon-terminal:before{content:"\f120"}.uk-icon-code:before{content:"\f121"}.uk-icon-mail-reply-all:before,.uk-icon-reply-all:before{content:"\f122"}.uk-icon-star-half-empty:before,.uk-icon-star-half-full:before,.uk-icon-star-half-o:before{content:"\f123"}.uk-icon-location-arrow:before{content:"\f124"}.uk-icon-crop:before{content:"\f125"}.uk-icon-code-fork:before{content:"\f126"}.uk-icon-chain-broken:before,.uk-icon-unlink:before{content:"\f127"}.uk-icon-question:before{content:"\f128"}.uk-icon-info:before{content:"\f129"}.uk-icon-exclamation:before{content:"\f12a"}.uk-icon-superscript:before{content:"\f12b"}.uk-icon-subscript:before{content:"\f12c"}.uk-icon-eraser:before{content:"\f12d"}.uk-icon-puzzle-piece:before{content:"\f12e"}.uk-icon-microphone:before{content:"\f130"}.uk-icon-microphone-slash:before{content:"\f131"}.uk-icon-shield:before{content:"\f132"}.uk-icon-calendar-o:before{content:"\f133"}.uk-icon-fire-extinguisher:before{content:"\f134"}.uk-icon-rocket:before{content:"\f135"}.uk-icon-maxcdn:before{content:"\f136"}.uk-icon-chevron-circle-left:before{content:"\f137"}.uk-icon-chevron-circle-right:before{content:"\f138"}.uk-icon-chevron-circle-up:before{content:"\f139"}.uk-icon-chevron-circle-down:before{content:"\f13a"}.uk-icon-html5:before{content:"\f13b"}.uk-icon-css3:before{content:"\f13c"}.uk-icon-anchor:before{content:"\f13d"}.uk-icon-unlock-alt:before{content:"\f13e"}.uk-icon-bullseye:before{content:"\f140"}.uk-icon-ellipsis-h:before{content:"\f141"}.uk-icon-ellipsis-v:before{content:"\f142"}.uk-icon-rss-square:before{content:"\f143"}.uk-icon-play-circle:before{content:"\f144"}.uk-icon-ticket:before{content:"\f145"}.uk-icon-minus-square:before{content:"\f146"}.uk-icon-minus-square-o:before{content:"\f147"}.uk-icon-level-up:before{content:"\f148"}.uk-icon-level-down:before{content:"\f149"}.uk-icon-check-square:before{content:"\f14a"}.uk-icon-pencil-square:before{content:"\f14b"}.uk-icon-external-link-square:before{content:"\f14c"}.uk-icon-share-square:before{content:"\f14d"}.uk-icon-compass:before{content:"\f14e"}.uk-icon-caret-square-o-down:before,.uk-icon-toggle-down:before{content:"\f150"}.uk-icon-caret-square-o-up:before,.uk-icon-toggle-up:before{content:"\f151"}.uk-icon-caret-square-o-right:before,.uk-icon-toggle-right:before{content:"\f152"}.uk-icon-eur:before,.uk-icon-euro:before{content:"\f153"}.uk-icon-gbp:before{content:"\f154"}.uk-icon-dollar:before,.uk-icon-usd:before{content:"\f155"}.uk-icon-inr:before,.uk-icon-rupee:before{content:"\f156"}.uk-icon-cny:before,.uk-icon-jpy:before,.uk-icon-rmb:before,.uk-icon-yen:before{content:"\f157"}.uk-icon-rouble:before,.uk-icon-rub:before,.uk-icon-ruble:before{content:"\f158"}.uk-icon-krw:before,.uk-icon-won:before{content:"\f159"}.uk-icon-bitcoin:before,.uk-icon-btc:before{content:"\f15a"}.uk-icon-file:before{content:"\f15b"}.uk-icon-file-text:before{content:"\f15c"}.uk-icon-sort-alpha-asc:before{content:"\f15d"}.uk-icon-sort-alpha-desc:before{content:"\f15e"}.uk-icon-sort-amount-asc:before{content:"\f160"}.uk-icon-sort-amount-desc:before{content:"\f161"}.uk-icon-sort-numeric-asc:before{content:"\f162"}.uk-icon-sort-numeric-desc:before{content:"\f163"}.uk-icon-thumbs-up:before{content:"\f164"}.uk-icon-thumbs-down:before{content:"\f165"}.uk-icon-youtube-square:before{content:"\f166"}.uk-icon-youtube:before{content:"\f167"}.uk-icon-xing:before{content:"\f168"}.uk-icon-xing-square:before{content:"\f169"}.uk-icon-youtube-play:before{content:"\f16a"}.uk-icon-dropbox:before{content:"\f16b"}.uk-icon-stack-overflow:before{content:"\f16c"}.uk-icon-instagram:before{content:"\f16d"}.uk-icon-flickr:before{content:"\f16e"}.uk-icon-adn:before{content:"\f170"}.uk-icon-bitbucket:before{content:"\f171"}.uk-icon-bitbucket-square:before{content:"\f172"}.uk-icon-tumblr:before{content:"\f173"}.uk-icon-tumblr-square:before{content:"\f174"}.uk-icon-long-arrow-down:before{content:"\f175"}.uk-icon-long-arrow-up:before{content:"\f176"}.uk-icon-long-arrow-left:before{content:"\f177"}.uk-icon-long-arrow-right:before{content:"\f178"}.uk-icon-apple:before{content:"\f179"}.uk-icon-windows:before{content:"\f17a"}.uk-icon-android:before{content:"\f17b"}.uk-icon-linux:before{content:"\f17c"}.uk-icon-dribbble:before{content:"\f17d"}.uk-icon-skype:before{content:"\f17e"}.uk-icon-foursquare:before{content:"\f180"}.uk-icon-trello:before{content:"\f181"}.uk-icon-female:before{content:"\f182"}.uk-icon-male:before{content:"\f183"}.uk-icon-gittip:before,.uk-icon-gratipay:before{content:"\f184"}.uk-icon-sun-o:before{content:"\f185"}.uk-icon-moon-o:before{content:"\f186"}.uk-icon-archive:before{content:"\f187"}.uk-icon-bug:before{content:"\f188"}.uk-icon-vk:before{content:"\f189"}.uk-icon-weibo:before{content:"\f18a"}.uk-icon-renren:before{content:"\f18b"}.uk-icon-pagelines:before{content:"\f18c"}.uk-icon-stack-exchange:before{content:"\f18d"}.uk-icon-arrow-circle-o-right:before{content:"\f18e"}.uk-icon-arrow-circle-o-left:before{content:"\f190"}.uk-icon-caret-square-o-left:before,.uk-icon-toggle-left:before{content:"\f191"}.uk-icon-dot-circle-o:before{content:"\f192"}.uk-icon-wheelchair:before{content:"\f193"}.uk-icon-vimeo-square:before{content:"\f194"}.uk-icon-try:before,.uk-icon-turkish-lira:before{content:"\f195"}.uk-icon-plus-square-o:before{content:"\f196"}.uk-icon-space-shuttle:before{content:"\f197"}.uk-icon-slack:before{content:"\f198"}.uk-icon-envelope-square:before{content:"\f199"}.uk-icon-wordpress:before{content:"\f19a"}.uk-icon-openid:before{content:"\f19b"}.uk-icon-bank:before,.uk-icon-institution:before,.uk-icon-university:before{content:"\f19c"}.uk-icon-graduation-cap:before,.uk-icon-mortar-board:before{content:"\f19d"}.uk-icon-yahoo:before{content:"\f19e"}.uk-icon-google:before{content:"\f1a0"}.uk-icon-reddit:before{content:"\f1a1"}.uk-icon-reddit-square:before{content:"\f1a2"}.uk-icon-stumbleupon-circle:before{content:"\f1a3"}.uk-icon-stumbleupon:before{content:"\f1a4"}.uk-icon-delicious:before{content:"\f1a5"}.uk-icon-digg:before{content:"\f1a6"}.uk-icon-pied-piper:before{content:"\f1a7"}.uk-icon-pied-piper-alt:before{content:"\f1a8"}.uk-icon-drupal:before{content:"\f1a9"}.uk-icon-joomla:before{content:"\f1aa"}.uk-icon-language:before{content:"\f1ab"}.uk-icon-fax:before{content:"\f1ac"}.uk-icon-building:before{content:"\f1ad"}.uk-icon-child:before{content:"\f1ae"}.uk-icon-paw:before{content:"\f1b0"}.uk-icon-spoon:before{content:"\f1b1"}.uk-icon-cube:before{content:"\f1b2"}.uk-icon-cubes:before{content:"\f1b3"}.uk-icon-behance:before{content:"\f1b4"}.uk-icon-behance-square:before{content:"\f1b5"}.uk-icon-steam:before{content:"\f1b6"}.uk-icon-steam-square:before{content:"\f1b7"}.uk-icon-recycle:before{content:"\f1b8"}.uk-icon-automobile:before,.uk-icon-car:before{content:"\f1b9"}.uk-icon-cab:before,.uk-icon-taxi:before{content:"\f1ba"}.uk-icon-tree:before{content:"\f1bb"}.uk-icon-spotify:before{content:"\f1bc"}.uk-icon-deviantart:before{content:"\f1bd"}.uk-icon-soundcloud:before{content:"\f1be"}.uk-icon-database:before{content:"\f1c0"}.uk-icon-file-pdf-o:before{content:"\f1c1"}.uk-icon-file-word-o:before{content:"\f1c2"}.uk-icon-file-excel-o:before{content:"\f1c3"}.uk-icon-file-powerpoint-o:before{content:"\f1c4"}.uk-icon-file-image-o:before,.uk-icon-file-photo-o:before,.uk-icon-file-picture-o:before{content:"\f1c5"}.uk-icon-file-archive-o:before,.uk-icon-file-zip-o:before{content:"\f1c6"}.uk-icon-file-audio-o:before,.uk-icon-file-sound-o:before{content:"\f1c7"}.uk-icon-file-movie-o:before,.uk-icon-file-video-o:before{content:"\f1c8"}.uk-icon-file-code-o:before{content:"\f1c9"}.uk-icon-vine:before{content:"\f1ca"}.uk-icon-codepen:before{content:"\f1cb"}.uk-icon-jsfiddle:before{content:"\f1cc"}.uk-icon-life-bouy:before,.uk-icon-life-buoy:before,.uk-icon-life-ring:before,.uk-icon-life-saver:before,.uk-icon-support:before{content:"\f1cd"}.uk-icon-circle-o-notch:before{content:"\f1ce"}.uk-icon-ra:before,.uk-icon-rebel:before{content:"\f1d0"}.uk-icon-empire:before,.uk-icon-ge:before{content:"\f1d1"}.uk-icon-git-square:before{content:"\f1d2"}.uk-icon-git:before{content:"\f1d3"}.uk-icon-hacker-news:before{content:"\f1d4"}.uk-icon-tencent-weibo:before{content:"\f1d5"}.uk-icon-qq:before{content:"\f1d6"}.uk-icon-wechat:before,.uk-icon-weixin:before{content:"\f1d7"}.uk-icon-paper-plane:before,.uk-icon-send:before{content:"\f1d8"}.uk-icon-paper-plane-o:before,.uk-icon-send-o:before{content:"\f1d9"}.uk-icon-history:before{content:"\f1da"}.uk-icon-circle-thin:before,.uk-icon-genderless:before{content:"\f1db"}.uk-icon-header:before{content:"\f1dc"}.uk-icon-paragraph:before{content:"\f1dd"}.uk-icon-sliders:before{content:"\f1de"}.uk-icon-share-alt:before{content:"\f1e0"}.uk-icon-share-alt-square:before{content:"\f1e1"}.uk-icon-bomb:before{content:"\f1e2"}.uk-icon-futbol-o:before,.uk-icon-soccer-ball-o:before{content:"\f1e3"}.uk-icon-tty:before{content:"\f1e4"}.uk-icon-binoculars:before{content:"\f1e5"}.uk-icon-plug:before{content:"\f1e6"}.uk-icon-slideshare:before{content:"\f1e7"}.uk-icon-twitch:before{content:"\f1e8"}.uk-icon-yelp:before{content:"\f1e9"}.uk-icon-newspaper-o:before{content:"\f1ea"}.uk-icon-wifi:before{content:"\f1eb"}.uk-icon-calculator:before{content:"\f1ec"}.uk-icon-paypal:before{content:"\f1ed"}.uk-icon-google-wallet:before{content:"\f1ee"}.uk-icon-cc-visa:before{content:"\f1f0"}.uk-icon-cc-mastercard:before{content:"\f1f1"}.uk-icon-cc-discover:before{content:"\f1f2"}.uk-icon-cc-amex:before{content:"\f1f3"}.uk-icon-cc-paypal:before{content:"\f1f4"}.uk-icon-cc-stripe:before{content:"\f1f5"}.uk-icon-bell-slash:before{content:"\f1f6"}.uk-icon-bell-slash-o:before{content:"\f1f7"}.uk-icon-trash:before{content:"\f1f8"}.uk-icon-copyright:before{content:"\f1f9"}.uk-icon-at:before{content:"\f1fa"}.uk-icon-eyedropper:before{content:"\f1fb"}.uk-icon-paint-brush:before{content:"\f1fc"}.uk-icon-birthday-cake:before{content:"\f1fd"}.uk-icon-area-chart:before{content:"\f1fe"}.uk-icon-pie-chart:before{content:"\f200"}.uk-icon-line-chart:before{content:"\f201"}.uk-icon-lastfm:before{content:"\f202"}.uk-icon-lastfm-square:before{content:"\f203"}.uk-icon-toggle-off:before{content:"\f204"}.uk-icon-toggle-on:before{content:"\f205"}.uk-icon-bicycle:before{content:"\f206"}.uk-icon-bus:before{content:"\f207"}.uk-icon-ioxhost:before{content:"\f208"}.uk-icon-angellist:before{content:"\f209"}.uk-icon-cc:before{content:"\f20a"}.uk-icon-ils:before,.uk-icon-shekel:before,.uk-icon-sheqel:before{content:"\f20b"}.uk-icon-meanpath:before{content:"\f20c"}.uk-icon-buysellads:before{content:"\f20d"}.uk-icon-connectdevelop:before{content:"\f20e"}.uk-icon-dashcube:before{content:"\f210"}.uk-icon-forumbee:before{content:"\f211"}.uk-icon-leanpub:before{content:"\f212"}.uk-icon-sellsy:before{content:"\f213"}.uk-icon-shirtsinbulk:before{content:"\f214"}.uk-icon-simplybuilt:before{content:"\f215"}.uk-icon-skyatlas:before{content:"\f216"}.uk-icon-cart-plus:before{content:"\f217"}.uk-icon-cart-arrow-down:before{content:"\f218"}.uk-icon-diamond:before{content:"\f219"}.uk-icon-ship:before{content:"\f21a"}.uk-icon-user-secret:before{content:"\f21b"}.uk-icon-motorcycle:before{content:"\f21c"}.uk-icon-street-view:before{content:"\f21d"}.uk-icon-heartbeat:before{content:"\f21e"}.uk-icon-venus:before{content:"\f221"}.uk-icon-mars:before{content:"\f222"}.uk-icon-mercury:before{content:"\f223"}.uk-icon-transgender:before{content:"\f224"}.uk-icon-transgender-alt:before{content:"\f225"}.uk-icon-venus-double:before{content:"\f226"}.uk-icon-mars-double:before{content:"\f227"}.uk-icon-venus-mars:before{content:"\f228"}.uk-icon-mars-stroke:before{content:"\f229"}.uk-icon-mars-stroke-v:before{content:"\f22a"}.uk-icon-mars-stroke-h:before{content:"\f22b"}.uk-icon-neuter:before{content:"\f22c"}.uk-icon-facebook-official:before{content:"\f230"}.uk-icon-pinterest-p:before{content:"\f231"}.uk-icon-whatsapp:before{content:"\f232"}.uk-icon-server:before{content:"\f233"}.uk-icon-user-plus:before{content:"\f234"}.uk-icon-user-times:before{content:"\f235"}.uk-icon-bed:before,.uk-icon-hotel:before{content:"\f236"}.uk-icon-viacoin:before{content:"\f237"}.uk-icon-train:before{content:"\f238"}.uk-icon-subway:before{content:"\f239"}.uk-icon-medium-logo:before{content:"\f23a"}.uk-close::-moz-focus-inner{border:0;padding:0}.uk-close{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background:0 0;display:inline-block;-moz-box-sizing:content-box;box-sizing:content-box;width:20px;line-height:20px;text-align:center;vertical-align:middle;opacity:.3}.uk-close:after{display:block;content:"\f00d";font-family:FontAwesome}.uk-close:focus,.uk-close:hover{opacity:.5;outline:0;color:inherit;text-decoration:none;cursor:pointer}.uk-close-alt{padding:2px;border-radius:50%;background:#fff;opacity:1;box-shadow:0 0 0 1px rgba(0,0,0,.1),0 0 6px rgba(0,0,0,.3)}.uk-close-alt:focus,.uk-close-alt:hover{opacity:1}.uk-close-alt:after{opacity:.5}.uk-close-alt:focus:after,.uk-close-alt:hover:after{opacity:.8}.uk-badge{display:inline-block;padding:0 5px;background:#00a8e6;font-size:10px;font-weight:700;line-height:14px;color:#fff;text-align:center;vertical-align:middle;text-transform:none;border:1px solid rgba(0,0,0,.06);border-radius:2px;text-shadow:0 1px 0 rgba(0,0,0,.1)}a.uk-badge:hover{color:#fff}.uk-badge-notification{-moz-box-sizing:border-box;box-sizing:border-box;min-width:18px;border-radius:500px;font-size:12px;line-height:18px}.uk-badge-success{background-color:#8cc14c}.uk-badge-warning{background-color:#faa732}.uk-badge-danger{background-color:#da314b}.uk-alert{margin-bottom:15px;padding:10px;background:#ebf7fd;color:#2d7091;border:1px solid rgba(45,112,145,.3);border-radius:4px;text-shadow:0 1px 0 #fff}*+.uk-alert{margin-top:15px}.uk-alert>:last-child{margin-bottom:0}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert>.uk-close:first-child{float:right}.uk-alert>.uk-close:first-child+*{margin-top:0}.uk-alert-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-alert-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-alert-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)}.uk-alert-large{padding:20px}.uk-alert-large>.uk-close:first-child{margin:-10px -10px 0 0}.uk-thumbnail{display:inline-block;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px;border:1px solid #ddd;background:#fff;border-radius:4px}a.uk-thumbnail:focus,a.uk-thumbnail:hover{border-color:#aaa;background-color:#fff;text-decoration:none;outline:0}.uk-thumbnail-caption{padding-top:4px;text-align:center;color:#444}.uk-thumbnail-mini{width:150px}.uk-thumbnail-small{width:200px}.uk-thumbnail-medium{width:300px}.uk-thumbnail-large{width:400px}.uk-thumbnail-expand,.uk-thumbnail-expand>img{width:100%}.uk-overlay{display:inline-block;position:relative;max-width:100%;vertical-align:middle;overflow:hidden;-webkit-transform:translateZ(0);margin:0}.uk-overlay.uk-border-circle{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.uk-overlay>:first-child{margin-bottom:0}.uk-overlay-panel{position:absolute;top:0;bottom:0;left:0;right:0;padding:20px;color:#fff}.uk-overlay-panel.uk-flex>*>:last-child,.uk-overlay-panel>:last-child{margin-bottom:0}.uk-overlay-panel h1,.uk-overlay-panel h2,.uk-overlay-panel h3,.uk-overlay-panel h4,.uk-overlay-panel h5,.uk-overlay-panel h6{color:inherit}.uk-overlay-panel a:not([class]){color:inherit;text-decoration:underline}.uk-overlay-panel a[class*=uk-icon-]:not(.uk-icon-button){color:inherit}.uk-overlay-hover:not(:hover):not(.uk-hover) .uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-active :not(.uk-active)>.uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-background{background:rgba(0,0,0,.5)}.uk-overlay-image{padding:0}.uk-overlay-top{bottom:auto}.uk-overlay-bottom{top:auto}.uk-overlay-left{right:auto}.uk-overlay-right{left:auto}.uk-overlay-icon:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-blur,.uk-overlay-fade,.uk-overlay-grayscale,.uk-overlay-scale,.uk-overlay-spin,[class*=uk-overlay-slide]{transition-duration:.3s;transition-timing-function:ease-out;transition-property:opacity transform filter}.uk-overlay-active .uk-overlay-fade,.uk-overlay-active .uk-overlay-scale,.uk-overlay-active .uk-overlay-spin,.uk-overlay-active [class*=uk-overlay-slide]{transition-duration:.8s}.uk-overlay-fade{opacity:.7}.uk-overlay-active .uk-active>.uk-overlay-fade,.uk-overlay-hover:hover .uk-overlay-fade{opacity:1}.uk-overlay-scale{-webkit-transform:scale(1);transform:scale(1)}.uk-overlay-active .uk-active>.uk-overlay-scale,.uk-overlay-hover:hover .uk-overlay-scale{-webkit-transform:scale(1.1);transform:scale(1.1)}.uk-overlay-spin{-webkit-transform:scale(1)rotate(0);transform:scale(1)rotate(0)}.uk-overlay-active .uk-active>.uk-overlay-spin,.uk-overlay-hover:hover .uk-overlay-spin{-webkit-transform:scale(1.1)rotate(3deg);transform:scale(1.1)rotate(3deg)}.uk-overlay-grayscale{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.uk-overlay-active .uk-active>.uk-overlay-grayscale,.uk-overlay-hover:hover .uk-overlay-grayscale{-webkit-filter:grayscale(0);filter:grayscale(0)}[class*=uk-overlay-slide]{opacity:0}.uk-overlay-slide-top{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.uk-overlay-slide-bottom{-webkit-transform:translateY(100%);transform:translateY(100%)}.uk-overlay-slide-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.uk-overlay-slide-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-overlay-active .uk-active>[class*=uk-overlay-slide],.uk-overlay-hover:hover [class*=uk-overlay-slide]{opacity:1;-webkit-transform:translateX(0)translateY(0);transform:translateX(0)translateY(0)}.uk-overlay-area{position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.3);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-area,.uk-overlay-toggle:hover .uk-overlay-area,.uk-overlay.uk-hover .uk-overlay-area,.uk-overlay:hover .uk-overlay-area{opacity:1}.uk-overlay-area:empty:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-area:not(:empty){font-size:0}.uk-overlay-area:not(:empty):before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-overlay-area-content{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;vertical-align:middle;font-size:1rem;text-align:center;padding:0 15px;color:#fff}.uk-overlay-area-content>:last-child{margin-bottom:0}.uk-overlay-area-content a:not([class]),.uk-overlay-area-content a:not([class]):hover{color:inherit}.uk-overlay-caption{position:absolute;bottom:0;left:0;right:0;padding:15px;background:rgba(0,0,0,.5);color:#fff;opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-caption,.uk-overlay-toggle:hover .uk-overlay-caption,.uk-overlay.uk-hover .uk-overlay-caption,.uk-overlay:hover .uk-overlay-caption{opacity:1}[class*=uk-animation-]{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media screen{[data-uk-scrollspy*=uk-animation-]:not([data-uk-scrollspy*=target]){opacity:0}}.uk-animation-fade{-webkit-animation-name:uk-fade;animation-name:uk-fade;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-timing-function:linear!important;animation-timing-function:linear!important}.uk-animation-scale-up{-webkit-animation-name:uk-fade-scale-02;animation-name:uk-fade-scale-02}.uk-animation-scale-down{-webkit-animation-name:uk-fade-scale-18;animation-name:uk-fade-scale-18}.uk-animation-slide-top{-webkit-animation-name:uk-fade-top;animation-name:uk-fade-top}.uk-animation-slide-bottom{-webkit-animation-name:uk-fade-bottom;animation-name:uk-fade-bottom}.uk-animation-slide-left{-webkit-animation-name:uk-fade-left;animation-name:uk-fade-left}.uk-animation-slide-right{-webkit-animation-name:uk-fade-right;animation-name:uk-fade-right}.uk-animation-scale{-webkit-animation-name:uk-scale-12;animation-name:uk-scale-12}.uk-animation-shake{-webkit-animation-name:uk-shake;animation-name:uk-shake}.uk-animation-reverse{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}.uk-animation-15{-webkit-animation-duration:15s;animation-duration:15s}.uk-animation-top-left{-webkit-transform-origin:0 0;transform-origin:0 0}.uk-animation-top-center{-webkit-transform-origin:50% 0;transform-origin:50% 0}.uk-animation-top-right{-webkit-transform-origin:100% 0;transform-origin:100% 0}.uk-animation-middle-left{-webkit-transform-origin:0 50%;transform-origin:0 50%}.uk-animation-middle-right{-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.uk-animation-bottom-left{-webkit-transform-origin:0 100%;transform-origin:0 100%}.uk-animation-bottom-center{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.uk-animation-bottom-right{-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.uk-animation-hover:not(:hover),.uk-animation-hover:not(:hover) [class*=uk-animation-],.uk-touch .uk-animation-hover:not(.uk-hover),.uk-touch .uk-animation-hover:not(.uk-hover) [class*=uk-animation-]{-webkit-animation-name:none;animation-name:none}@-webkit-keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes uk-fade-top{0%{opacity:0;-webkit-transform:translateY(-100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom{0%{opacity:0;-webkit-transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left{0%{opacity:0;-webkit-transform:translateX(-100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right{0%{opacity:0;-webkit-transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-scale-02{0%{opacity:0;-webkit-transform:scale(.2)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-15{0%{opacity:0;-webkit-transform:scale(1.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-15{0%{opacity:0;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-18{0%{opacity:0;-webkit-transform:scale(1.8)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-slide-left{0%{-webkit-transform:translateX(-100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right{0%{-webkit-transform:translateX(100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-left-33{0%{-webkit-transform:translateX(33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left-33{0%{transform:translateX(33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right-33{0%{-webkit-transform:translateX(-33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right-33{0%{transform:translateX(-33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-scale-12{0%{-webkit-transform:scale(1.2)}100%{-webkit-transform:scale(1)}}@keyframes uk-scale-12{0%{transform:scale(1.2)}100%{transform:scale(1)}}@-webkit-keyframes uk-rotate{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes uk-rotate{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}@-webkit-keyframes uk-shake{0%,100%{-webkit-transform:translateX(0)}10%{-webkit-transform:translateX(-9px)}20%{-webkit-transform:translateX(8px)}30%{-webkit-transform:translateX(-7px)}40%{-webkit-transform:translateX(6px)}50%{-webkit-transform:translateX(-5px)}60%{-webkit-transform:translateX(4px)}70%{-webkit-transform:translateX(-3px)}80%{-webkit-transform:translateX(2px)}90%{-webkit-transform:translateX(-1px)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@-webkit-keyframes uk-slide-top-fixed{0%{opacity:0;-webkit-transform:translateY(-10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-top-fixed{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-slide-bottom-fixed{0%{opacity:0;-webkit-transform:translateY(10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-bottom-fixed{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}.uk-dropdown{display:none;position:absolute;top:100%;left:0;z-index:1020;-moz-box-sizing:border-box;box-sizing:border-box;width:200px;margin-top:5px;padding:15px;background:#fff;color:#444;font-size:1rem;vertical-align:top;border:1px solid #ddd;border-radius:4px}.uk-open>.uk-dropdown{display:block;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-dropdown-flip{left:auto;right:0}.uk-dropdown-up{top:auto;bottom:100%;margin-top:auto;margin-bottom:5px}.uk-dropdown .uk-nav{margin:0 -15px}.uk-grid .uk-dropdown-grid+.uk-dropdown-grid{margin-top:15px}.uk-dropdown-grid>[class*=uk-width-]>.uk-panel+.uk-panel{margin-top:15px}@media (min-width:768px){.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid{margin-left:-15px;margin-right:-15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]{padding-left:15px;padding-right:15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){border-left:1px solid #ddd}.uk-dropdown-width-2:not(.uk-dropdown-stack){width:400px}.uk-dropdown-width-3:not(.uk-dropdown-stack){width:600px}.uk-dropdown-width-4:not(.uk-dropdown-stack){width:800px}.uk-dropdown-width-5:not(.uk-dropdown-stack){width:1000px}}@media (max-width:767px){.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}.uk-dropdown-small{min-width:150px;width:auto;padding:5px;white-space:nowrap}.uk-dropdown-small .uk-nav{margin:0 -5px}.uk-dropdown-navbar{margin-top:6px;background:#fff;color:#444;left:-1px}.uk-open>.uk-dropdown-navbar{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-dropdown-scrollable{overflow-y:auto;max-height:200px}.uk-dropdown-navbar.uk-dropdown-flip{left:auto}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;background:rgba(0,0,0,.6);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;touch-action:cross-slide-y pinch-zoom double-tap-zoom;-webkit-transform:translateZ(0);transform:translateZ(0)}.uk-modal.uk-open{opacity:1}.uk-modal-page,.uk-modal-page body{overflow:hidden}.uk-modal-dialog{position:relative;-moz-box-sizing:border-box;box-sizing:border-box;margin:50px auto;padding:20px;width:600px;max-width:100%;max-width:calc(100% - 20px);background:#fff;opacity:0;-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-transition:opacity .3s linear,-webkit-transform .3s ease-out;transition:opacity .3s linear,transform .3s ease-out;border-radius:4px;box-shadow:0 0 10px rgba(0,0,0,.3)}@media (max-width:767px){.uk-modal-dialog{width:auto;margin:10px auto}}.uk-open .uk-modal-dialog{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.uk-modal-dialog>:not([class*=uk-modal-]):last-child{margin-bottom:0}.uk-modal-dialog>.uk-close:first-child{margin:-10px -10px 0 0;float:right}.uk-modal-dialog>.uk-close:first-child+:not([class*=uk-modal-]){margin-top:0}.uk-modal-dialog-lightbox{margin:15px auto;padding:0;max-width:95%;max-width:calc(100% - 30px);border-radius:0}.uk-modal-dialog-lightbox>.uk-close:first-child{position:absolute;top:-12px;right:-12px;margin:0;float:none}@media (max-width:767px){.uk-modal-dialog-lightbox>.uk-close:first-child{top:-7px;right:-7px}}@media (min-width:768px){.uk-modal-dialog-large{width:930px}}@media (min-width:1220px){.uk-modal-dialog-large{width:1130px}}.uk-modal-header{margin-bottom:15px;margin:-20px -20px 15px -20px;padding:20px;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0;background:#fafafa}.uk-modal-footer{margin-top:15px;margin:15px -20px -20px -20px;padding:20px;border-top:1px solid #ddd;border-radius:0 0 4px 4px;background:#fafafa}.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-caption{position:absolute;left:0;right:0;bottom:-20px;margin-bottom:-10px;color:#fff;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-modal-spinner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:25px;color:#ddd}.uk-modal-spinner:after{content:"\f110";font-family:FontAwesome;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-offcanvas{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;touch-action:none;background:rgba(0,0,0,.1)}.uk-offcanvas.uk-active{display:block}.uk-offcanvas-page{position:fixed;-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out}.uk-offcanvas-bar{position:fixed;top:0;bottom:0;left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:1001;width:270px;max-width:100%;background:#333;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;-ms-scroll-chaining:none}.uk-offcanvas.uk-active .uk-offcanvas-bar.uk-offcanvas-bar-show{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas-bar-flip{left:auto;right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas .uk-panel{margin:20px 15px;color:#777;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-offcanvas .uk-panel-title{color:#ccc}.uk-offcanvas .uk-panel a:not([class]){color:#ccc}.uk-offcanvas .uk-panel a:not([class]):hover{color:#fff}.uk-offcanvas-bar:after{content:"";display:block;position:absolute;top:0;bottom:0;right:0;width:1px;background:rgba(0,0,0,.6);box-shadow:0 0 5px 2px rgba(0,0,0,.6)}.uk-offcanvas-bar-flip:after{right:auto;left:0;width:1px;background:rgba(0,0,0,.6);box-shadow:0 0 5px 2px rgba(0,0,0,.6)}.uk-switcher{margin:0;padding:0;list-style:none;touch-action:cross-slide-y pinch-zoom double-tap-zoom}.uk-switcher>:not(.uk-active){display:none}.uk-text-small{font-size:11px;line-height:16px}.uk-text-large{font-size:18px;line-height:24px;font-weight:400}.uk-text-bold{font-weight:700}.uk-text-muted{color:#999!important}.uk-text-primary{color:#2d7091!important}.uk-text-success{color:#659f13!important}.uk-text-warning{color:#e28327!important}.uk-text-danger{color:#d85030!important}.uk-text-contrast{color:#fff!important}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}@media (max-width:959px){.uk-text-center-medium{text-align:center!important}.uk-text-left-medium{text-align:left!important}}@media (max-width:767px){.uk-text-center-small{text-align:center!important}.uk-text-left-small{text-align:left!important}}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-text-break{word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;-moz-hyphens:auto;hyphens:auto}.uk-container{-moz-box-sizing:border-box;box-sizing:border-box;max-width:980px;padding:0 25px}@media (min-width:1220px){.uk-container{max-width:1200px;padding:0 35px}}.uk-container:after,.uk-container:before{content:"";display:table}.uk-container:after{clear:both}.uk-container-center{margin-left:auto;margin-right:auto}.uk-clearfix:before{content:"";display:table-cell}.uk-clearfix:after{content:"";display:table;clear:both}.uk-nbfc{overflow:hidden}.uk-nbfc-alt{display:table-cell;width:10000px}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}[class*=uk-align-]{display:block;margin-bottom:15px}.uk-align-left{margin-right:15px;float:left}.uk-align-right{margin-left:15px;float:right}@media (min-width:768px){.uk-align-medium-left{margin-right:15px;margin-bottom:15px;float:left}.uk-align-medium-right{margin-left:15px;margin-bottom:15px;float:right}}.uk-align-center{margin-left:auto;margin-right:auto}.uk-vertical-align{font-size:0}.uk-vertical-align:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-vertical-align-bottom,.uk-vertical-align-middle{display:inline-block;max-width:100%;font-size:1rem}.uk-vertical-align-middle{vertical-align:middle}.uk-vertical-align-bottom{vertical-align:bottom}[class*=uk-height]{-moz-box-sizing:border-box;box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{height:100vh;min-height:600px}.uk-responsive-height,.uk-responsive-width{-moz-box-sizing:border-box;box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto}.uk-margin{margin-bottom:15px}*+.uk-margin{margin-top:15px}.uk-margin-top{margin-top:15px!important}.uk-margin-bottom{margin-bottom:15px!important}.uk-margin-left{margin-left:15px!important}.uk-margin-right{margin-right:15px!important}.uk-margin-large{margin-bottom:50px}*+.uk-margin-large{margin-top:50px}.uk-margin-large-top{margin-top:50px!important}.uk-margin-large-bottom{margin-bottom:50px!important}.uk-margin-large-left{margin-left:50px!important}.uk-margin-large-right{margin-right:50px!important}.uk-margin-small{margin-bottom:5px}*+.uk-margin-small{margin-top:5px}.uk-margin-small-top{margin-top:5px!important}.uk-margin-small-bottom{margin-bottom:5px!important}.uk-margin-small-left{margin-left:5px!important}.uk-margin-small-right{margin-right:5px!important}.uk-margin-remove{margin:0!important}.uk-margin-top-remove{margin-top:0!important}.uk-margin-bottom-remove{margin-bottom:0!important}.uk-padding-remove{padding:0!important}.uk-padding-top-remove{padding-top:0!important}.uk-padding-bottom-remove{padding-bottom:0!important}.uk-padding-vertical-remove{padding-top:0!important;padding-bottom:0!important}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-heading-large{font-size:36px;line-height:42px}@media (min-width:768px){.uk-heading-large{font-size:52px;line-height:64px}}.uk-link-muted,.uk-link-muted a{color:#444}.uk-link-muted a:hover,.uk-link-muted:hover{color:#444}.uk-link-reset,.uk-link-reset a,.uk-link-reset a:focus,.uk-link-reset a:hover,.uk-link-reset:focus,.uk-link-reset:hover{color:inherit;text-decoration:none}.uk-scrollable-text{height:300px;overflow-y:scroll;-webkit-overflow-scrolling:touch;resize:both}.uk-scrollable-box{-moz-box-sizing:border-box;box-sizing:border-box;height:170px;padding:10px;border:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch;resize:both;border-radius:3px}.uk-scrollable-box>:last-child{margin-bottom:0}.uk-overflow-hidden{overflow:hidden}.uk-overflow-container{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-container>:last-child{margin-bottom:0}.uk-position-absolute,[class*=uk-position-top],[class*=uk-position-bottom]{position:absolute!important}.uk-position-top{top:0;width:100%}.uk-position-bottom{bottom:0;width:100%}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative!important}.uk-position-z-index{z-index:1}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important}@media (min-width:960px){.uk-visible-small{display:none!important}.uk-visible-medium{display:none!important}.uk-hidden-large{display:none!important}}@media (min-width:768px)and (max-width:959px){.uk-visible-small{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-medium{display:none!important}}@media (max-width:767px){.uk-visible-medium{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-small{display:none!important}}.uk-hidden{display:none!important;visibility:hidden!important}.uk-invisible{visibility:hidden!important}.uk-visible-hover:hover .uk-hidden,.uk-visible-hover:hover .uk-invisible{display:block!important;visibility:visible!important}.uk-visible-hover-inline:hover .uk-hidden,.uk-visible-hover-inline:hover .uk-invisible{display:inline-block!important;visibility:visible!important}.uk-notouch .uk-hidden-notouch,.uk-touch .uk-hidden-touch{display:none!important}.uk-flex{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-flex-inline{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex}.uk-flex-inline>*,.uk-flex>*{-ms-flex-negative:1}.uk-flex-top{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start}.uk-flex-middle{-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-flex-bottom{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end}.uk-flex-center{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-space-between{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-space-around{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}.uk-flex-row-reverse{-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.uk-flex-column{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-flex-column-reverse{-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.uk-flex-nowrap{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.uk-flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.uk-flex-wrap-top{-ms-flex-line-pack:start;-webkit-align-content:flex-start;align-content:flex-start}.uk-flex-wrap-middle{-ms-flex-line-pack:center;-webkit-align-content:center;align-content:center}.uk-flex-wrap-bottom{-ms-flex-line-pack:end;-webkit-align-content:flex-end;align-content:flex-end}.uk-flex-wrap-space-between{-ms-flex-line-pack:justify;-webkit-align-content:space-between;align-content:space-between}.uk-flex-wrap-space-around{-ms-flex-line-pack:distribute;-webkit-align-content:space-around;align-content:space-around}.uk-flex-order-first{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last{-ms-flex-order:99;-webkit-order:99;order:99}@media (min-width:480px){.uk-flex-order-first-small{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-small{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:768px){.uk-flex-order-first-medium{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-medium{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:960px){.uk-flex-order-first-large{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-large{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:1220px){.uk-flex-order-first-xlarge{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-xlarge{-ms-flex-order:99;-webkit-order:99;order:99}}.uk-flex-item-none{-ms-flex:none;-webkit-flex:none;flex:none}.uk-flex-item-auto{-ms-flex:auto;-webkit-flex:auto;flex:auto;-ms-flex-negative:1}.uk-flex-item-1{-ms-flex:1;-webkit-flex:1;flex:1}.uk-contrast{color:#fff}.uk-contrast .uk-link,.uk-contrast a:not([class]){color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-link:hover,.uk-contrast a:not([class]):hover{color:#fff;text-decoration:underline}.uk-contrast :not(pre)>code,.uk-contrast :not(pre)>kbd,.uk-contrast :not(pre)>samp{color:#fff;border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.1)}.uk-contrast em{color:#fff}.uk-contrast h1,.uk-contrast h2,.uk-contrast h3,.uk-contrast h4,.uk-contrast h5,.uk-contrast h6{color:#fff}.uk-contrast hr{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav li>a,.uk-contrast .uk-nav li>a:hover{text-decoration:none}.uk-contrast .uk-nav-side>li>a{color:#fff}.uk-contrast .uk-nav-side>li>a:focus,.uk-contrast .uk-nav-side>li>a:hover{background:rgba(255,255,255,.1);color:#fff;text-shadow:none}.uk-contrast .uk-nav-side>li.uk-active>a{background:#fff;color:#444;text-shadow:none}.uk-contrast .uk-nav-side .uk-nav-header{color:#fff}.uk-contrast .uk-nav-side .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav-side ul a{color:rgba(255,255,255,.7)}.uk-contrast .uk-nav-side ul a:hover{color:#fff}.uk-contrast .uk-subnav>*>a{color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-subnav>*>a:focus,.uk-contrast .uk-subnav>*>a:hover{color:#fff;text-decoration:none}.uk-contrast .uk-subnav>.uk-active>a{color:#fff}.uk-contrast .uk-subnav-line>:nth-child(n+2):before{border-left-color:rgba(255,255,255,.2)}.uk-contrast .uk-subnav-pill>*>a:focus,.uk-contrast .uk-subnav-pill>*>a:hover{background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-subnav-pill>.uk-active>a{background:#fff;color:#444}.uk-contrast .uk-list-line>li:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-form input:not([type]),.uk-contrast .uk-form input[type=text],.uk-contrast .uk-form input[type=password],.uk-contrast .uk-form input[type=email],.uk-contrast .uk-form input[type=url],.uk-contrast .uk-form input[type=search],.uk-contrast .uk-form input[type=tel],.uk-contrast .uk-form input[type=number],.uk-contrast .uk-form input[type=datetime],.uk-contrast .uk-form input[type=datetime-local],.uk-contrast .uk-form input[type=date],.uk-contrast .uk-form input[type=month],.uk-contrast .uk-form input[type=time],.uk-contrast .uk-form input[type=week],.uk-contrast .uk-form input[type=color],.uk-contrast .uk-form select,.uk-contrast .uk-form textarea{border-color:rgba(255,255,255,.8);background:rgba(255,255,255,.8);color:#444;background-clip:padding-box}.uk-contrast .uk-form input:not([type]):focus,.uk-contrast .uk-form input[type=text]:focus,.uk-contrast .uk-form input[type=password]:focus,.uk-contrast .uk-form input[type=email]:focus,.uk-contrast .uk-form input[type=url]:focus,.uk-contrast .uk-form input[type=search]:focus,.uk-contrast .uk-form input[type=tel]:focus,.uk-contrast .uk-form input[type=number]:focus,.uk-contrast .uk-form input[type=datetime]:focus,.uk-contrast .uk-form input[type=datetime-local]:focus,.uk-contrast .uk-form input[type=date]:focus,.uk-contrast .uk-form input[type=month]:focus,.uk-contrast .uk-form input[type=time]:focus,.uk-contrast .uk-form input[type=week]:focus,.uk-contrast .uk-form input[type=color]:focus,.uk-contrast .uk-form select:focus,.uk-contrast .uk-form textarea:focus{border-color:#fff;background:#fff;color:#444}.uk-contrast .uk-form :-ms-input-placeholder{color:rgba(68,68,68,.7)!important}.uk-contrast .uk-form ::-moz-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-form ::-webkit-input-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-button{color:#444;background:#fff;border-color:transparent}.uk-contrast .uk-button:focus,.uk-contrast .uk-button:hover{background-color:rgba(255,255,255,.8);color:#444;border-color:transparent}.uk-contrast .uk-button.uk-active,.uk-contrast .uk-button:active{background-color:rgba(255,255,255,.7);color:#444}.uk-contrast .uk-button-primary{background-color:#00a8e6;color:#fff}.uk-contrast .uk-button-primary:focus,.uk-contrast .uk-button-primary:hover{background-color:#35b3ee;color:#fff}.uk-contrast .uk-button-primary.uk-active,.uk-contrast .uk-button-primary:active{background-color:#0091ca;color:#fff}.uk-contrast .uk-icon-hover{color:rgba(255,255,255,.7)}.uk-contrast .uk-icon-hover:hover{color:#fff}.uk-contrast .uk-icon-button{background:#fff;color:#444;border-color:transparent}.uk-contrast .uk-icon-button:focus,.uk-contrast .uk-icon-button:hover{background-color:rgba(255,255,255,.8);color:#444;border-color:transparent}.uk-contrast .uk-icon-button:active{background-color:rgba(255,255,255,.7);color:#444}.uk-contrast .uk-text-muted{color:rgba(255,255,255,.6)!important}.uk-contrast .uk-text-primary{color:#2d7091!important}@media print{*{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/media/uikit/css/uikit.gradient.min.css b/media/uikit/css/uikit.gradient.min.css deleted file mode 100644 index 219d523..0000000 --- a/media/uikit/css/uikit.gradient.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -html{font:400 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;background:#fff;color:#444;background-image:-webkit-radial-gradient(100% 100%,center,#fff,#fff);background-image:radial-gradient(100% 100% at center,#fff,#fff)}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}.uk-link,a{color:#07d;text-decoration:none;cursor:pointer}.uk-link:hover,a:hover{color:#059;text-decoration:underline}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-size:12px;font-family:Consolas,monospace,serif;color:#d05;white-space:nowrap;padding:0 4px;border:1px solid #ddd;border-radius:3px;background:#fafafa}em{color:#d05}ins{background:#ffa;color:#444;text-decoration:none}mark{background:#ffa;color:#444}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{max-width:100%;height:auto;-moz-box-sizing:border-box;box-sizing:border-box;border:0;vertical-align:middle}.uk-img-preserve,.uk-img-preserve img{max-width:none}svg:not(:root){overflow:hidden}blockquote,figure{margin:0}address,blockquote,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 15px 0}*+address,*+blockquote,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:15px}h1,h2,h3,h4,h5,h6{margin:0 0 15px 0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;color:#444;text-transform:none}*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:25px}.uk-h1,h1{font-size:36px;line-height:42px}.uk-h2,h2{font-size:24px;line-height:30px}.uk-h3,h3{font-size:18px;line-height:24px}.uk-h4,h4{font-size:16px;line-height:22px}.uk-h5,h5{font-size:14px;line-height:20px}.uk-h6,h6{font-size:12px;line-height:18px}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;margin:15px 0;border:0;border-top:1px solid #ddd}address{font-style:normal}blockquote{padding-left:15px;border-left:5px solid #ddd;font-size:16px;line-height:22px;font-style:italic}pre{padding:10px;background:#fafafa;font:12px/18px Consolas,monospace,serif;color:#444;-moz-tab-size:4;tab-size:4;overflow:auto;border:1px solid #ddd;border-radius:3px}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}article,aside,details,figcaption,figure,footer,header,main,nav,section,summary{display:block}progress{vertical-align:baseline}audio:not([controls]){display:none}[hidden],template{display:none}iframe{border:0}@media screen and (max-width:400px){@-ms-viewport{width:device-width}}.uk-grid{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid:after,.uk-grid:before{content:"";display:block;overflow:hidden}.uk-grid:after{clear:both}.uk-grid>*{-ms-flex:none;-webkit-flex:none;flex:none;margin:0;float:left}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-25px}.uk-grid>*{padding-left:25px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:25px}@media (min-width:1220px){.uk-grid{margin-left:-35px}.uk-grid>*{padding-left:35px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:35px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid-collapse+.uk-grid-collapse,.uk-grid-collapse>*>.uk-panel+.uk-panel,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-small{margin-left:-10px}.uk-grid-small>*{padding-left:10px}.uk-grid-small+.uk-grid-small,.uk-grid-small>*>.uk-panel+.uk-panel,.uk-grid-small>.uk-grid-margin{margin-top:10px}.uk-grid-medium{margin-left:-25px}.uk-grid-medium>*{padding-left:25px}.uk-grid-medium+.uk-grid-medium,.uk-grid-medium>*>.uk-panel+.uk-panel,.uk-grid-medium>.uk-grid-margin{margin-top:25px}.uk-grid-divider:not(:empty){margin-left:-25px;margin-right:-25px}.uk-grid-divider>*{padding-left:25px;padding-right:25px}.uk-grid-divider>[class*=uk-width-9-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-1-]:not(.uk-width-1-1):nth-child(n+2),.uk-grid-divider>[class*=uk-width-2-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-3-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-4-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-5-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-6-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-7-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-8-]:nth-child(n+2){border-left:1px solid #ddd}@media (min-width:768px){.uk-grid-divider>[class*=uk-width-medium-]:not(.uk-width-medium-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:960px){.uk-grid-divider>[class*=uk-width-large-]:not(.uk-width-large-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:1220px){.uk-grid-divider:not(:empty){margin-left:-35px;margin-right:-35px}.uk-grid-divider>*{padding-left:35px;padding-right:35px}.uk-grid-divider:empty{margin-top:35px;margin-bottom:35px}}.uk-grid-divider:empty{margin-top:25px;margin-bottom:25px;border-top:1px solid #ddd}.uk-grid-match>*{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-grid-match>*>*{-ms-flex:none;-webkit-flex:none;flex:none;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}[class*=uk-grid-width]>*{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.uk-grid-width-1-2>*{width:50%}.uk-grid-width-1-3>*{width:33.333%}.uk-grid-width-1-4>*{width:25%}.uk-grid-width-1-5>*{width:20%}.uk-grid-width-1-6>*{width:16.666%}.uk-grid-width-1-10>*{width:10%}@media (min-width:480px){.uk-grid-width-small-1-2>*{width:50%}.uk-grid-width-small-1-3>*{width:33.333%}.uk-grid-width-small-1-4>*{width:25%}.uk-grid-width-small-1-5>*{width:20%}.uk-grid-width-small-1-6>*{width:16.666%}.uk-grid-width-small-1-10>*{width:10%}}@media (min-width:768px){.uk-grid-width-medium-1-2>*{width:50%}.uk-grid-width-medium-1-3>*{width:33.333%}.uk-grid-width-medium-1-4>*{width:25%}.uk-grid-width-medium-1-5>*{width:20%}.uk-grid-width-medium-1-6>*{width:16.666%}.uk-grid-width-medium-1-10>*{width:10%}}@media (min-width:960px){.uk-grid-width-large-1-2>*{width:50%}.uk-grid-width-large-1-3>*{width:33.333%}.uk-grid-width-large-1-4>*{width:25%}.uk-grid-width-large-1-5>*{width:20%}.uk-grid-width-large-1-6>*{width:16.666%}.uk-grid-width-large-1-10>*{width:10%}}@media (min-width:1220px){.uk-grid-width-xlarge-1-2>*{width:50%}.uk-grid-width-xlarge-1-3>*{width:33.333%}.uk-grid-width-xlarge-1-4>*{width:25%}.uk-grid-width-xlarge-1-5>*{width:20%}.uk-grid-width-xlarge-1-6>*{width:16.666%}.uk-grid-width-xlarge-1-10>*{width:10%}}[class*=uk-width]{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.uk-width-1-1{width:100%}.uk-width-1-2,.uk-width-2-4,.uk-width-3-6,.uk-width-5-10{width:50%}.uk-width-1-3,.uk-width-2-6{width:33.333%}.uk-width-2-3,.uk-width-4-6{width:66.666%}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5,.uk-width-2-10{width:20%}.uk-width-2-5,.uk-width-4-10{width:40%}.uk-width-3-5,.uk-width-6-10{width:60%}.uk-width-4-5,.uk-width-8-10{width:80%}.uk-width-1-6{width:16.666%}.uk-width-5-6{width:83.333%}.uk-width-1-10{width:10%}.uk-width-3-10{width:30%}.uk-width-7-10{width:70%}.uk-width-9-10{width:90%}@media (min-width:480px){.uk-width-small-1-1{width:100%}.uk-width-small-1-2,.uk-width-small-2-4,.uk-width-small-3-6,.uk-width-small-5-10{width:50%}.uk-width-small-1-3,.uk-width-small-2-6{width:33.333%}.uk-width-small-2-3,.uk-width-small-4-6{width:66.666%}.uk-width-small-1-4{width:25%}.uk-width-small-3-4{width:75%}.uk-width-small-1-5,.uk-width-small-2-10{width:20%}.uk-width-small-2-5,.uk-width-small-4-10{width:40%}.uk-width-small-3-5,.uk-width-small-6-10{width:60%}.uk-width-small-4-5,.uk-width-small-8-10{width:80%}.uk-width-small-1-6{width:16.666%}.uk-width-small-5-6{width:83.333%}.uk-width-small-1-10{width:10%}.uk-width-small-3-10{width:30%}.uk-width-small-7-10{width:70%}.uk-width-small-9-10{width:90%}}@media (min-width:768px){.uk-width-medium-1-1{width:100%}.uk-width-medium-1-2,.uk-width-medium-2-4,.uk-width-medium-3-6,.uk-width-medium-5-10{width:50%}.uk-width-medium-1-3,.uk-width-medium-2-6{width:33.333%}.uk-width-medium-2-3,.uk-width-medium-4-6{width:66.666%}.uk-width-medium-1-4{width:25%}.uk-width-medium-3-4{width:75%}.uk-width-medium-1-5,.uk-width-medium-2-10{width:20%}.uk-width-medium-2-5,.uk-width-medium-4-10{width:40%}.uk-width-medium-3-5,.uk-width-medium-6-10{width:60%}.uk-width-medium-4-5,.uk-width-medium-8-10{width:80%}.uk-width-medium-1-6{width:16.666%}.uk-width-medium-5-6{width:83.333%}.uk-width-medium-1-10{width:10%}.uk-width-medium-3-10{width:30%}.uk-width-medium-7-10{width:70%}.uk-width-medium-9-10{width:90%}}@media (min-width:960px){.uk-width-large-1-1{width:100%}.uk-width-large-1-2,.uk-width-large-2-4,.uk-width-large-3-6,.uk-width-large-5-10{width:50%}.uk-width-large-1-3,.uk-width-large-2-6{width:33.333%}.uk-width-large-2-3,.uk-width-large-4-6{width:66.666%}.uk-width-large-1-4{width:25%}.uk-width-large-3-4{width:75%}.uk-width-large-1-5,.uk-width-large-2-10{width:20%}.uk-width-large-2-5,.uk-width-large-4-10{width:40%}.uk-width-large-3-5,.uk-width-large-6-10{width:60%}.uk-width-large-4-5,.uk-width-large-8-10{width:80%}.uk-width-large-1-6{width:16.666%}.uk-width-large-5-6{width:83.333%}.uk-width-large-1-10{width:10%}.uk-width-large-3-10{width:30%}.uk-width-large-7-10{width:70%}.uk-width-large-9-10{width:90%}}@media (min-width:768px){[class*=uk-push-],[class*=uk-pull-]{position:relative}.uk-push-1-2,.uk-push-2-4,.uk-push-3-6,.uk-push-5-10{left:50%}.uk-push-1-3,.uk-push-2-6{left:33.333%}.uk-push-2-3,.uk-push-4-6{left:66.666%}.uk-push-1-4{left:25%}.uk-push-3-4{left:75%}.uk-push-1-5,.uk-push-2-10{left:20%}.uk-push-2-5,.uk-push-4-10{left:40%}.uk-push-3-5,.uk-push-6-10{left:60%}.uk-push-4-5,.uk-push-8-10{left:80%}.uk-push-1-6{left:16.666%}.uk-push-5-6{left:83.333%}.uk-push-1-10{left:10%}.uk-push-3-10{left:30%}.uk-push-7-10{left:70%}.uk-push-9-10{left:90%}.uk-pull-1-2,.uk-pull-2-4,.uk-pull-3-6,.uk-pull-5-10{left:-50%}.uk-pull-1-3,.uk-pull-2-6{left:-33.333%}.uk-pull-2-3,.uk-pull-4-6{left:-66.666%}.uk-pull-1-4{left:-25%}.uk-pull-3-4{left:-75%}.uk-pull-1-5,.uk-pull-2-10{left:-20%}.uk-pull-2-5,.uk-pull-4-10{left:-40%}.uk-pull-3-5,.uk-pull-6-10{left:-60%}.uk-pull-4-5,.uk-pull-8-10{left:-80%}.uk-pull-1-6{left:-16.666%}.uk-pull-5-6{left:-83.333%}.uk-pull-1-10{left:-10%}.uk-pull-3-10{left:-30%}.uk-pull-7-10{left:-70%}.uk-pull-9-10{left:-90%}}.uk-panel{display:block;position:relative}.uk-panel,.uk-panel:hover{text-decoration:none}.uk-panel:after,.uk-panel:before{content:"";display:table}.uk-panel:after{clear:both}.uk-panel>:not(.uk-panel-title):last-child{margin-bottom:0}.uk-panel-title{margin-top:0;margin-bottom:15px;font-size:18px;line-height:24px;font-weight:400;text-transform:none;color:#444}.uk-panel-badge{position:absolute;top:0;right:0;z-index:1}.uk-panel-teaser{margin-bottom:15px}.uk-panel-box{padding:15px;background:#fafafa;color:#444;border:1px solid #ddd;border-radius:4px}.uk-panel-box-hover:hover{color:#444}.uk-panel-box .uk-panel-title{color:#444}.uk-panel-box .uk-panel-badge{top:10px;right:10px}.uk-panel-box .uk-panel-teaser{margin-top:-16px;margin-left:-16px;margin-right:-16px}.uk-panel-box>.uk-nav-side{margin:0 -15px}.uk-panel-box-primary{background-color:#ebf7fd;color:#2d7091;border-color:rgba(45,112,145,.3)}.uk-panel-box-primary-hover:hover{color:#2d7091}.uk-panel-box-primary .uk-panel-title{color:#2d7091}.uk-panel-box-secondary{background-color:#fff;color:#444}.uk-panel-box-secondary-hover:hover{color:#444}.uk-panel-box-secondary .uk-panel-title{color:#444}.uk-panel-hover{padding:15px;color:#444;border:1px solid transparent;border-radius:4px}.uk-panel-hover:hover{background:#fafafa;color:#444;border-color:#ddd}.uk-panel-hover .uk-panel-badge{top:10px;right:10px}.uk-panel-hover .uk-panel-teaser{margin-top:-16px;margin-left:-16px;margin-right:-16px}.uk-panel-header .uk-panel-title{padding-bottom:10px;border-bottom:1px solid #ddd;color:#444}.uk-panel-space{padding:30px}.uk-panel-space .uk-panel-badge{top:30px;right:30px}.uk-panel+.uk-panel-divider{margin-top:50px!important}.uk-panel+.uk-panel-divider:before{content:"";display:block;position:absolute;top:-25px;left:0;right:0;border-top:1px solid #ddd}@media (min-width:1220px){.uk-panel+.uk-panel-divider{margin-top:70px!important}.uk-panel+.uk-panel-divider:before{top:-35px}}.uk-panel-box .uk-panel-teaser{border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden;-webkit-transform:translateZ(0)}.uk-block{position:relative;-moz-box-sizing:border-box;box-sizing:border-box;padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block{padding-top:50px;padding-bottom:50px}}.uk-block:after,.uk-block:before{content:"";display:table}.uk-block:after{clear:both}.uk-block>:last-child{margin-bottom:0}.uk-block-large{padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block-large{padding-top:50px;padding-bottom:50px}}@media (min-width:960px){.uk-block-large{padding-top:100px;padding-bottom:100px}}.uk-block-default{background:#fff}.uk-block-muted{background:#f9f9f9}.uk-block-primary{background:#00a8e6}.uk-block-secondary{background:#222}.uk-block-default+.uk-block-default,.uk-block-muted+.uk-block-muted,.uk-block-primary+.uk-block-primary,.uk-block-secondary+.uk-block-secondary{padding-top:0}.uk-article:after,.uk-article:before{content:"";display:table}.uk-article:after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:25px}.uk-article-title{font-size:36px;line-height:42px;font-weight:400;text-transform:none}.uk-article-title a{color:inherit;text-decoration:none}.uk-article-meta{font-size:12px;line-height:18px;color:#999}.uk-article-lead{color:#444;font-size:18px;line-height:24px;font-weight:400}.uk-article-divider{margin-bottom:25px;border-color:#ddd}*+.uk-article-divider{margin-top:25px}.uk-article+.uk-article{padding-top:25px;border-top:1px solid #ddd}.uk-comment-header{margin-bottom:15px;padding:10px;border:1px solid #ddd;border-radius:4px;background:#fafafa}.uk-comment-header:after,.uk-comment-header:before{content:"";display:table}.uk-comment-header:after{clear:both}.uk-comment-avatar{margin-right:15px;float:left}.uk-comment-title{margin:5px 0 0 0;font-size:16px;line-height:22px}.uk-comment-meta{margin:2px 0 0 0;font-size:11px;line-height:16px;color:#999}.uk-comment-body{padding-left:10px;padding-right:10px}.uk-comment-body>:last-child{margin-bottom:0}.uk-comment-list{padding:0;list-style:none}.uk-comment-list .uk-comment+ul{margin:25px 0 0 0;list-style:none}.uk-comment-list .uk-comment+ul>li:nth-child(n+2),.uk-comment-list>li:nth-child(n+2){margin-top:25px}@media (min-width:768px){.uk-comment-list .uk-comment+ul{padding-left:100px}}.uk-comment-primary .uk-comment-header{border-color:rgba(45,112,145,.3);background-color:#ebf7fd;color:#2d7091;text-shadow:0 1px 0 #fff}.uk-cover-background{background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.uk-cover{overflow:hidden}.uk-cover-object{width:auto;height:auto;min-width:100%;min-height:100%;max-width:none;position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}[data-uk-cover]{position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav>li>a{padding:5px 15px}.uk-nav ul{padding-left:15px}.uk-nav ul a{padding:2px 0}.uk-nav li>a>div{font-size:12px;line-height:18px}.uk-nav-header{padding:5px 15px;text-transform:uppercase;font-weight:700;font-size:12px}.uk-nav-header:not(:first-child){margin-top:15px}.uk-nav-divider{margin:9px 15px}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-parent-icon>.uk-parent>a:after{content:"\f104";width:20px;margin-right:-10px;float:right;font-family:FontAwesome;text-align:center}.uk-nav-parent-icon>.uk-parent.uk-open>a:after{content:"\f107"}.uk-nav-side>li>a{color:#444}.uk-nav-side>li>a:focus,.uk-nav-side>li>a:hover{background:rgba(0,0,0,.03);color:#444;outline:0;box-shadow:inset 0 0 1px rgba(0,0,0,.1);text-shadow:0 -1px 0 #fff}.uk-nav-side>li.uk-active>a{background:#009dd8;color:#fff;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-side .uk-nav-header{color:#444}.uk-nav-side .uk-nav-divider{border-top:1px solid #ddd;box-shadow:0 1px 0 #fff}.uk-nav-side ul a{color:#07d}.uk-nav-side ul a:hover{color:#059}.uk-nav-dropdown>li>a{color:#444}.uk-nav-dropdown>li>a:focus,.uk-nav-dropdown>li>a:hover{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-dropdown .uk-nav-header{color:#999}.uk-nav-dropdown .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-dropdown ul a{color:#07d}.uk-nav-dropdown ul a:hover{color:#059}.uk-nav-navbar>li>a{color:#444}.uk-nav-navbar>li>a:focus,.uk-nav-navbar>li>a:hover{background:#009dd8;color:#fff;outline:0;box-shadow:inset 0 2px 4px rgba(0,0,0,.2);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-nav-navbar .uk-nav-header{color:#999}.uk-nav-navbar .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-navbar ul a{color:#07d}.uk-nav-navbar ul a:hover{color:#059}.uk-nav-offcanvas>li>a{color:#ccc;padding:10px 15px;border-top:1px solid rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05);text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-nav-offcanvas>.uk-open>a,html:not(.uk-touch) .uk-nav-offcanvas>li>a:focus,html:not(.uk-touch) .uk-nav-offcanvas>li>a:hover{background:#404040;color:#fff;outline:0}html .uk-nav.uk-nav-offcanvas>li.uk-active>a{background:#1a1a1a;color:#fff;box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.uk-nav-offcanvas .uk-nav-header{color:#777;margin-top:0;border-top:1px solid rgba(0,0,0,.3);background:#404040;box-shadow:inset 0 1px 0 rgba(255,255,255,.05);text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-nav-offcanvas .uk-nav-divider{border-top:1px solid rgba(255,255,255,.01);margin:0;height:4px;background:rgba(0,0,0,.2);box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.uk-nav-offcanvas ul a{color:#ccc}html:not(.uk-touch) .uk-nav-offcanvas ul a:hover{color:#fff}.uk-nav-offcanvas{border-bottom:1px solid rgba(0,0,0,.3);box-shadow:0 1px 0 rgba(255,255,255,.05)}.uk-nav-offcanvas .uk-nav-sub{border-top:1px solid rgba(0,0,0,.3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}.uk-navbar{background:#f7f7f7;color:#444;border:1px solid rgba(0,0,0,.1);border-bottom-color:rgba(0,0,0,.3);border-radius:4px;background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee)}.uk-navbar:after,.uk-navbar:before{content:"";display:table}.uk-navbar:after{clear:both}.uk-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-navbar-nav>li{float:left;position:relative}.uk-navbar-nav>li>a{display:block;-moz-box-sizing:border-box;box-sizing:border-box;text-decoration:none;height:41px;padding:0 15px;line-height:40px;color:#444;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;margin-top:-1px;margin-left:-1px;border:1px solid transparent;border-bottom-width:0;text-shadow:0 1px 0 #fff}.uk-navbar-nav>li>a[href='#']{cursor:text}.uk-navbar-nav>li.uk-open>a,.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus{background-color:transparent;color:#444;outline:0;position:relative;z-index:1;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.1);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-navbar-nav>li>a:active{background-color:#f5f5f5;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-navbar-nav>li.uk-active>a{background-color:#fafafa;color:#444;border-left-color:rgba(0,0,0,.1);border-right-color:rgba(0,0,0,.1);border-top-color:rgba(0,0,0,.2);box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-navbar-nav .uk-navbar-nav-subtitle{line-height:28px}.uk-navbar-nav-subtitle>div{margin-top:-6px;font-size:10px;line-height:12px}.uk-navbar-brand,.uk-navbar-content,.uk-navbar-toggle{-moz-box-sizing:border-box;box-sizing:border-box;display:block;height:41px;padding:0 15px;float:left;margin-top:-1px;text-shadow:0 1px 0 #fff}.uk-navbar-brand:before,.uk-navbar-content:before,.uk-navbar-toggle:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-navbar-content+.uk-navbar-content:not(.uk-navbar-center){padding-left:0}.uk-navbar-content>a:not([class]){color:#07d}.uk-navbar-content>a:not([class]):hover{color:#059}.uk-navbar-brand{font-size:18px;color:#444;text-decoration:none}.uk-navbar-brand:focus,.uk-navbar-brand:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle{font-size:18px;color:#444;text-decoration:none}.uk-navbar-toggle:focus,.uk-navbar-toggle:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle:after{content:"\f0c9";font-family:FontAwesome;vertical-align:middle}.uk-navbar-toggle-alt:after{content:"\f002"}.uk-navbar-center{float:none;text-align:center;max-width:50%;margin-left:auto;margin-right:auto}.uk-navbar-flip{float:right}.uk-navbar-nav:first-child>li:first-child>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.uk-navbar-flip .uk-navbar-nav>li>a{margin-left:0;margin-right:-1px}.uk-navbar-flip .uk-navbar-nav:first-child>li:first-child>a{border-top-left-radius:0;border-bottom-left-radius:0}.uk-navbar-flip .uk-navbar-nav:last-child>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.uk-navbar-attached{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;border-radius:0}.uk-navbar-attached .uk-navbar-nav>li>a{border-radius:0!important}.uk-subnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-subnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px;position:relative}.uk-subnav:after,.uk-subnav:before{content:"";display:block;overflow:hidden}.uk-subnav:after{clear:both}.uk-subnav>*{float:left}.uk-subnav>*>*{display:inline-block;color:#444}.uk-subnav>*>:focus,.uk-subnav>*>:hover{color:#07d;text-decoration:none}.uk-subnav>.uk-active>*{color:#07d}.uk-subnav-line>:before{content:"";display:inline-block;height:10px;vertical-align:middle}.uk-subnav-line>:nth-child(n+2):before{margin-right:10px;border-left:1px solid #ddd}.uk-subnav-pill>*>*{padding:3px 9px;border-radius:4px}.uk-subnav-pill>*>:focus,.uk-subnav-pill>*>:hover{background:#fafafa;color:#444;text-decoration:none;outline:0;box-shadow:0 0 0 1px rgba(0,0,0,.1)}.uk-subnav-pill>.uk-active>*{background:#009dd8;color:#fff;box-shadow:inset 0 2px 4px rgba(0,0,0,.2)}.uk-subnav>.uk-disabled>*{background:0 0;color:#999;text-decoration:none;cursor:text;box-shadow:none}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>li{font-size:1rem;vertical-align:top}.uk-breadcrumb>li,.uk-breadcrumb>li>a,.uk-breadcrumb>li>span{display:inline-block}.uk-breadcrumb>li:nth-child(n+2):before{content:"/";display:inline-block;margin:0 8px}.uk-breadcrumb>li:not(.uk-active)>span{color:#999}.uk-pagination{padding:0;list-style:none;text-align:center;font-size:0}.uk-pagination:after,.uk-pagination:before{content:"";display:table}.uk-pagination:after{clear:both}.uk-pagination>li{display:inline-block;font-size:1rem;vertical-align:top}.uk-pagination>li:nth-child(n+2){margin-left:5px}.uk-pagination>li>a,.uk-pagination>li>span{display:inline-block;min-width:16px;padding:3px 5px;line-height:20px;text-decoration:none;-moz-box-sizing:content-box;box-sizing:content-box;text-align:center;border-radius:4px}.uk-pagination>li>a{background:#f7f7f7;color:#444;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);text-shadow:0 1px 0 #fff}.uk-pagination>li>a:focus,.uk-pagination>li>a:hover{background-color:#fafafa;color:#444;outline:0;background-image:none}.uk-pagination>li>a:active{background-color:#f5f5f5;color:#444;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.3);background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-pagination>.uk-active>span{background:#009dd8;color:#fff;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);background-origin:border-box;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-pagination>.uk-disabled>span{background-color:#fafafa;color:#999;border:1px solid rgba(0,0,0,.2);text-shadow:0 1px 0 #fff}.uk-pagination-previous{float:left}.uk-pagination-next{float:right}.uk-pagination-left{text-align:left}.uk-pagination-right{text-align:right}.uk-tab{margin:0;padding:0;list-style:none;border-bottom:1px solid #ddd}.uk-tab:after,.uk-tab:before{content:"";display:table}.uk-tab:after{clear:both}.uk-tab>li{margin-bottom:-1px;float:left;position:relative}.uk-tab>li>a{display:block;padding:8px 12px 8px 12px;border:1px solid transparent;border-bottom-width:0;color:#07d;text-decoration:none;border-radius:4px 4px 0 0;text-shadow:0 1px 0 #fff}.uk-tab>li:nth-child(n+2)>a{margin-left:5px}.uk-tab>li.uk-open>a,.uk-tab>li>a:focus,.uk-tab>li>a:hover{border-color:#ddd;background:#fafafa;color:#059;outline:0}.uk-tab>li.uk-open:not(.uk-active)>a,.uk-tab>li:not(.uk-active)>a:focus,.uk-tab>li:not(.uk-active)>a:hover{margin-bottom:1px;padding-bottom:7px}.uk-tab>li.uk-active>a{border-color:#ddd;border-bottom-color:transparent;background:#fff;color:#444}.uk-tab>li.uk-disabled>a{color:#999;cursor:text}.uk-tab>li.uk-disabled.uk-active>a,.uk-tab>li.uk-disabled>a:focus,.uk-tab>li.uk-disabled>a:hover{background:0 0;border-color:transparent}.uk-tab-flip>li{float:right}.uk-tab-flip>li:nth-child(n+2)>a{margin-left:0;margin-right:5px}.uk-tab>li.uk-tab-responsive>a{margin-left:0;margin-right:0}.uk-tab-responsive>a:before{content:"\f0c9\00a0";font-family:FontAwesome}.uk-tab-center{border-bottom:1px solid #ddd}.uk-tab-center-bottom{border-bottom:none;border-top:1px solid #ddd}.uk-tab-center:after,.uk-tab-center:before{content:"";display:table}.uk-tab-center:after{clear:both}.uk-tab-center .uk-tab{position:relative;right:50%;border:none;float:right}.uk-tab-center .uk-tab>li{position:relative;right:-50%}.uk-tab-center .uk-tab>li>a{text-align:center}.uk-tab-bottom{border-top:1px solid #ddd;border-bottom:none}.uk-tab-bottom>li{margin-top:-1px;margin-bottom:0}.uk-tab-bottom>li>a{padding-top:8px;padding-bottom:8px;border-bottom-width:1px;border-top-width:0}.uk-tab-bottom>li.uk-open:not(.uk-active)>a,.uk-tab-bottom>li:not(.uk-active)>a:focus,.uk-tab-bottom>li:not(.uk-active)>a:hover{margin-bottom:0;margin-top:1px;padding-bottom:8px;padding-top:7px}.uk-tab-bottom>li.uk-active>a{border-top-color:transparent;border-bottom-color:#ddd}.uk-tab-grid{margin-left:-5px;border-bottom:none;position:relative;z-index:0}.uk-tab-grid:before{display:block;position:absolute;left:5px;right:0;bottom:-1px;border-top:1px solid #ddd;z-index:-1}.uk-tab-grid>li:first-child>a{margin-left:5px}.uk-tab-grid>li>a{text-align:center}.uk-tab-grid.uk-tab-bottom{border-top:none}.uk-tab-grid.uk-tab-bottom:before{top:-1px;bottom:auto}@media (min-width:768px){.uk-tab-left,.uk-tab-right{border-bottom:none}.uk-tab-left>li,.uk-tab-right>li{margin-bottom:0;float:none}.uk-tab-left>li>a,.uk-tab-right>li>a{padding-top:8px;padding-bottom:8px}.uk-tab-left>li:nth-child(n+2)>a,.uk-tab-right>li:nth-child(n+2)>a{margin-left:0;margin-top:5px}.uk-tab-left>li.uk-active>a,.uk-tab-right>li.uk-active>a{border-color:#ddd}.uk-tab-left{border-right:1px solid #ddd}.uk-tab-left>li{margin-right:-1px}.uk-tab-left>li>a{border-bottom-width:1px;border-right-width:0}.uk-tab-left>li:not(.uk-active)>a:focus,.uk-tab-left>li:not(.uk-active)>a:hover{margin-bottom:0;margin-right:1px;padding-bottom:8px;padding-right:11px}.uk-tab-left>li.uk-active>a{border-right-color:transparent}.uk-tab-right{border-left:1px solid #ddd}.uk-tab-right>li{margin-left:-1px}.uk-tab-right>li>a{border-bottom-width:1px;border-left-width:0}.uk-tab-right>li:not(.uk-active)>a:focus,.uk-tab-right>li:not(.uk-active)>a:hover{margin-bottom:0;margin-left:1px;padding-bottom:8px;padding-left:11px}.uk-tab-right>li.uk-active>a{border-left-color:transparent}}.uk-tab-bottom>li>a{border-radius:0 0 4px 4px}@media (min-width:768px){.uk-tab-left>li>a{border-radius:4px 0 0 4px}.uk-tab-right>li>a{border-radius:0 4px 4px 0}}.uk-thumbnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-thumbnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px}.uk-thumbnav:after,.uk-thumbnav:before{content:"";display:block;overflow:hidden}.uk-thumbnav:after{clear:both}.uk-thumbnav>*{float:left}.uk-thumbnav>*>*{display:block;background:#fff}.uk-thumbnav>*>*>img{opacity:.7;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.uk-thumbnav>*>:focus>img,.uk-thumbnav>*>:hover>img{opacity:1}.uk-thumbnav>.uk-active>*>img{opacity:1}.uk-list{padding:0;list-style:none}.uk-list>li:after,.uk-list>li:before{content:"";display:table}.uk-list>li:after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:20px;list-style:none}.uk-list-line>li:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-list-striped>li{padding:5px 5px;border-bottom:1px solid #ddd}.uk-list-striped>li:nth-of-type(odd){background:#fafafa}.uk-list-space>li:nth-child(n+2){margin-top:10px}.uk-list-striped>li:first-child{border-top:1px solid #ddd}@media (min-width:768px){.uk-description-list-horizontal{overflow:hidden}.uk-description-list-horizontal>dt{width:160px;float:left;clear:both;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-description-list-horizontal>dd{margin-left:180px}}.uk-description-list-line>dt{font-weight:400}.uk-description-list-line>dt:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-description-list-line>dd{color:#999}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:15px}*+.uk-table{margin-top:15px}.uk-table td,.uk-table th{padding:8px 8px;border-bottom:1px solid #ddd}.uk-table th{text-align:left}.uk-table td{vertical-align:top}.uk-table thead th{vertical-align:bottom}.uk-table caption,.uk-table tfoot{font-size:12px;font-style:italic}.uk-table caption{text-align:left;color:#999}.uk-table tbody tr.uk-active{background:#f0f0f0}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-striped tbody tr:nth-of-type(odd){background:#fafafa}.uk-table-condensed td{padding:4px 8px}.uk-table-hover tbody tr:hover{background:#f0f0f0}.uk-form input,.uk-form select,.uk-form textarea{-moz-box-sizing:border-box;box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:inherit}.uk-form select{text-transform:none}.uk-form optgroup{font:inherit;font-weight:700}.uk-form input::-moz-focus-inner{border:0;padding:0}.uk-form input[type=checkbox],.uk-form input[type=radio]{padding:0}.uk-form input[type=checkbox]:not(:disabled),.uk-form input[type=radio]:not(:disabled){cursor:pointer}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form textarea{-webkit-appearance:none}.uk-form input[type=search]::-webkit-search-cancel-button,.uk-form input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-form input[type=number]::-webkit-inner-spin-button,.uk-form input[type=number]::-webkit-outer-spin-button{height:auto}.uk-form fieldset{border:none;margin:0;padding:0}.uk-form textarea{overflow:auto;vertical-align:top}.uk-form ::-moz-placeholder{opacity:1}.uk-form :invalid{box-shadow:none}.uk-form input:not([type=radio]):not([type=checkbox]),.uk-form select{vertical-align:middle}.uk-form>:last-child{margin-bottom:0}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form input[type=datetime-local],.uk-form input[type=date],.uk-form input[type=month],.uk-form input[type=time],.uk-form input[type=week],.uk-form input[type=color],.uk-form select,.uk-form textarea{height:30px;max-width:100%;padding:4px 6px;border:1px solid #ddd;background:#fff;color:#444;-webkit-transition:all linear .2s;transition:all linear .2s;border-radius:4px}.uk-form input:not([type]):focus,.uk-form input[type=text]:focus,.uk-form input[type=password]:focus,.uk-form input[type=email]:focus,.uk-form input[type=url]:focus,.uk-form input[type=search]:focus,.uk-form input[type=tel]:focus,.uk-form input[type=number]:focus,.uk-form input[type=datetime]:focus,.uk-form input[type=datetime-local]:focus,.uk-form input[type=date]:focus,.uk-form input[type=month]:focus,.uk-form input[type=time]:focus,.uk-form input[type=week]:focus,.uk-form input[type=color]:focus,.uk-form select:focus,.uk-form textarea:focus{border-color:#99baca;outline:0;background:#f5fbfe;color:#444}.uk-form input:not([type]):disabled,.uk-form input[type=text]:disabled,.uk-form input[type=password]:disabled,.uk-form input[type=email]:disabled,.uk-form input[type=url]:disabled,.uk-form input[type=search]:disabled,.uk-form input[type=tel]:disabled,.uk-form input[type=number]:disabled,.uk-form input[type=datetime]:disabled,.uk-form input[type=datetime-local]:disabled,.uk-form input[type=date]:disabled,.uk-form input[type=month]:disabled,.uk-form input[type=time]:disabled,.uk-form input[type=week]:disabled,.uk-form input[type=color]:disabled,.uk-form select:disabled,.uk-form textarea:disabled{border-color:#ddd;background-color:#fafafa;color:#999}.uk-form :-ms-input-placeholder{color:#999!important}.uk-form ::-moz-placeholder{color:#999}.uk-form ::-webkit-input-placeholder{color:#999}.uk-form :disabled:-ms-input-placeholder{color:#999!important}.uk-form :disabled::-moz-placeholder{color:#999}.uk-form :disabled::-webkit-input-placeholder{color:#999}.uk-form legend{width:100%;border:0;padding:0;padding-bottom:15px;font-size:18px;line-height:30px}.uk-form legend:after{content:"";display:block;border-bottom:1px solid #ddd;width:100%}input:not([type]).uk-form-small,input[type].uk-form-small,select.uk-form-small,textarea.uk-form-small{height:25px;padding:3px 3px;font-size:12px}input:not([type]).uk-form-large,input[type].uk-form-large,select.uk-form-large,textarea.uk-form-large{height:40px;padding:8px 6px;font-size:16px}.uk-form select[multiple],.uk-form select[size],.uk-form textarea{height:auto}.uk-form-danger{border-color:#dc8d99!important;background:#fff7f8!important;color:#d85030!important}.uk-form-success{border-color:#8ec73b!important;background:#fafff2!important;color:#659f13!important}.uk-form-blank{border-color:transparent!important;border-style:dashed!important;background:0 0!important}.uk-form-blank:focus{border-color:#ddd!important}input.uk-form-width-mini{width:40px}select.uk-form-width-mini{width:65px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-form-row:after,.uk-form-row:before{content:"";display:table}.uk-form-row:after{clear:both}.uk-form-row+.uk-form-row{margin-top:15px}.uk-form-help-inline{display:inline-block;margin:0 0 0 10px}.uk-form-help-block{margin:5px 0 0 0}.uk-form-controls>:first-child{margin-top:0}.uk-form-controls>:last-child{margin-bottom:0}.uk-form-controls-condensed{margin:5px 0}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px;font-weight:700}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px;font-weight:700}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:5px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:5px}}.uk-form-icon{display:inline-block;position:relative;max-width:100%}.uk-form-icon>[class*=uk-icon-]{position:absolute;top:50%;width:30px;margin-top:-7px;font-size:14px;color:#999;text-align:center;pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)>input{padding-left:30px!important}.uk-form-icon-flip>[class*=uk-icon-]{right:0}.uk-form-icon-flip>input{padding-right:30px!important}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:#444;text-transform:none;display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 12px;background:#f7f7f7;vertical-align:middle;line-height:28px;min-height:30px;font-size:1rem;text-decoration:none;text-align:center;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);border-radius:4px;text-shadow:0 1px 0 #fff}.uk-button:not(:disabled){cursor:pointer}.uk-button:focus,.uk-button:hover{background-color:#fafafa;color:#444;outline:0;text-decoration:none;background-image:none}.uk-button.uk-active,.uk-button:active{background-color:#f5f5f5;color:#444;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.3);background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-button-primary{background-color:#009dd8;color:#fff;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);border-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-button-primary:focus,.uk-button-primary:hover{background-color:#00aff2;color:#fff;background-image:none}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#008abf;color:#fff;background-image:none;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.4);box-shadow:inset 0 2px 4px rgba(0,0,0,.2)}.uk-button-success{background-color:#82bb42;color:#fff;background-image:-webkit-linear-gradient(top,#9fd256,#6fac34);background-image:linear-gradient(to bottom,#9fd256,#6fac34);border-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-button-success:focus,.uk-button-success:hover{background-color:#8fce48;color:#fff;background-image:none}.uk-button-success.uk-active,.uk-button-success:active{background-color:#76b430;color:#fff;background-image:none;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.4);box-shadow:inset 0 2px 4px rgba(0,0,0,.2)}.uk-button-danger{background-color:#d32c46;color:#fff;background-image:-webkit-linear-gradient(top,#ee465a,#c11a39);background-image:linear-gradient(to bottom,#ee465a,#c11a39);border-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.4);text-shadow:0 -1px 0 rgba(0,0,0,.2)}.uk-button-danger:focus,.uk-button-danger:hover{background-color:#e33551;color:#fff;background-image:none}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#c91c37;color:#fff;background-image:none;border-color:rgba(0,0,0,.2);border-top-color:rgba(0,0,0,.4);box-shadow:inset 0 2px 4px rgba(0,0,0,.2)}.uk-button:disabled{background-color:#fafafa;color:#999;border-color:rgba(0,0,0,.2);background-image:none;box-shadow:none;text-shadow:0 1px 0 #fff}.uk-button-link,.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:disabled,.uk-button-link:focus,.uk-button-link:hover{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none}.uk-button-link{color:#07d}.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:focus,.uk-button-link:hover{color:#059;text-decoration:underline}.uk-button-link:disabled{color:#999}.uk-button-link:focus{outline:1px dotted}.uk-button-mini{min-height:20px;padding:0 6px;line-height:18px;font-size:11px}.uk-button-small{min-height:25px;padding:0 10px;line-height:23px;font-size:12px}.uk-button-large{min-height:40px;padding:0 15px;line-height:38px;font-size:16px;border-radius:5px}.uk-button-group{display:inline-block;vertical-align:middle;position:relative;font-size:0;white-space:nowrap}.uk-button-group>*{display:inline-block}.uk-button-group .uk-button{vertical-align:top}.uk-button-dropdown{display:inline-block;vertical-align:middle;position:relative}.uk-button-group>.uk-button:not(:first-child):not(:last-child),.uk-button-group>div:not(:first-child):not(:last-child) .uk-button{border-radius:0}.uk-button-group>.uk-button:first-child,.uk-button-group>div:first-child .uk-button{border-top-right-radius:0;border-bottom-right-radius:0}.uk-button-group>.uk-button:last-child,.uk-button-group>div:last-child .uk-button{border-top-left-radius:0;border-bottom-left-radius:0}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:active{position:relative}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2)format('woff2'),url(../fonts/fontawesome-webfont.woff)format("woff"),url(../fonts/fontawesome-webfont.ttf)format("truetype");font-weight:400;font-style:normal}[class*=uk-icon-]{font-family:FontAwesome;display:inline-block;font-weight:400;font-style:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=uk-icon-],[class*=uk-icon-]:focus,[class*=uk-icon-]:hover{text-decoration:none}.uk-icon-small{font-size:150%;vertical-align:-10%}.uk-icon-medium{font-size:200%;vertical-align:-16%}.uk-icon-large{font-size:250%;vertical-align:-22%}.uk-icon-justify{width:1em;text-align:center}.uk-icon-spin{display:inline-block;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-icon-hover{color:#999}.uk-icon-hover:hover{color:#444}.uk-icon-button{-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;width:35px;height:35px;border-radius:100%;background:#f7f7f7;line-height:35px;color:#444;font-size:18px;text-align:center;border:1px solid #ccc;border-bottom-color:#bbb;background-origin:border-box;background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);text-shadow:0 1px 0 #fff}.uk-icon-button:focus,.uk-icon-button:hover{background-color:#fafafa;color:#444;outline:0;background-image:none}.uk-icon-button:active{background-color:#f5f5f5;color:#444;border-color:#ccc;border-top-color:#bbb;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.1)}.uk-icon-glass:before{content:"\f000"}.uk-icon-music:before{content:"\f001"}.uk-icon-search:before{content:"\f002"}.uk-icon-envelope-o:before{content:"\f003"}.uk-icon-heart:before{content:"\f004"}.uk-icon-star:before{content:"\f005"}.uk-icon-star-o:before{content:"\f006"}.uk-icon-user:before{content:"\f007"}.uk-icon-film:before{content:"\f008"}.uk-icon-th-large:before{content:"\f009"}.uk-icon-th:before{content:"\f00a"}.uk-icon-th-list:before{content:"\f00b"}.uk-icon-check:before{content:"\f00c"}.uk-icon-close:before,.uk-icon-remove:before,.uk-icon-times:before{content:"\f00d"}.uk-icon-search-plus:before{content:"\f00e"}.uk-icon-search-minus:before{content:"\f010"}.uk-icon-power-off:before{content:"\f011"}.uk-icon-signal:before{content:"\f012"}.uk-icon-cog:before,.uk-icon-gear:before{content:"\f013"}.uk-icon-trash-o:before{content:"\f014"}.uk-icon-home:before{content:"\f015"}.uk-icon-file-o:before{content:"\f016"}.uk-icon-clock-o:before{content:"\f017"}.uk-icon-road:before{content:"\f018"}.uk-icon-download:before{content:"\f019"}.uk-icon-arrow-circle-o-down:before{content:"\f01a"}.uk-icon-arrow-circle-o-up:before{content:"\f01b"}.uk-icon-inbox:before{content:"\f01c"}.uk-icon-play-circle-o:before{content:"\f01d"}.uk-icon-repeat:before,.uk-icon-rotate-right:before{content:"\f01e"}.uk-icon-refresh:before{content:"\f021"}.uk-icon-list-alt:before{content:"\f022"}.uk-icon-lock:before{content:"\f023"}.uk-icon-flag:before{content:"\f024"}.uk-icon-headphones:before{content:"\f025"}.uk-icon-volume-off:before{content:"\f026"}.uk-icon-volume-down:before{content:"\f027"}.uk-icon-volume-up:before{content:"\f028"}.uk-icon-qrcode:before{content:"\f029"}.uk-icon-barcode:before{content:"\f02a"}.uk-icon-tag:before{content:"\f02b"}.uk-icon-tags:before{content:"\f02c"}.uk-icon-book:before{content:"\f02d"}.uk-icon-bookmark:before{content:"\f02e"}.uk-icon-print:before{content:"\f02f"}.uk-icon-camera:before{content:"\f030"}.uk-icon-font:before{content:"\f031"}.uk-icon-bold:before{content:"\f032"}.uk-icon-italic:before{content:"\f033"}.uk-icon-text-height:before{content:"\f034"}.uk-icon-text-width:before{content:"\f035"}.uk-icon-align-left:before{content:"\f036"}.uk-icon-align-center:before{content:"\f037"}.uk-icon-align-right:before{content:"\f038"}.uk-icon-align-justify:before{content:"\f039"}.uk-icon-list:before{content:"\f03a"}.uk-icon-dedent:before,.uk-icon-outdent:before{content:"\f03b"}.uk-icon-indent:before{content:"\f03c"}.uk-icon-video-camera:before{content:"\f03d"}.uk-icon-image:before,.uk-icon-photo:before,.uk-icon-picture-o:before{content:"\f03e"}.uk-icon-pencil:before{content:"\f040"}.uk-icon-map-marker:before{content:"\f041"}.uk-icon-adjust:before{content:"\f042"}.uk-icon-tint:before{content:"\f043"}.uk-icon-edit:before,.uk-icon-pencil-square-o:before{content:"\f044"}.uk-icon-share-square-o:before{content:"\f045"}.uk-icon-check-square-o:before{content:"\f046"}.uk-icon-arrows:before{content:"\f047"}.uk-icon-step-backward:before{content:"\f048"}.uk-icon-fast-backward:before{content:"\f049"}.uk-icon-backward:before{content:"\f04a"}.uk-icon-play:before{content:"\f04b"}.uk-icon-pause:before{content:"\f04c"}.uk-icon-stop:before{content:"\f04d"}.uk-icon-forward:before{content:"\f04e"}.uk-icon-fast-forward:before{content:"\f050"}.uk-icon-step-forward:before{content:"\f051"}.uk-icon-eject:before{content:"\f052"}.uk-icon-chevron-left:before{content:"\f053"}.uk-icon-chevron-right:before{content:"\f054"}.uk-icon-plus-circle:before{content:"\f055"}.uk-icon-minus-circle:before{content:"\f056"}.uk-icon-times-circle:before{content:"\f057"}.uk-icon-check-circle:before{content:"\f058"}.uk-icon-question-circle:before{content:"\f059"}.uk-icon-info-circle:before{content:"\f05a"}.uk-icon-crosshairs:before{content:"\f05b"}.uk-icon-times-circle-o:before{content:"\f05c"}.uk-icon-check-circle-o:before{content:"\f05d"}.uk-icon-ban:before{content:"\f05e"}.uk-icon-arrow-left:before{content:"\f060"}.uk-icon-arrow-right:before{content:"\f061"}.uk-icon-arrow-up:before{content:"\f062"}.uk-icon-arrow-down:before{content:"\f063"}.uk-icon-mail-forward:before,.uk-icon-share:before{content:"\f064"}.uk-icon-expand:before{content:"\f065"}.uk-icon-compress:before{content:"\f066"}.uk-icon-plus:before{content:"\f067"}.uk-icon-minus:before{content:"\f068"}.uk-icon-asterisk:before{content:"\f069"}.uk-icon-exclamation-circle:before{content:"\f06a"}.uk-icon-gift:before{content:"\f06b"}.uk-icon-leaf:before{content:"\f06c"}.uk-icon-fire:before{content:"\f06d"}.uk-icon-eye:before{content:"\f06e"}.uk-icon-eye-slash:before{content:"\f070"}.uk-icon-exclamation-triangle:before,.uk-icon-warning:before{content:"\f071"}.uk-icon-plane:before{content:"\f072"}.uk-icon-calendar:before{content:"\f073"}.uk-icon-random:before{content:"\f074"}.uk-icon-comment:before{content:"\f075"}.uk-icon-magnet:before{content:"\f076"}.uk-icon-chevron-up:before{content:"\f077"}.uk-icon-chevron-down:before{content:"\f078"}.uk-icon-retweet:before{content:"\f079"}.uk-icon-shopping-cart:before{content:"\f07a"}.uk-icon-folder:before{content:"\f07b"}.uk-icon-folder-open:before{content:"\f07c"}.uk-icon-arrows-v:before{content:"\f07d"}.uk-icon-arrows-h:before{content:"\f07e"}.uk-icon-bar-chart-o:before,.uk-icon-bar-chart:before{content:"\f080"}.uk-icon-twitter-square:before{content:"\f081"}.uk-icon-facebook-square:before{content:"\f082"}.uk-icon-camera-retro:before{content:"\f083"}.uk-icon-key:before{content:"\f084"}.uk-icon-cogs:before,.uk-icon-gears:before{content:"\f085"}.uk-icon-comments:before{content:"\f086"}.uk-icon-thumbs-o-up:before{content:"\f087"}.uk-icon-thumbs-o-down:before{content:"\f088"}.uk-icon-star-half:before{content:"\f089"}.uk-icon-heart-o:before{content:"\f08a"}.uk-icon-sign-out:before{content:"\f08b"}.uk-icon-linkedin-square:before{content:"\f08c"}.uk-icon-thumb-tack:before{content:"\f08d"}.uk-icon-external-link:before{content:"\f08e"}.uk-icon-sign-in:before{content:"\f090"}.uk-icon-trophy:before{content:"\f091"}.uk-icon-github-square:before{content:"\f092"}.uk-icon-upload:before{content:"\f093"}.uk-icon-lemon-o:before{content:"\f094"}.uk-icon-phone:before{content:"\f095"}.uk-icon-square-o:before{content:"\f096"}.uk-icon-bookmark-o:before{content:"\f097"}.uk-icon-phone-square:before{content:"\f098"}.uk-icon-twitter:before{content:"\f099"}.uk-icon-facebook-f:before,.uk-icon-facebook:before{content:"\f09a"}.uk-icon-github:before{content:"\f09b"}.uk-icon-unlock:before{content:"\f09c"}.uk-icon-credit-card:before{content:"\f09d"}.uk-icon-rss:before{content:"\f09e"}.uk-icon-hdd-o:before{content:"\f0a0"}.uk-icon-bullhorn:before{content:"\f0a1"}.uk-icon-bell:before{content:"\f0f3"}.uk-icon-certificate:before{content:"\f0a3"}.uk-icon-hand-o-right:before{content:"\f0a4"}.uk-icon-hand-o-left:before{content:"\f0a5"}.uk-icon-hand-o-up:before{content:"\f0a6"}.uk-icon-hand-o-down:before{content:"\f0a7"}.uk-icon-arrow-circle-left:before{content:"\f0a8"}.uk-icon-arrow-circle-right:before{content:"\f0a9"}.uk-icon-arrow-circle-up:before{content:"\f0aa"}.uk-icon-arrow-circle-down:before{content:"\f0ab"}.uk-icon-globe:before{content:"\f0ac"}.uk-icon-wrench:before{content:"\f0ad"}.uk-icon-tasks:before{content:"\f0ae"}.uk-icon-filter:before{content:"\f0b0"}.uk-icon-briefcase:before{content:"\f0b1"}.uk-icon-arrows-alt:before{content:"\f0b2"}.uk-icon-group:before,.uk-icon-users:before{content:"\f0c0"}.uk-icon-chain:before,.uk-icon-link:before{content:"\f0c1"}.uk-icon-cloud:before{content:"\f0c2"}.uk-icon-flask:before{content:"\f0c3"}.uk-icon-cut:before,.uk-icon-scissors:before{content:"\f0c4"}.uk-icon-copy:before,.uk-icon-files-o:before{content:"\f0c5"}.uk-icon-paperclip:before{content:"\f0c6"}.uk-icon-floppy-o:before,.uk-icon-save:before{content:"\f0c7"}.uk-icon-square:before{content:"\f0c8"}.uk-icon-bars:before,.uk-icon-navicon:before,.uk-icon-reorder:before{content:"\f0c9"}.uk-icon-list-ul:before{content:"\f0ca"}.uk-icon-list-ol:before{content:"\f0cb"}.uk-icon-strikethrough:before{content:"\f0cc"}.uk-icon-underline:before{content:"\f0cd"}.uk-icon-table:before{content:"\f0ce"}.uk-icon-magic:before{content:"\f0d0"}.uk-icon-truck:before{content:"\f0d1"}.uk-icon-pinterest:before{content:"\f0d2"}.uk-icon-pinterest-square:before{content:"\f0d3"}.uk-icon-google-plus-square:before{content:"\f0d4"}.uk-icon-google-plus:before{content:"\f0d5"}.uk-icon-money:before{content:"\f0d6"}.uk-icon-caret-down:before{content:"\f0d7"}.uk-icon-caret-up:before{content:"\f0d8"}.uk-icon-caret-left:before{content:"\f0d9"}.uk-icon-caret-right:before{content:"\f0da"}.uk-icon-columns:before{content:"\f0db"}.uk-icon-sort:before,.uk-icon-unsorted:before{content:"\f0dc"}.uk-icon-sort-desc:before,.uk-icon-sort-down:before{content:"\f0dd"}.uk-icon-sort-asc:before,.uk-icon-sort-up:before{content:"\f0de"}.uk-icon-envelope:before{content:"\f0e0"}.uk-icon-linkedin:before{content:"\f0e1"}.uk-icon-rotate-left:before,.uk-icon-undo:before{content:"\f0e2"}.uk-icon-gavel:before,.uk-icon-legal:before{content:"\f0e3"}.uk-icon-dashboard:before,.uk-icon-tachometer:before{content:"\f0e4"}.uk-icon-comment-o:before{content:"\f0e5"}.uk-icon-comments-o:before{content:"\f0e6"}.uk-icon-bolt:before,.uk-icon-flash:before{content:"\f0e7"}.uk-icon-sitemap:before{content:"\f0e8"}.uk-icon-umbrella:before{content:"\f0e9"}.uk-icon-clipboard:before,.uk-icon-paste:before{content:"\f0ea"}.uk-icon-lightbulb-o:before{content:"\f0eb"}.uk-icon-exchange:before{content:"\f0ec"}.uk-icon-cloud-download:before{content:"\f0ed"}.uk-icon-cloud-upload:before{content:"\f0ee"}.uk-icon-user-md:before{content:"\f0f0"}.uk-icon-stethoscope:before{content:"\f0f1"}.uk-icon-suitcase:before{content:"\f0f2"}.uk-icon-bell-o:before{content:"\f0a2"}.uk-icon-coffee:before{content:"\f0f4"}.uk-icon-cutlery:before{content:"\f0f5"}.uk-icon-file-text-o:before{content:"\f0f6"}.uk-icon-building-o:before{content:"\f0f7"}.uk-icon-hospital-o:before{content:"\f0f8"}.uk-icon-ambulance:before{content:"\f0f9"}.uk-icon-medkit:before{content:"\f0fa"}.uk-icon-fighter-jet:before{content:"\f0fb"}.uk-icon-beer:before{content:"\f0fc"}.uk-icon-h-square:before{content:"\f0fd"}.uk-icon-plus-square:before{content:"\f0fe"}.uk-icon-angle-double-left:before{content:"\f100"}.uk-icon-angle-double-right:before{content:"\f101"}.uk-icon-angle-double-up:before{content:"\f102"}.uk-icon-angle-double-down:before{content:"\f103"}.uk-icon-angle-left:before{content:"\f104"}.uk-icon-angle-right:before{content:"\f105"}.uk-icon-angle-up:before{content:"\f106"}.uk-icon-angle-down:before{content:"\f107"}.uk-icon-desktop:before{content:"\f108"}.uk-icon-laptop:before{content:"\f109"}.uk-icon-tablet:before{content:"\f10a"}.uk-icon-mobile-phone:before,.uk-icon-mobile:before{content:"\f10b"}.uk-icon-circle-o:before{content:"\f10c"}.uk-icon-quote-left:before{content:"\f10d"}.uk-icon-quote-right:before{content:"\f10e"}.uk-icon-spinner:before{content:"\f110"}.uk-icon-circle:before{content:"\f111"}.uk-icon-mail-reply:before,.uk-icon-reply:before{content:"\f112"}.uk-icon-github-alt:before{content:"\f113"}.uk-icon-folder-o:before{content:"\f114"}.uk-icon-folder-open-o:before{content:"\f115"}.uk-icon-smile-o:before{content:"\f118"}.uk-icon-frown-o:before{content:"\f119"}.uk-icon-meh-o:before{content:"\f11a"}.uk-icon-gamepad:before{content:"\f11b"}.uk-icon-keyboard-o:before{content:"\f11c"}.uk-icon-flag-o:before{content:"\f11d"}.uk-icon-flag-checkered:before{content:"\f11e"}.uk-icon-terminal:before{content:"\f120"}.uk-icon-code:before{content:"\f121"}.uk-icon-mail-reply-all:before,.uk-icon-reply-all:before{content:"\f122"}.uk-icon-star-half-empty:before,.uk-icon-star-half-full:before,.uk-icon-star-half-o:before{content:"\f123"}.uk-icon-location-arrow:before{content:"\f124"}.uk-icon-crop:before{content:"\f125"}.uk-icon-code-fork:before{content:"\f126"}.uk-icon-chain-broken:before,.uk-icon-unlink:before{content:"\f127"}.uk-icon-question:before{content:"\f128"}.uk-icon-info:before{content:"\f129"}.uk-icon-exclamation:before{content:"\f12a"}.uk-icon-superscript:before{content:"\f12b"}.uk-icon-subscript:before{content:"\f12c"}.uk-icon-eraser:before{content:"\f12d"}.uk-icon-puzzle-piece:before{content:"\f12e"}.uk-icon-microphone:before{content:"\f130"}.uk-icon-microphone-slash:before{content:"\f131"}.uk-icon-shield:before{content:"\f132"}.uk-icon-calendar-o:before{content:"\f133"}.uk-icon-fire-extinguisher:before{content:"\f134"}.uk-icon-rocket:before{content:"\f135"}.uk-icon-maxcdn:before{content:"\f136"}.uk-icon-chevron-circle-left:before{content:"\f137"}.uk-icon-chevron-circle-right:before{content:"\f138"}.uk-icon-chevron-circle-up:before{content:"\f139"}.uk-icon-chevron-circle-down:before{content:"\f13a"}.uk-icon-html5:before{content:"\f13b"}.uk-icon-css3:before{content:"\f13c"}.uk-icon-anchor:before{content:"\f13d"}.uk-icon-unlock-alt:before{content:"\f13e"}.uk-icon-bullseye:before{content:"\f140"}.uk-icon-ellipsis-h:before{content:"\f141"}.uk-icon-ellipsis-v:before{content:"\f142"}.uk-icon-rss-square:before{content:"\f143"}.uk-icon-play-circle:before{content:"\f144"}.uk-icon-ticket:before{content:"\f145"}.uk-icon-minus-square:before{content:"\f146"}.uk-icon-minus-square-o:before{content:"\f147"}.uk-icon-level-up:before{content:"\f148"}.uk-icon-level-down:before{content:"\f149"}.uk-icon-check-square:before{content:"\f14a"}.uk-icon-pencil-square:before{content:"\f14b"}.uk-icon-external-link-square:before{content:"\f14c"}.uk-icon-share-square:before{content:"\f14d"}.uk-icon-compass:before{content:"\f14e"}.uk-icon-caret-square-o-down:before,.uk-icon-toggle-down:before{content:"\f150"}.uk-icon-caret-square-o-up:before,.uk-icon-toggle-up:before{content:"\f151"}.uk-icon-caret-square-o-right:before,.uk-icon-toggle-right:before{content:"\f152"}.uk-icon-eur:before,.uk-icon-euro:before{content:"\f153"}.uk-icon-gbp:before{content:"\f154"}.uk-icon-dollar:before,.uk-icon-usd:before{content:"\f155"}.uk-icon-inr:before,.uk-icon-rupee:before{content:"\f156"}.uk-icon-cny:before,.uk-icon-jpy:before,.uk-icon-rmb:before,.uk-icon-yen:before{content:"\f157"}.uk-icon-rouble:before,.uk-icon-rub:before,.uk-icon-ruble:before{content:"\f158"}.uk-icon-krw:before,.uk-icon-won:before{content:"\f159"}.uk-icon-bitcoin:before,.uk-icon-btc:before{content:"\f15a"}.uk-icon-file:before{content:"\f15b"}.uk-icon-file-text:before{content:"\f15c"}.uk-icon-sort-alpha-asc:before{content:"\f15d"}.uk-icon-sort-alpha-desc:before{content:"\f15e"}.uk-icon-sort-amount-asc:before{content:"\f160"}.uk-icon-sort-amount-desc:before{content:"\f161"}.uk-icon-sort-numeric-asc:before{content:"\f162"}.uk-icon-sort-numeric-desc:before{content:"\f163"}.uk-icon-thumbs-up:before{content:"\f164"}.uk-icon-thumbs-down:before{content:"\f165"}.uk-icon-youtube-square:before{content:"\f166"}.uk-icon-youtube:before{content:"\f167"}.uk-icon-xing:before{content:"\f168"}.uk-icon-xing-square:before{content:"\f169"}.uk-icon-youtube-play:before{content:"\f16a"}.uk-icon-dropbox:before{content:"\f16b"}.uk-icon-stack-overflow:before{content:"\f16c"}.uk-icon-instagram:before{content:"\f16d"}.uk-icon-flickr:before{content:"\f16e"}.uk-icon-adn:before{content:"\f170"}.uk-icon-bitbucket:before{content:"\f171"}.uk-icon-bitbucket-square:before{content:"\f172"}.uk-icon-tumblr:before{content:"\f173"}.uk-icon-tumblr-square:before{content:"\f174"}.uk-icon-long-arrow-down:before{content:"\f175"}.uk-icon-long-arrow-up:before{content:"\f176"}.uk-icon-long-arrow-left:before{content:"\f177"}.uk-icon-long-arrow-right:before{content:"\f178"}.uk-icon-apple:before{content:"\f179"}.uk-icon-windows:before{content:"\f17a"}.uk-icon-android:before{content:"\f17b"}.uk-icon-linux:before{content:"\f17c"}.uk-icon-dribbble:before{content:"\f17d"}.uk-icon-skype:before{content:"\f17e"}.uk-icon-foursquare:before{content:"\f180"}.uk-icon-trello:before{content:"\f181"}.uk-icon-female:before{content:"\f182"}.uk-icon-male:before{content:"\f183"}.uk-icon-gittip:before,.uk-icon-gratipay:before{content:"\f184"}.uk-icon-sun-o:before{content:"\f185"}.uk-icon-moon-o:before{content:"\f186"}.uk-icon-archive:before{content:"\f187"}.uk-icon-bug:before{content:"\f188"}.uk-icon-vk:before{content:"\f189"}.uk-icon-weibo:before{content:"\f18a"}.uk-icon-renren:before{content:"\f18b"}.uk-icon-pagelines:before{content:"\f18c"}.uk-icon-stack-exchange:before{content:"\f18d"}.uk-icon-arrow-circle-o-right:before{content:"\f18e"}.uk-icon-arrow-circle-o-left:before{content:"\f190"}.uk-icon-caret-square-o-left:before,.uk-icon-toggle-left:before{content:"\f191"}.uk-icon-dot-circle-o:before{content:"\f192"}.uk-icon-wheelchair:before{content:"\f193"}.uk-icon-vimeo-square:before{content:"\f194"}.uk-icon-try:before,.uk-icon-turkish-lira:before{content:"\f195"}.uk-icon-plus-square-o:before{content:"\f196"}.uk-icon-space-shuttle:before{content:"\f197"}.uk-icon-slack:before{content:"\f198"}.uk-icon-envelope-square:before{content:"\f199"}.uk-icon-wordpress:before{content:"\f19a"}.uk-icon-openid:before{content:"\f19b"}.uk-icon-bank:before,.uk-icon-institution:before,.uk-icon-university:before{content:"\f19c"}.uk-icon-graduation-cap:before,.uk-icon-mortar-board:before{content:"\f19d"}.uk-icon-yahoo:before{content:"\f19e"}.uk-icon-google:before{content:"\f1a0"}.uk-icon-reddit:before{content:"\f1a1"}.uk-icon-reddit-square:before{content:"\f1a2"}.uk-icon-stumbleupon-circle:before{content:"\f1a3"}.uk-icon-stumbleupon:before{content:"\f1a4"}.uk-icon-delicious:before{content:"\f1a5"}.uk-icon-digg:before{content:"\f1a6"}.uk-icon-pied-piper:before{content:"\f1a7"}.uk-icon-pied-piper-alt:before{content:"\f1a8"}.uk-icon-drupal:before{content:"\f1a9"}.uk-icon-joomla:before{content:"\f1aa"}.uk-icon-language:before{content:"\f1ab"}.uk-icon-fax:before{content:"\f1ac"}.uk-icon-building:before{content:"\f1ad"}.uk-icon-child:before{content:"\f1ae"}.uk-icon-paw:before{content:"\f1b0"}.uk-icon-spoon:before{content:"\f1b1"}.uk-icon-cube:before{content:"\f1b2"}.uk-icon-cubes:before{content:"\f1b3"}.uk-icon-behance:before{content:"\f1b4"}.uk-icon-behance-square:before{content:"\f1b5"}.uk-icon-steam:before{content:"\f1b6"}.uk-icon-steam-square:before{content:"\f1b7"}.uk-icon-recycle:before{content:"\f1b8"}.uk-icon-automobile:before,.uk-icon-car:before{content:"\f1b9"}.uk-icon-cab:before,.uk-icon-taxi:before{content:"\f1ba"}.uk-icon-tree:before{content:"\f1bb"}.uk-icon-spotify:before{content:"\f1bc"}.uk-icon-deviantart:before{content:"\f1bd"}.uk-icon-soundcloud:before{content:"\f1be"}.uk-icon-database:before{content:"\f1c0"}.uk-icon-file-pdf-o:before{content:"\f1c1"}.uk-icon-file-word-o:before{content:"\f1c2"}.uk-icon-file-excel-o:before{content:"\f1c3"}.uk-icon-file-powerpoint-o:before{content:"\f1c4"}.uk-icon-file-image-o:before,.uk-icon-file-photo-o:before,.uk-icon-file-picture-o:before{content:"\f1c5"}.uk-icon-file-archive-o:before,.uk-icon-file-zip-o:before{content:"\f1c6"}.uk-icon-file-audio-o:before,.uk-icon-file-sound-o:before{content:"\f1c7"}.uk-icon-file-movie-o:before,.uk-icon-file-video-o:before{content:"\f1c8"}.uk-icon-file-code-o:before{content:"\f1c9"}.uk-icon-vine:before{content:"\f1ca"}.uk-icon-codepen:before{content:"\f1cb"}.uk-icon-jsfiddle:before{content:"\f1cc"}.uk-icon-life-bouy:before,.uk-icon-life-buoy:before,.uk-icon-life-ring:before,.uk-icon-life-saver:before,.uk-icon-support:before{content:"\f1cd"}.uk-icon-circle-o-notch:before{content:"\f1ce"}.uk-icon-ra:before,.uk-icon-rebel:before{content:"\f1d0"}.uk-icon-empire:before,.uk-icon-ge:before{content:"\f1d1"}.uk-icon-git-square:before{content:"\f1d2"}.uk-icon-git:before{content:"\f1d3"}.uk-icon-hacker-news:before{content:"\f1d4"}.uk-icon-tencent-weibo:before{content:"\f1d5"}.uk-icon-qq:before{content:"\f1d6"}.uk-icon-wechat:before,.uk-icon-weixin:before{content:"\f1d7"}.uk-icon-paper-plane:before,.uk-icon-send:before{content:"\f1d8"}.uk-icon-paper-plane-o:before,.uk-icon-send-o:before{content:"\f1d9"}.uk-icon-history:before{content:"\f1da"}.uk-icon-circle-thin:before,.uk-icon-genderless:before{content:"\f1db"}.uk-icon-header:before{content:"\f1dc"}.uk-icon-paragraph:before{content:"\f1dd"}.uk-icon-sliders:before{content:"\f1de"}.uk-icon-share-alt:before{content:"\f1e0"}.uk-icon-share-alt-square:before{content:"\f1e1"}.uk-icon-bomb:before{content:"\f1e2"}.uk-icon-futbol-o:before,.uk-icon-soccer-ball-o:before{content:"\f1e3"}.uk-icon-tty:before{content:"\f1e4"}.uk-icon-binoculars:before{content:"\f1e5"}.uk-icon-plug:before{content:"\f1e6"}.uk-icon-slideshare:before{content:"\f1e7"}.uk-icon-twitch:before{content:"\f1e8"}.uk-icon-yelp:before{content:"\f1e9"}.uk-icon-newspaper-o:before{content:"\f1ea"}.uk-icon-wifi:before{content:"\f1eb"}.uk-icon-calculator:before{content:"\f1ec"}.uk-icon-paypal:before{content:"\f1ed"}.uk-icon-google-wallet:before{content:"\f1ee"}.uk-icon-cc-visa:before{content:"\f1f0"}.uk-icon-cc-mastercard:before{content:"\f1f1"}.uk-icon-cc-discover:before{content:"\f1f2"}.uk-icon-cc-amex:before{content:"\f1f3"}.uk-icon-cc-paypal:before{content:"\f1f4"}.uk-icon-cc-stripe:before{content:"\f1f5"}.uk-icon-bell-slash:before{content:"\f1f6"}.uk-icon-bell-slash-o:before{content:"\f1f7"}.uk-icon-trash:before{content:"\f1f8"}.uk-icon-copyright:before{content:"\f1f9"}.uk-icon-at:before{content:"\f1fa"}.uk-icon-eyedropper:before{content:"\f1fb"}.uk-icon-paint-brush:before{content:"\f1fc"}.uk-icon-birthday-cake:before{content:"\f1fd"}.uk-icon-area-chart:before{content:"\f1fe"}.uk-icon-pie-chart:before{content:"\f200"}.uk-icon-line-chart:before{content:"\f201"}.uk-icon-lastfm:before{content:"\f202"}.uk-icon-lastfm-square:before{content:"\f203"}.uk-icon-toggle-off:before{content:"\f204"}.uk-icon-toggle-on:before{content:"\f205"}.uk-icon-bicycle:before{content:"\f206"}.uk-icon-bus:before{content:"\f207"}.uk-icon-ioxhost:before{content:"\f208"}.uk-icon-angellist:before{content:"\f209"}.uk-icon-cc:before{content:"\f20a"}.uk-icon-ils:before,.uk-icon-shekel:before,.uk-icon-sheqel:before{content:"\f20b"}.uk-icon-meanpath:before{content:"\f20c"}.uk-icon-buysellads:before{content:"\f20d"}.uk-icon-connectdevelop:before{content:"\f20e"}.uk-icon-dashcube:before{content:"\f210"}.uk-icon-forumbee:before{content:"\f211"}.uk-icon-leanpub:before{content:"\f212"}.uk-icon-sellsy:before{content:"\f213"}.uk-icon-shirtsinbulk:before{content:"\f214"}.uk-icon-simplybuilt:before{content:"\f215"}.uk-icon-skyatlas:before{content:"\f216"}.uk-icon-cart-plus:before{content:"\f217"}.uk-icon-cart-arrow-down:before{content:"\f218"}.uk-icon-diamond:before{content:"\f219"}.uk-icon-ship:before{content:"\f21a"}.uk-icon-user-secret:before{content:"\f21b"}.uk-icon-motorcycle:before{content:"\f21c"}.uk-icon-street-view:before{content:"\f21d"}.uk-icon-heartbeat:before{content:"\f21e"}.uk-icon-venus:before{content:"\f221"}.uk-icon-mars:before{content:"\f222"}.uk-icon-mercury:before{content:"\f223"}.uk-icon-transgender:before{content:"\f224"}.uk-icon-transgender-alt:before{content:"\f225"}.uk-icon-venus-double:before{content:"\f226"}.uk-icon-mars-double:before{content:"\f227"}.uk-icon-venus-mars:before{content:"\f228"}.uk-icon-mars-stroke:before{content:"\f229"}.uk-icon-mars-stroke-v:before{content:"\f22a"}.uk-icon-mars-stroke-h:before{content:"\f22b"}.uk-icon-neuter:before{content:"\f22c"}.uk-icon-facebook-official:before{content:"\f230"}.uk-icon-pinterest-p:before{content:"\f231"}.uk-icon-whatsapp:before{content:"\f232"}.uk-icon-server:before{content:"\f233"}.uk-icon-user-plus:before{content:"\f234"}.uk-icon-user-times:before{content:"\f235"}.uk-icon-bed:before,.uk-icon-hotel:before{content:"\f236"}.uk-icon-viacoin:before{content:"\f237"}.uk-icon-train:before{content:"\f238"}.uk-icon-subway:before{content:"\f239"}.uk-icon-medium-logo:before{content:"\f23a"}.uk-close::-moz-focus-inner{border:0;padding:0}.uk-close{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background:0 0;display:inline-block;-moz-box-sizing:content-box;box-sizing:content-box;width:20px;line-height:20px;text-align:center;vertical-align:middle;opacity:.3}.uk-close:after{display:block;content:"\f00d";font-family:FontAwesome}.uk-close:focus,.uk-close:hover{opacity:.5;outline:0;color:inherit;text-decoration:none;cursor:pointer}.uk-close-alt{padding:2px;border-radius:50%;background:#fff;opacity:1;box-shadow:0 0 0 1px rgba(0,0,0,.1),0 0 6px rgba(0,0,0,.3)}.uk-close-alt:focus,.uk-close-alt:hover{opacity:1}.uk-close-alt:after{opacity:.5}.uk-close-alt:focus:after,.uk-close-alt:hover:after{opacity:.8}.uk-badge{display:inline-block;padding:0 5px;background:#009dd8;font-size:10px;font-weight:700;line-height:14px;color:#fff;text-align:center;vertical-align:middle;text-transform:none;border:1px solid rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.3);background-origin:border-box;background-image:-webkit-linear-gradient(top,#00b4f5,#008dc5);background-image:linear-gradient(to bottom,#00b4f5,#008dc5);border-radius:2px;text-shadow:0 -1px 0 rgba(0,0,0,.2)}a.uk-badge:hover{color:#fff}.uk-badge-notification{-moz-box-sizing:border-box;box-sizing:border-box;min-width:18px;border-radius:500px;font-size:12px;line-height:18px}.uk-badge-success{background-color:#82bb42;background-image:-webkit-linear-gradient(top,#9fd256,#6fac34);background-image:linear-gradient(to bottom,#9fd256,#6fac34)}.uk-badge-warning{background-color:#f9a124;background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406)}.uk-badge-danger{background-color:#d32c46;background-image:-webkit-linear-gradient(top,#ee465a,#c11a39);background-image:linear-gradient(to bottom,#ee465a,#c11a39)}.uk-alert{margin-bottom:15px;padding:10px;background:#ebf7fd;color:#2d7091;border:1px solid rgba(45,112,145,.3);border-radius:4px;text-shadow:0 1px 0 #fff}*+.uk-alert{margin-top:15px}.uk-alert>:last-child{margin-bottom:0}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert>.uk-close:first-child{float:right}.uk-alert>.uk-close:first-child+*{margin-top:0}.uk-alert-success{background:#f2fae3;color:#659f13;border-color:rgba(101,159,19,.3)}.uk-alert-warning{background:#fffceb;color:#e28327;border-color:rgba(226,131,39,.3)}.uk-alert-danger{background:#fff1f0;color:#d85030;border-color:rgba(216,80,48,.3)}.uk-alert-large{padding:20px}.uk-alert-large>.uk-close:first-child{margin:-10px -10px 0 0}.uk-thumbnail{display:inline-block;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px;border:1px solid #ddd;background:#fff;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.05)}a.uk-thumbnail:focus,a.uk-thumbnail:hover{border-color:#aaa;background-color:#fff;text-decoration:none;outline:0;box-shadow:0 1px 4px rgba(0,0,0,.3)}.uk-thumbnail-caption{padding-top:4px;text-align:center;color:#444}.uk-thumbnail-mini{width:150px}.uk-thumbnail-small{width:200px}.uk-thumbnail-medium{width:300px}.uk-thumbnail-large{width:400px}.uk-thumbnail-expand,.uk-thumbnail-expand>img{width:100%}.uk-overlay{display:inline-block;position:relative;max-width:100%;vertical-align:middle;overflow:hidden;-webkit-transform:translateZ(0);margin:0}.uk-overlay.uk-border-circle{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.uk-overlay>:first-child{margin-bottom:0}.uk-overlay-panel{position:absolute;top:0;bottom:0;left:0;right:0;padding:20px;color:#fff}.uk-overlay-panel.uk-flex>*>:last-child,.uk-overlay-panel>:last-child{margin-bottom:0}.uk-overlay-panel h1,.uk-overlay-panel h2,.uk-overlay-panel h3,.uk-overlay-panel h4,.uk-overlay-panel h5,.uk-overlay-panel h6{color:inherit}.uk-overlay-panel a:not([class]){color:inherit;text-decoration:underline}.uk-overlay-panel a[class*=uk-icon-]:not(.uk-icon-button){color:inherit}.uk-overlay-hover:not(:hover):not(.uk-hover) .uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-active :not(.uk-active)>.uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-background{background:rgba(0,0,0,.5)}.uk-overlay-image{padding:0}.uk-overlay-top{bottom:auto}.uk-overlay-bottom{top:auto}.uk-overlay-left{right:auto}.uk-overlay-right{left:auto}.uk-overlay-icon:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-blur,.uk-overlay-fade,.uk-overlay-grayscale,.uk-overlay-scale,.uk-overlay-spin,[class*=uk-overlay-slide]{transition-duration:.3s;transition-timing-function:ease-out;transition-property:opacity transform filter}.uk-overlay-active .uk-overlay-fade,.uk-overlay-active .uk-overlay-scale,.uk-overlay-active .uk-overlay-spin,.uk-overlay-active [class*=uk-overlay-slide]{transition-duration:.8s}.uk-overlay-fade{opacity:.7}.uk-overlay-active .uk-active>.uk-overlay-fade,.uk-overlay-hover:hover .uk-overlay-fade{opacity:1}.uk-overlay-scale{-webkit-transform:scale(1);transform:scale(1)}.uk-overlay-active .uk-active>.uk-overlay-scale,.uk-overlay-hover:hover .uk-overlay-scale{-webkit-transform:scale(1.1);transform:scale(1.1)}.uk-overlay-spin{-webkit-transform:scale(1)rotate(0);transform:scale(1)rotate(0)}.uk-overlay-active .uk-active>.uk-overlay-spin,.uk-overlay-hover:hover .uk-overlay-spin{-webkit-transform:scale(1.1)rotate(3deg);transform:scale(1.1)rotate(3deg)}.uk-overlay-grayscale{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.uk-overlay-active .uk-active>.uk-overlay-grayscale,.uk-overlay-hover:hover .uk-overlay-grayscale{-webkit-filter:grayscale(0);filter:grayscale(0)}[class*=uk-overlay-slide]{opacity:0}.uk-overlay-slide-top{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.uk-overlay-slide-bottom{-webkit-transform:translateY(100%);transform:translateY(100%)}.uk-overlay-slide-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.uk-overlay-slide-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-overlay-active .uk-active>[class*=uk-overlay-slide],.uk-overlay-hover:hover [class*=uk-overlay-slide]{opacity:1;-webkit-transform:translateX(0)translateY(0);transform:translateX(0)translateY(0)}.uk-overlay-area{position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.3);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-area,.uk-overlay-toggle:hover .uk-overlay-area,.uk-overlay.uk-hover .uk-overlay-area,.uk-overlay:hover .uk-overlay-area{opacity:1}.uk-overlay-area:empty:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-area:not(:empty){font-size:0}.uk-overlay-area:not(:empty):before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-overlay-area-content{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;vertical-align:middle;font-size:1rem;text-align:center;padding:0 15px;color:#fff}.uk-overlay-area-content>:last-child{margin-bottom:0}.uk-overlay-area-content a:not([class]),.uk-overlay-area-content a:not([class]):hover{color:inherit}.uk-overlay-caption{position:absolute;bottom:0;left:0;right:0;padding:15px;background:rgba(0,0,0,.5);color:#fff;opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-caption,.uk-overlay-toggle:hover .uk-overlay-caption,.uk-overlay.uk-hover .uk-overlay-caption,.uk-overlay:hover .uk-overlay-caption{opacity:1}[class*=uk-animation-]{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media screen{[data-uk-scrollspy*=uk-animation-]:not([data-uk-scrollspy*=target]){opacity:0}}.uk-animation-fade{-webkit-animation-name:uk-fade;animation-name:uk-fade;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-timing-function:linear!important;animation-timing-function:linear!important}.uk-animation-scale-up{-webkit-animation-name:uk-fade-scale-02;animation-name:uk-fade-scale-02}.uk-animation-scale-down{-webkit-animation-name:uk-fade-scale-18;animation-name:uk-fade-scale-18}.uk-animation-slide-top{-webkit-animation-name:uk-fade-top;animation-name:uk-fade-top}.uk-animation-slide-bottom{-webkit-animation-name:uk-fade-bottom;animation-name:uk-fade-bottom}.uk-animation-slide-left{-webkit-animation-name:uk-fade-left;animation-name:uk-fade-left}.uk-animation-slide-right{-webkit-animation-name:uk-fade-right;animation-name:uk-fade-right}.uk-animation-scale{-webkit-animation-name:uk-scale-12;animation-name:uk-scale-12}.uk-animation-shake{-webkit-animation-name:uk-shake;animation-name:uk-shake}.uk-animation-reverse{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}.uk-animation-15{-webkit-animation-duration:15s;animation-duration:15s}.uk-animation-top-left{-webkit-transform-origin:0 0;transform-origin:0 0}.uk-animation-top-center{-webkit-transform-origin:50% 0;transform-origin:50% 0}.uk-animation-top-right{-webkit-transform-origin:100% 0;transform-origin:100% 0}.uk-animation-middle-left{-webkit-transform-origin:0 50%;transform-origin:0 50%}.uk-animation-middle-right{-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.uk-animation-bottom-left{-webkit-transform-origin:0 100%;transform-origin:0 100%}.uk-animation-bottom-center{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.uk-animation-bottom-right{-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.uk-animation-hover:not(:hover),.uk-animation-hover:not(:hover) [class*=uk-animation-],.uk-touch .uk-animation-hover:not(.uk-hover),.uk-touch .uk-animation-hover:not(.uk-hover) [class*=uk-animation-]{-webkit-animation-name:none;animation-name:none}@-webkit-keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes uk-fade-top{0%{opacity:0;-webkit-transform:translateY(-100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom{0%{opacity:0;-webkit-transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left{0%{opacity:0;-webkit-transform:translateX(-100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right{0%{opacity:0;-webkit-transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-scale-02{0%{opacity:0;-webkit-transform:scale(.2)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-15{0%{opacity:0;-webkit-transform:scale(1.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-15{0%{opacity:0;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-18{0%{opacity:0;-webkit-transform:scale(1.8)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-slide-left{0%{-webkit-transform:translateX(-100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right{0%{-webkit-transform:translateX(100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-left-33{0%{-webkit-transform:translateX(33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left-33{0%{transform:translateX(33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right-33{0%{-webkit-transform:translateX(-33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right-33{0%{transform:translateX(-33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-scale-12{0%{-webkit-transform:scale(1.2)}100%{-webkit-transform:scale(1)}}@keyframes uk-scale-12{0%{transform:scale(1.2)}100%{transform:scale(1)}}@-webkit-keyframes uk-rotate{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes uk-rotate{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}@-webkit-keyframes uk-shake{0%,100%{-webkit-transform:translateX(0)}10%{-webkit-transform:translateX(-9px)}20%{-webkit-transform:translateX(8px)}30%{-webkit-transform:translateX(-7px)}40%{-webkit-transform:translateX(6px)}50%{-webkit-transform:translateX(-5px)}60%{-webkit-transform:translateX(4px)}70%{-webkit-transform:translateX(-3px)}80%{-webkit-transform:translateX(2px)}90%{-webkit-transform:translateX(-1px)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@-webkit-keyframes uk-slide-top-fixed{0%{opacity:0;-webkit-transform:translateY(-10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-top-fixed{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-slide-bottom-fixed{0%{opacity:0;-webkit-transform:translateY(10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-bottom-fixed{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}.uk-dropdown{display:none;position:absolute;top:100%;left:0;z-index:1020;-moz-box-sizing:border-box;box-sizing:border-box;width:200px;margin-top:5px;padding:15px;background:#fff;color:#444;font-size:1rem;vertical-align:top;border:1px solid #cbcbcb;border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.1)}.uk-open>.uk-dropdown{display:block;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-dropdown-flip{left:auto;right:0}.uk-dropdown-up{top:auto;bottom:100%;margin-top:auto;margin-bottom:5px}.uk-dropdown .uk-nav{margin:0 -15px}.uk-grid .uk-dropdown-grid+.uk-dropdown-grid{margin-top:15px}.uk-dropdown-grid>[class*=uk-width-]>.uk-panel+.uk-panel{margin-top:15px}@media (min-width:768px){.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid{margin-left:-15px;margin-right:-15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]{padding-left:15px;padding-right:15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){border-left:1px solid #ddd}.uk-dropdown-width-2:not(.uk-dropdown-stack){width:400px}.uk-dropdown-width-3:not(.uk-dropdown-stack){width:600px}.uk-dropdown-width-4:not(.uk-dropdown-stack){width:800px}.uk-dropdown-width-5:not(.uk-dropdown-stack){width:1000px}}@media (max-width:767px){.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}.uk-dropdown-small{min-width:150px;width:auto;padding:5px;white-space:nowrap}.uk-dropdown-small .uk-nav{margin:0 -5px}.uk-dropdown-navbar{margin-top:6px;background:#fff;color:#444;left:-1px;box-shadow:0 2px 5px rgba(0,0,0,.1)}.uk-open>.uk-dropdown-navbar{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-dropdown-scrollable{overflow-y:auto;max-height:200px}.uk-dropdown-navbar.uk-dropdown-flip{left:auto}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;background:rgba(0,0,0,.6);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;touch-action:cross-slide-y pinch-zoom double-tap-zoom;-webkit-transform:translateZ(0);transform:translateZ(0)}.uk-modal.uk-open{opacity:1}.uk-modal-page,.uk-modal-page body{overflow:hidden}.uk-modal-dialog{position:relative;-moz-box-sizing:border-box;box-sizing:border-box;margin:50px auto;padding:20px;width:600px;max-width:100%;max-width:calc(100% - 20px);background:#fff;opacity:0;-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-transition:opacity .3s linear,-webkit-transform .3s ease-out;transition:opacity .3s linear,transform .3s ease-out;border-radius:4px;box-shadow:0 0 10px rgba(0,0,0,.3)}@media (max-width:767px){.uk-modal-dialog{width:auto;margin:10px auto}}.uk-open .uk-modal-dialog{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.uk-modal-dialog>:not([class*=uk-modal-]):last-child{margin-bottom:0}.uk-modal-dialog>.uk-close:first-child{margin:-10px -10px 0 0;float:right}.uk-modal-dialog>.uk-close:first-child+:not([class*=uk-modal-]){margin-top:0}.uk-modal-dialog-lightbox{margin:15px auto;padding:0;max-width:95%;max-width:calc(100% - 30px);border-radius:0}.uk-modal-dialog-lightbox>.uk-close:first-child{position:absolute;top:-12px;right:-12px;margin:0;float:none}@media (max-width:767px){.uk-modal-dialog-lightbox>.uk-close:first-child{top:-7px;right:-7px}}@media (min-width:768px){.uk-modal-dialog-large{width:930px}}@media (min-width:1220px){.uk-modal-dialog-large{width:1130px}}.uk-modal-header{margin-bottom:15px;margin:-20px -20px 15px -20px;padding:20px;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0;background:#fafafa}.uk-modal-footer{margin-top:15px;margin:15px -20px -20px -20px;padding:20px;border-top:1px solid #ddd;border-radius:0 0 4px 4px;background:#fafafa}.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-caption{position:absolute;left:0;right:0;bottom:-20px;margin-bottom:-10px;color:#fff;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-modal-spinner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:25px;color:#ddd}.uk-modal-spinner:after{content:"\f110";font-family:FontAwesome;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-offcanvas{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;touch-action:none;background:rgba(0,0,0,.1)}.uk-offcanvas.uk-active{display:block}.uk-offcanvas-page{position:fixed;-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out}.uk-offcanvas-bar{position:fixed;top:0;bottom:0;left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:1001;width:270px;max-width:100%;background:#333;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;-ms-scroll-chaining:none}.uk-offcanvas.uk-active .uk-offcanvas-bar.uk-offcanvas-bar-show{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas-bar-flip{left:auto;right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas .uk-panel{margin:20px 15px;color:#777;text-shadow:0 1px 0 rgba(0,0,0,.5)}.uk-offcanvas .uk-panel-title{color:#ccc}.uk-offcanvas .uk-panel a:not([class]){color:#ccc}.uk-offcanvas .uk-panel a:not([class]):hover{color:#fff}.uk-offcanvas-bar:after{content:"";display:block;position:absolute;top:0;bottom:0;right:0;width:1px;background:rgba(0,0,0,.6);box-shadow:0 0 5px 2px rgba(0,0,0,.6)}.uk-offcanvas-bar-flip:after{right:auto;left:0;width:1px;background:rgba(0,0,0,.6);box-shadow:0 0 5px 2px rgba(0,0,0,.6)}.uk-switcher{margin:0;padding:0;list-style:none;touch-action:cross-slide-y pinch-zoom double-tap-zoom}.uk-switcher>:not(.uk-active){display:none}.uk-text-small{font-size:11px;line-height:16px}.uk-text-large{font-size:18px;line-height:24px;font-weight:400}.uk-text-bold{font-weight:700}.uk-text-muted{color:#999!important}.uk-text-primary{color:#2d7091!important}.uk-text-success{color:#659f13!important}.uk-text-warning{color:#e28327!important}.uk-text-danger{color:#d85030!important}.uk-text-contrast{color:#fff!important}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}@media (max-width:959px){.uk-text-center-medium{text-align:center!important}.uk-text-left-medium{text-align:left!important}}@media (max-width:767px){.uk-text-center-small{text-align:center!important}.uk-text-left-small{text-align:left!important}}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-text-break{word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;-moz-hyphens:auto;hyphens:auto}.uk-container{-moz-box-sizing:border-box;box-sizing:border-box;max-width:980px;padding:0 25px}@media (min-width:1220px){.uk-container{max-width:1200px;padding:0 35px}}.uk-container:after,.uk-container:before{content:"";display:table}.uk-container:after{clear:both}.uk-container-center{margin-left:auto;margin-right:auto}.uk-clearfix:before{content:"";display:table-cell}.uk-clearfix:after{content:"";display:table;clear:both}.uk-nbfc{overflow:hidden}.uk-nbfc-alt{display:table-cell;width:10000px}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}[class*=uk-align-]{display:block;margin-bottom:15px}.uk-align-left{margin-right:15px;float:left}.uk-align-right{margin-left:15px;float:right}@media (min-width:768px){.uk-align-medium-left{margin-right:15px;margin-bottom:15px;float:left}.uk-align-medium-right{margin-left:15px;margin-bottom:15px;float:right}}.uk-align-center{margin-left:auto;margin-right:auto}.uk-vertical-align{font-size:0}.uk-vertical-align:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-vertical-align-bottom,.uk-vertical-align-middle{display:inline-block;max-width:100%;font-size:1rem}.uk-vertical-align-middle{vertical-align:middle}.uk-vertical-align-bottom{vertical-align:bottom}[class*=uk-height]{-moz-box-sizing:border-box;box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{height:100vh;min-height:600px}.uk-responsive-height,.uk-responsive-width{-moz-box-sizing:border-box;box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto}.uk-margin{margin-bottom:15px}*+.uk-margin{margin-top:15px}.uk-margin-top{margin-top:15px!important}.uk-margin-bottom{margin-bottom:15px!important}.uk-margin-left{margin-left:15px!important}.uk-margin-right{margin-right:15px!important}.uk-margin-large{margin-bottom:50px}*+.uk-margin-large{margin-top:50px}.uk-margin-large-top{margin-top:50px!important}.uk-margin-large-bottom{margin-bottom:50px!important}.uk-margin-large-left{margin-left:50px!important}.uk-margin-large-right{margin-right:50px!important}.uk-margin-small{margin-bottom:5px}*+.uk-margin-small{margin-top:5px}.uk-margin-small-top{margin-top:5px!important}.uk-margin-small-bottom{margin-bottom:5px!important}.uk-margin-small-left{margin-left:5px!important}.uk-margin-small-right{margin-right:5px!important}.uk-margin-remove{margin:0!important}.uk-margin-top-remove{margin-top:0!important}.uk-margin-bottom-remove{margin-bottom:0!important}.uk-padding-remove{padding:0!important}.uk-padding-top-remove{padding-top:0!important}.uk-padding-bottom-remove{padding-bottom:0!important}.uk-padding-vertical-remove{padding-top:0!important;padding-bottom:0!important}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-heading-large{font-size:36px;line-height:42px}@media (min-width:768px){.uk-heading-large{font-size:52px;line-height:64px}}.uk-link-muted,.uk-link-muted a{color:#444}.uk-link-muted a:hover,.uk-link-muted:hover{color:#444}.uk-link-reset,.uk-link-reset a,.uk-link-reset a:focus,.uk-link-reset a:hover,.uk-link-reset:focus,.uk-link-reset:hover{color:inherit;text-decoration:none}.uk-scrollable-text{height:300px;overflow-y:scroll;-webkit-overflow-scrolling:touch;resize:both}.uk-scrollable-box{-moz-box-sizing:border-box;box-sizing:border-box;height:170px;padding:10px;border:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch;resize:both;border-radius:3px}.uk-scrollable-box>:last-child{margin-bottom:0}.uk-overflow-hidden{overflow:hidden}.uk-overflow-container{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-container>:last-child{margin-bottom:0}.uk-position-absolute,[class*=uk-position-top],[class*=uk-position-bottom]{position:absolute!important}.uk-position-top{top:0;width:100%}.uk-position-bottom{bottom:0;width:100%}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative!important}.uk-position-z-index{z-index:1}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important}@media (min-width:960px){.uk-visible-small{display:none!important}.uk-visible-medium{display:none!important}.uk-hidden-large{display:none!important}}@media (min-width:768px)and (max-width:959px){.uk-visible-small{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-medium{display:none!important}}@media (max-width:767px){.uk-visible-medium{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-small{display:none!important}}.uk-hidden{display:none!important;visibility:hidden!important}.uk-invisible{visibility:hidden!important}.uk-visible-hover:hover .uk-hidden,.uk-visible-hover:hover .uk-invisible{display:block!important;visibility:visible!important}.uk-visible-hover-inline:hover .uk-hidden,.uk-visible-hover-inline:hover .uk-invisible{display:inline-block!important;visibility:visible!important}.uk-notouch .uk-hidden-notouch,.uk-touch .uk-hidden-touch{display:none!important}.uk-flex{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-flex-inline{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex}.uk-flex-inline>*,.uk-flex>*{-ms-flex-negative:1}.uk-flex-top{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start}.uk-flex-middle{-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-flex-bottom{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end}.uk-flex-center{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-space-between{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-space-around{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}.uk-flex-row-reverse{-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.uk-flex-column{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-flex-column-reverse{-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.uk-flex-nowrap{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.uk-flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.uk-flex-wrap-top{-ms-flex-line-pack:start;-webkit-align-content:flex-start;align-content:flex-start}.uk-flex-wrap-middle{-ms-flex-line-pack:center;-webkit-align-content:center;align-content:center}.uk-flex-wrap-bottom{-ms-flex-line-pack:end;-webkit-align-content:flex-end;align-content:flex-end}.uk-flex-wrap-space-between{-ms-flex-line-pack:justify;-webkit-align-content:space-between;align-content:space-between}.uk-flex-wrap-space-around{-ms-flex-line-pack:distribute;-webkit-align-content:space-around;align-content:space-around}.uk-flex-order-first{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last{-ms-flex-order:99;-webkit-order:99;order:99}@media (min-width:480px){.uk-flex-order-first-small{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-small{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:768px){.uk-flex-order-first-medium{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-medium{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:960px){.uk-flex-order-first-large{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-large{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:1220px){.uk-flex-order-first-xlarge{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-xlarge{-ms-flex-order:99;-webkit-order:99;order:99}}.uk-flex-item-none{-ms-flex:none;-webkit-flex:none;flex:none}.uk-flex-item-auto{-ms-flex:auto;-webkit-flex:auto;flex:auto;-ms-flex-negative:1}.uk-flex-item-1{-ms-flex:1;-webkit-flex:1;flex:1}.uk-contrast{color:#fff}.uk-contrast .uk-link,.uk-contrast a:not([class]){color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-link:hover,.uk-contrast a:not([class]):hover{color:#fff;text-decoration:underline}.uk-contrast :not(pre)>code,.uk-contrast :not(pre)>kbd,.uk-contrast :not(pre)>samp{color:#fff;border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.1)}.uk-contrast em{color:#fff}.uk-contrast h1,.uk-contrast h2,.uk-contrast h3,.uk-contrast h4,.uk-contrast h5,.uk-contrast h6{color:#fff}.uk-contrast hr{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav li>a,.uk-contrast .uk-nav li>a:hover{text-decoration:none}.uk-contrast .uk-nav-side>li>a{color:#fff}.uk-contrast .uk-nav-side>li>a:focus,.uk-contrast .uk-nav-side>li>a:hover{background:rgba(255,255,255,.1);color:#fff;text-shadow:none}.uk-contrast .uk-nav-side>li.uk-active>a{background:#fff;color:#444;text-shadow:none}.uk-contrast .uk-nav-side .uk-nav-header{color:#fff}.uk-contrast .uk-nav-side .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav-side ul a{color:rgba(255,255,255,.7)}.uk-contrast .uk-nav-side ul a:hover{color:#fff}.uk-contrast .uk-subnav>*>a{color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-subnav>*>a:focus,.uk-contrast .uk-subnav>*>a:hover{color:#fff;text-decoration:none}.uk-contrast .uk-subnav>.uk-active>a{color:#fff}.uk-contrast .uk-subnav-line>:nth-child(n+2):before{border-left-color:rgba(255,255,255,.2)}.uk-contrast .uk-subnav-pill>*>a:focus,.uk-contrast .uk-subnav-pill>*>a:hover{background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-subnav-pill>.uk-active>a{background:#fff;color:#444}.uk-contrast .uk-list-line>li:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-form input:not([type]),.uk-contrast .uk-form input[type=text],.uk-contrast .uk-form input[type=password],.uk-contrast .uk-form input[type=email],.uk-contrast .uk-form input[type=url],.uk-contrast .uk-form input[type=search],.uk-contrast .uk-form input[type=tel],.uk-contrast .uk-form input[type=number],.uk-contrast .uk-form input[type=datetime],.uk-contrast .uk-form input[type=datetime-local],.uk-contrast .uk-form input[type=date],.uk-contrast .uk-form input[type=month],.uk-contrast .uk-form input[type=time],.uk-contrast .uk-form input[type=week],.uk-contrast .uk-form input[type=color],.uk-contrast .uk-form select,.uk-contrast .uk-form textarea{border-color:rgba(255,255,255,.8);background:rgba(255,255,255,.8);color:#444;background-clip:padding-box}.uk-contrast .uk-form input:not([type]):focus,.uk-contrast .uk-form input[type=text]:focus,.uk-contrast .uk-form input[type=password]:focus,.uk-contrast .uk-form input[type=email]:focus,.uk-contrast .uk-form input[type=url]:focus,.uk-contrast .uk-form input[type=search]:focus,.uk-contrast .uk-form input[type=tel]:focus,.uk-contrast .uk-form input[type=number]:focus,.uk-contrast .uk-form input[type=datetime]:focus,.uk-contrast .uk-form input[type=datetime-local]:focus,.uk-contrast .uk-form input[type=date]:focus,.uk-contrast .uk-form input[type=month]:focus,.uk-contrast .uk-form input[type=time]:focus,.uk-contrast .uk-form input[type=week]:focus,.uk-contrast .uk-form input[type=color]:focus,.uk-contrast .uk-form select:focus,.uk-contrast .uk-form textarea:focus{border-color:#fff;background:#fff;color:#444}.uk-contrast .uk-form :-ms-input-placeholder{color:rgba(68,68,68,.7)!important}.uk-contrast .uk-form ::-moz-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-form ::-webkit-input-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-button{color:#444;background:#fff;border-color:transparent}.uk-contrast .uk-button:focus,.uk-contrast .uk-button:hover{background-color:rgba(255,255,255,.8);color:#444;border-color:transparent}.uk-contrast .uk-button.uk-active,.uk-contrast .uk-button:active{background-color:rgba(255,255,255,.7);color:#444;box-shadow:none}.uk-contrast .uk-button-primary{background-color:#009dd8;color:#fff}.uk-contrast .uk-button-primary:focus,.uk-contrast .uk-button-primary:hover{background-color:#00aff2;color:#fff}.uk-contrast .uk-button-primary.uk-active,.uk-contrast .uk-button-primary:active{background-color:#008abf;color:#fff}.uk-contrast .uk-icon-hover{color:rgba(255,255,255,.7)}.uk-contrast .uk-icon-hover:hover{color:#fff}.uk-contrast .uk-icon-button{background:#fff;color:#444;border-color:transparent}.uk-contrast .uk-icon-button:focus,.uk-contrast .uk-icon-button:hover{background-color:rgba(255,255,255,.8);color:#444;border-color:transparent}.uk-contrast .uk-icon-button:active{background-color:rgba(255,255,255,.7);color:#444;box-shadow:none}.uk-contrast .uk-text-muted{color:rgba(255,255,255,.6)!important}.uk-contrast .uk-text-primary{color:#2d7091!important}@media print{*{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/media/uikit/css/uikit.min.css b/media/uikit/css/uikit.min.css deleted file mode 100644 index f6ef1f6..0000000 --- a/media/uikit/css/uikit.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -html{font:400 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;background:#fff;color:#444}body{margin:0}a{background:0 0}a:active,a:hover{outline:0}.uk-link,a{color:#07d;text-decoration:none;cursor:pointer}.uk-link:hover,a:hover{color:#059;text-decoration:underline}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-size:12px;font-family:Consolas,monospace,serif;color:#d05;white-space:nowrap}em{color:#d05}ins{background:#ffa;color:#444;text-decoration:none}mark{background:#ffa;color:#444}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{max-width:100%;height:auto;-moz-box-sizing:border-box;box-sizing:border-box;border:0;vertical-align:middle}.uk-img-preserve,.uk-img-preserve img{max-width:none}svg:not(:root){overflow:hidden}blockquote,figure{margin:0}address,blockquote,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 15px 0}*+address,*+blockquote,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:15px}h1,h2,h3,h4,h5,h6{margin:0 0 15px 0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;color:#444;text-transform:none}*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:25px}.uk-h1,h1{font-size:36px;line-height:42px}.uk-h2,h2{font-size:24px;line-height:30px}.uk-h3,h3{font-size:18px;line-height:24px}.uk-h4,h4{font-size:16px;line-height:22px}.uk-h5,h5{font-size:14px;line-height:20px}.uk-h6,h6{font-size:12px;line-height:18px}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;margin:15px 0;border:0;border-top:1px solid #ddd}address{font-style:normal}blockquote{padding-left:15px;border-left:5px solid #ddd;font-size:16px;line-height:22px;font-style:italic}pre{padding:10px;background:#f5f5f5;font:12px/18px Consolas,monospace,serif;color:#444;-moz-tab-size:4;tab-size:4;overflow:auto}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}article,aside,details,figcaption,figure,footer,header,main,nav,section,summary{display:block}progress{vertical-align:baseline}audio:not([controls]){display:none}[hidden],template{display:none}iframe{border:0}@media screen and (max-width:400px){@-ms-viewport{width:device-width}}.uk-grid{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid:after,.uk-grid:before{content:"";display:block;overflow:hidden}.uk-grid:after{clear:both}.uk-grid>*{-ms-flex:none;-webkit-flex:none;flex:none;margin:0;float:left}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-25px}.uk-grid>*{padding-left:25px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:25px}@media (min-width:1220px){.uk-grid{margin-left:-35px}.uk-grid>*{padding-left:35px}.uk-grid+.uk-grid,.uk-grid-margin,.uk-grid>*>.uk-panel+.uk-panel{margin-top:35px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid-collapse+.uk-grid-collapse,.uk-grid-collapse>*>.uk-panel+.uk-panel,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-small{margin-left:-10px}.uk-grid-small>*{padding-left:10px}.uk-grid-small+.uk-grid-small,.uk-grid-small>*>.uk-panel+.uk-panel,.uk-grid-small>.uk-grid-margin{margin-top:10px}.uk-grid-medium{margin-left:-25px}.uk-grid-medium>*{padding-left:25px}.uk-grid-medium+.uk-grid-medium,.uk-grid-medium>*>.uk-panel+.uk-panel,.uk-grid-medium>.uk-grid-margin{margin-top:25px}.uk-grid-divider:not(:empty){margin-left:-25px;margin-right:-25px}.uk-grid-divider>*{padding-left:25px;padding-right:25px}.uk-grid-divider>[class*=uk-width-9-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-1-]:not(.uk-width-1-1):nth-child(n+2),.uk-grid-divider>[class*=uk-width-2-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-3-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-4-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-5-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-6-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-7-]:nth-child(n+2),.uk-grid-divider>[class*=uk-width-8-]:nth-child(n+2){border-left:1px solid #ddd}@media (min-width:768px){.uk-grid-divider>[class*=uk-width-medium-]:not(.uk-width-medium-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:960px){.uk-grid-divider>[class*=uk-width-large-]:not(.uk-width-large-1-1):nth-child(n+2){border-left:1px solid #ddd}}@media (min-width:1220px){.uk-grid-divider:not(:empty){margin-left:-35px;margin-right:-35px}.uk-grid-divider>*{padding-left:35px;padding-right:35px}.uk-grid-divider:empty{margin-top:35px;margin-bottom:35px}}.uk-grid-divider:empty{margin-top:25px;margin-bottom:25px;border-top:1px solid #ddd}.uk-grid-match>*{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-grid-match>*>*{-ms-flex:none;-webkit-flex:none;flex:none;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}[class*=uk-grid-width]>*{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.uk-grid-width-1-2>*{width:50%}.uk-grid-width-1-3>*{width:33.333%}.uk-grid-width-1-4>*{width:25%}.uk-grid-width-1-5>*{width:20%}.uk-grid-width-1-6>*{width:16.666%}.uk-grid-width-1-10>*{width:10%}@media (min-width:480px){.uk-grid-width-small-1-2>*{width:50%}.uk-grid-width-small-1-3>*{width:33.333%}.uk-grid-width-small-1-4>*{width:25%}.uk-grid-width-small-1-5>*{width:20%}.uk-grid-width-small-1-6>*{width:16.666%}.uk-grid-width-small-1-10>*{width:10%}}@media (min-width:768px){.uk-grid-width-medium-1-2>*{width:50%}.uk-grid-width-medium-1-3>*{width:33.333%}.uk-grid-width-medium-1-4>*{width:25%}.uk-grid-width-medium-1-5>*{width:20%}.uk-grid-width-medium-1-6>*{width:16.666%}.uk-grid-width-medium-1-10>*{width:10%}}@media (min-width:960px){.uk-grid-width-large-1-2>*{width:50%}.uk-grid-width-large-1-3>*{width:33.333%}.uk-grid-width-large-1-4>*{width:25%}.uk-grid-width-large-1-5>*{width:20%}.uk-grid-width-large-1-6>*{width:16.666%}.uk-grid-width-large-1-10>*{width:10%}}@media (min-width:1220px){.uk-grid-width-xlarge-1-2>*{width:50%}.uk-grid-width-xlarge-1-3>*{width:33.333%}.uk-grid-width-xlarge-1-4>*{width:25%}.uk-grid-width-xlarge-1-5>*{width:20%}.uk-grid-width-xlarge-1-6>*{width:16.666%}.uk-grid-width-xlarge-1-10>*{width:10%}}[class*=uk-width]{-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.uk-width-1-1{width:100%}.uk-width-1-2,.uk-width-2-4,.uk-width-3-6,.uk-width-5-10{width:50%}.uk-width-1-3,.uk-width-2-6{width:33.333%}.uk-width-2-3,.uk-width-4-6{width:66.666%}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5,.uk-width-2-10{width:20%}.uk-width-2-5,.uk-width-4-10{width:40%}.uk-width-3-5,.uk-width-6-10{width:60%}.uk-width-4-5,.uk-width-8-10{width:80%}.uk-width-1-6{width:16.666%}.uk-width-5-6{width:83.333%}.uk-width-1-10{width:10%}.uk-width-3-10{width:30%}.uk-width-7-10{width:70%}.uk-width-9-10{width:90%}@media (min-width:480px){.uk-width-small-1-1{width:100%}.uk-width-small-1-2,.uk-width-small-2-4,.uk-width-small-3-6,.uk-width-small-5-10{width:50%}.uk-width-small-1-3,.uk-width-small-2-6{width:33.333%}.uk-width-small-2-3,.uk-width-small-4-6{width:66.666%}.uk-width-small-1-4{width:25%}.uk-width-small-3-4{width:75%}.uk-width-small-1-5,.uk-width-small-2-10{width:20%}.uk-width-small-2-5,.uk-width-small-4-10{width:40%}.uk-width-small-3-5,.uk-width-small-6-10{width:60%}.uk-width-small-4-5,.uk-width-small-8-10{width:80%}.uk-width-small-1-6{width:16.666%}.uk-width-small-5-6{width:83.333%}.uk-width-small-1-10{width:10%}.uk-width-small-3-10{width:30%}.uk-width-small-7-10{width:70%}.uk-width-small-9-10{width:90%}}@media (min-width:768px){.uk-width-medium-1-1{width:100%}.uk-width-medium-1-2,.uk-width-medium-2-4,.uk-width-medium-3-6,.uk-width-medium-5-10{width:50%}.uk-width-medium-1-3,.uk-width-medium-2-6{width:33.333%}.uk-width-medium-2-3,.uk-width-medium-4-6{width:66.666%}.uk-width-medium-1-4{width:25%}.uk-width-medium-3-4{width:75%}.uk-width-medium-1-5,.uk-width-medium-2-10{width:20%}.uk-width-medium-2-5,.uk-width-medium-4-10{width:40%}.uk-width-medium-3-5,.uk-width-medium-6-10{width:60%}.uk-width-medium-4-5,.uk-width-medium-8-10{width:80%}.uk-width-medium-1-6{width:16.666%}.uk-width-medium-5-6{width:83.333%}.uk-width-medium-1-10{width:10%}.uk-width-medium-3-10{width:30%}.uk-width-medium-7-10{width:70%}.uk-width-medium-9-10{width:90%}}@media (min-width:960px){.uk-width-large-1-1{width:100%}.uk-width-large-1-2,.uk-width-large-2-4,.uk-width-large-3-6,.uk-width-large-5-10{width:50%}.uk-width-large-1-3,.uk-width-large-2-6{width:33.333%}.uk-width-large-2-3,.uk-width-large-4-6{width:66.666%}.uk-width-large-1-4{width:25%}.uk-width-large-3-4{width:75%}.uk-width-large-1-5,.uk-width-large-2-10{width:20%}.uk-width-large-2-5,.uk-width-large-4-10{width:40%}.uk-width-large-3-5,.uk-width-large-6-10{width:60%}.uk-width-large-4-5,.uk-width-large-8-10{width:80%}.uk-width-large-1-6{width:16.666%}.uk-width-large-5-6{width:83.333%}.uk-width-large-1-10{width:10%}.uk-width-large-3-10{width:30%}.uk-width-large-7-10{width:70%}.uk-width-large-9-10{width:90%}}@media (min-width:768px){[class*=uk-push-],[class*=uk-pull-]{position:relative}.uk-push-1-2,.uk-push-2-4,.uk-push-3-6,.uk-push-5-10{left:50%}.uk-push-1-3,.uk-push-2-6{left:33.333%}.uk-push-2-3,.uk-push-4-6{left:66.666%}.uk-push-1-4{left:25%}.uk-push-3-4{left:75%}.uk-push-1-5,.uk-push-2-10{left:20%}.uk-push-2-5,.uk-push-4-10{left:40%}.uk-push-3-5,.uk-push-6-10{left:60%}.uk-push-4-5,.uk-push-8-10{left:80%}.uk-push-1-6{left:16.666%}.uk-push-5-6{left:83.333%}.uk-push-1-10{left:10%}.uk-push-3-10{left:30%}.uk-push-7-10{left:70%}.uk-push-9-10{left:90%}.uk-pull-1-2,.uk-pull-2-4,.uk-pull-3-6,.uk-pull-5-10{left:-50%}.uk-pull-1-3,.uk-pull-2-6{left:-33.333%}.uk-pull-2-3,.uk-pull-4-6{left:-66.666%}.uk-pull-1-4{left:-25%}.uk-pull-3-4{left:-75%}.uk-pull-1-5,.uk-pull-2-10{left:-20%}.uk-pull-2-5,.uk-pull-4-10{left:-40%}.uk-pull-3-5,.uk-pull-6-10{left:-60%}.uk-pull-4-5,.uk-pull-8-10{left:-80%}.uk-pull-1-6{left:-16.666%}.uk-pull-5-6{left:-83.333%}.uk-pull-1-10{left:-10%}.uk-pull-3-10{left:-30%}.uk-pull-7-10{left:-70%}.uk-pull-9-10{left:-90%}}.uk-panel{display:block;position:relative}.uk-panel,.uk-panel:hover{text-decoration:none}.uk-panel:after,.uk-panel:before{content:"";display:table}.uk-panel:after{clear:both}.uk-panel>:not(.uk-panel-title):last-child{margin-bottom:0}.uk-panel-title{margin-top:0;margin-bottom:15px;font-size:18px;line-height:24px;font-weight:400;text-transform:none;color:#444}.uk-panel-badge{position:absolute;top:0;right:0;z-index:1}.uk-panel-teaser{margin-bottom:15px}.uk-panel-box{padding:15px;background:#f5f5f5;color:#444}.uk-panel-box-hover:hover{color:#444}.uk-panel-box .uk-panel-title{color:#444}.uk-panel-box .uk-panel-badge{top:10px;right:10px}.uk-panel-box .uk-panel-teaser{margin-top:-15px;margin-left:-15px;margin-right:-15px}.uk-panel-box>.uk-nav-side{margin:0 -15px}.uk-panel-box-primary{background-color:#ebf7fd;color:#2d7091}.uk-panel-box-primary-hover:hover{color:#2d7091}.uk-panel-box-primary .uk-panel-title{color:#2d7091}.uk-panel-box-secondary{background-color:#eee;color:#444}.uk-panel-box-secondary-hover:hover{color:#444}.uk-panel-box-secondary .uk-panel-title{color:#444}.uk-panel-hover{padding:15px;color:#444}.uk-panel-hover:hover{background:#f5f5f5;color:#444}.uk-panel-hover .uk-panel-badge{top:10px;right:10px}.uk-panel-hover .uk-panel-teaser{margin-top:-15px;margin-left:-15px;margin-right:-15px}.uk-panel-header .uk-panel-title{padding-bottom:10px;border-bottom:1px solid #ddd;color:#444}.uk-panel-space{padding:30px}.uk-panel-space .uk-panel-badge{top:30px;right:30px}.uk-panel+.uk-panel-divider{margin-top:50px!important}.uk-panel+.uk-panel-divider:before{content:"";display:block;position:absolute;top:-25px;left:0;right:0;border-top:1px solid #ddd}@media (min-width:1220px){.uk-panel+.uk-panel-divider{margin-top:70px!important}.uk-panel+.uk-panel-divider:before{top:-35px}}.uk-block{position:relative;-moz-box-sizing:border-box;box-sizing:border-box;padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block{padding-top:50px;padding-bottom:50px}}.uk-block:after,.uk-block:before{content:"";display:table}.uk-block:after{clear:both}.uk-block>:last-child{margin-bottom:0}.uk-block-large{padding-top:20px;padding-bottom:20px}@media (min-width:768px){.uk-block-large{padding-top:50px;padding-bottom:50px}}@media (min-width:960px){.uk-block-large{padding-top:100px;padding-bottom:100px}}.uk-block-default{background:#fff}.uk-block-muted{background:#f9f9f9}.uk-block-primary{background:#00a8e6}.uk-block-secondary{background:#222}.uk-block-default+.uk-block-default,.uk-block-muted+.uk-block-muted,.uk-block-primary+.uk-block-primary,.uk-block-secondary+.uk-block-secondary{padding-top:0}.uk-article:after,.uk-article:before{content:"";display:table}.uk-article:after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:25px}.uk-article-title{font-size:36px;line-height:42px;font-weight:400;text-transform:none}.uk-article-title a{color:inherit;text-decoration:none}.uk-article-meta{font-size:12px;line-height:18px;color:#999}.uk-article-lead{color:#444;font-size:18px;line-height:24px;font-weight:400}.uk-article-divider{margin-bottom:25px;border-color:#ddd}*+.uk-article-divider{margin-top:25px}.uk-comment-header{margin-bottom:15px}.uk-comment-header:after,.uk-comment-header:before{content:"";display:table}.uk-comment-header:after{clear:both}.uk-comment-avatar{margin-right:15px;float:left}.uk-comment-title{margin:5px 0 0 0;font-size:16px;line-height:22px}.uk-comment-meta{margin:2px 0 0 0;font-size:11px;line-height:16px;color:#999}.uk-comment-body>:last-child{margin-bottom:0}.uk-comment-list{padding:0;list-style:none}.uk-comment-list .uk-comment+ul{margin:15px 0 0 0;list-style:none}.uk-comment-list .uk-comment+ul>li:nth-child(n+2),.uk-comment-list>li:nth-child(n+2){margin-top:15px}@media (min-width:768px){.uk-comment-list .uk-comment+ul{padding-left:100px}}.uk-cover-background{background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.uk-cover{overflow:hidden}.uk-cover-object{width:auto;height:auto;min-width:100%;min-height:100%;max-width:none;position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}[data-uk-cover]{position:relative;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav>li>a{padding:5px 15px}.uk-nav ul{padding-left:15px}.uk-nav ul a{padding:2px 0}.uk-nav li>a>div{font-size:12px;line-height:18px}.uk-nav-header{padding:5px 15px;text-transform:uppercase;font-weight:700;font-size:12px}.uk-nav-header:not(:first-child){margin-top:15px}.uk-nav-divider{margin:9px 15px}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-parent-icon>.uk-parent>a:after{content:"\f104";width:20px;margin-right:-10px;float:right;font-family:FontAwesome;text-align:center}.uk-nav-parent-icon>.uk-parent.uk-open>a:after{content:"\f107"}.uk-nav-side>li>a{color:#444}.uk-nav-side>li>a:focus,.uk-nav-side>li>a:hover{background:rgba(0,0,0,.05);color:#444;outline:0}.uk-nav-side>li.uk-active>a{background:#00a8e6;color:#fff}.uk-nav-side .uk-nav-header{color:#444}.uk-nav-side .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-side ul a{color:#07d}.uk-nav-side ul a:hover{color:#059}.uk-nav-dropdown>li>a{color:#444}.uk-nav-dropdown>li>a:focus,.uk-nav-dropdown>li>a:hover{background:#00a8e6;color:#fff;outline:0}.uk-nav-dropdown .uk-nav-header{color:#999}.uk-nav-dropdown .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-dropdown ul a{color:#07d}.uk-nav-dropdown ul a:hover{color:#059}.uk-nav-navbar>li>a{color:#444}.uk-nav-navbar>li>a:focus,.uk-nav-navbar>li>a:hover{background:#00a8e6;color:#fff;outline:0}.uk-nav-navbar .uk-nav-header{color:#999}.uk-nav-navbar .uk-nav-divider{border-top:1px solid #ddd}.uk-nav-navbar ul a{color:#07d}.uk-nav-navbar ul a:hover{color:#059}.uk-nav-offcanvas>li>a{color:#ccc;padding:10px 15px}.uk-nav-offcanvas>.uk-open>a,html:not(.uk-touch) .uk-nav-offcanvas>li>a:focus,html:not(.uk-touch) .uk-nav-offcanvas>li>a:hover{background:#404040;color:#fff;outline:0}html .uk-nav.uk-nav-offcanvas>li.uk-active>a{background:#1a1a1a;color:#fff}.uk-nav-offcanvas .uk-nav-header{color:#777}.uk-nav-offcanvas .uk-nav-divider{border-top:1px solid #1a1a1a}.uk-nav-offcanvas ul a{color:#ccc}html:not(.uk-touch) .uk-nav-offcanvas ul a:hover{color:#fff}.uk-navbar{background:#eee;color:#444}.uk-navbar:after,.uk-navbar:before{content:"";display:table}.uk-navbar:after{clear:both}.uk-navbar-nav{margin:0;padding:0;list-style:none;float:left}.uk-navbar-nav>li{float:left;position:relative}.uk-navbar-nav>li>a{display:block;-moz-box-sizing:border-box;box-sizing:border-box;text-decoration:none;height:40px;padding:0 15px;line-height:40px;color:#444;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400}.uk-navbar-nav>li>a[href='#']{cursor:text}.uk-navbar-nav>li.uk-open>a,.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus{background-color:#f5f5f5;color:#444;outline:0}.uk-navbar-nav>li>a:active{background-color:#ddd;color:#444}.uk-navbar-nav>li.uk-active>a{background-color:#f5f5f5;color:#444}.uk-navbar-nav .uk-navbar-nav-subtitle{line-height:28px}.uk-navbar-nav-subtitle>div{margin-top:-6px;font-size:10px;line-height:12px}.uk-navbar-brand,.uk-navbar-content,.uk-navbar-toggle{-moz-box-sizing:border-box;box-sizing:border-box;display:block;height:40px;padding:0 15px;float:left}.uk-navbar-brand:before,.uk-navbar-content:before,.uk-navbar-toggle:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-navbar-content+.uk-navbar-content:not(.uk-navbar-center){padding-left:0}.uk-navbar-content>a:not([class]){color:#07d}.uk-navbar-content>a:not([class]):hover{color:#059}.uk-navbar-brand{font-size:18px;color:#444;text-decoration:none}.uk-navbar-brand:focus,.uk-navbar-brand:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle{font-size:18px;color:#444;text-decoration:none}.uk-navbar-toggle:focus,.uk-navbar-toggle:hover{color:#444;text-decoration:none;outline:0}.uk-navbar-toggle:after{content:"\f0c9";font-family:FontAwesome;vertical-align:middle}.uk-navbar-toggle-alt:after{content:"\f002"}.uk-navbar-center{float:none;text-align:center;max-width:50%;margin-left:auto;margin-right:auto}.uk-navbar-flip{float:right}.uk-subnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-subnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px;position:relative}.uk-subnav:after,.uk-subnav:before{content:"";display:block;overflow:hidden}.uk-subnav:after{clear:both}.uk-subnav>*{float:left}.uk-subnav>*>*{display:inline-block;color:#444}.uk-subnav>*>:focus,.uk-subnav>*>:hover{color:#07d;text-decoration:none}.uk-subnav>.uk-active>*{color:#07d}.uk-subnav-line>:before{content:"";display:inline-block;height:10px;vertical-align:middle}.uk-subnav-line>:nth-child(n+2):before{margin-right:10px;border-left:1px solid #ddd}.uk-subnav-pill>*>*{padding:3px 9px}.uk-subnav-pill>*>:focus,.uk-subnav-pill>*>:hover{background:#eee;color:#444;text-decoration:none;outline:0}.uk-subnav-pill>.uk-active>*{background:#00a8e6;color:#fff}.uk-subnav>.uk-disabled>*{background:0 0;color:#999;text-decoration:none;cursor:text}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>li{font-size:1rem;vertical-align:top}.uk-breadcrumb>li,.uk-breadcrumb>li>a,.uk-breadcrumb>li>span{display:inline-block}.uk-breadcrumb>li:nth-child(n+2):before{content:"/";display:inline-block;margin:0 8px}.uk-breadcrumb>li:not(.uk-active)>span{color:#999}.uk-pagination{padding:0;list-style:none;text-align:center;font-size:0}.uk-pagination:after,.uk-pagination:before{content:"";display:table}.uk-pagination:after{clear:both}.uk-pagination>li{display:inline-block;font-size:1rem;vertical-align:top}.uk-pagination>li:nth-child(n+2){margin-left:5px}.uk-pagination>li>a,.uk-pagination>li>span{display:inline-block;min-width:16px;padding:3px 5px;line-height:20px;text-decoration:none;-moz-box-sizing:content-box;box-sizing:content-box;text-align:center}.uk-pagination>li>a{background:#eee;color:#444}.uk-pagination>li>a:focus,.uk-pagination>li>a:hover{background-color:#f5f5f5;color:#444;outline:0}.uk-pagination>li>a:active{background-color:#ddd;color:#444}.uk-pagination>.uk-active>span{background:#00a8e6;color:#fff}.uk-pagination>.uk-disabled>span{background-color:#f5f5f5;color:#999}.uk-pagination-previous{float:left}.uk-pagination-next{float:right}.uk-pagination-left{text-align:left}.uk-pagination-right{text-align:right}.uk-tab{margin:0;padding:0;list-style:none;border-bottom:1px solid #ddd}.uk-tab:after,.uk-tab:before{content:"";display:table}.uk-tab:after{clear:both}.uk-tab>li{margin-bottom:-1px;float:left;position:relative}.uk-tab>li>a{display:block;padding:8px 12px 8px 12px;border:1px solid transparent;border-bottom-width:0;color:#07d;text-decoration:none}.uk-tab>li:nth-child(n+2)>a{margin-left:5px}.uk-tab>li.uk-open>a,.uk-tab>li>a:focus,.uk-tab>li>a:hover{border-color:#f5f5f5;background:#f5f5f5;color:#059;outline:0}.uk-tab>li.uk-open:not(.uk-active)>a,.uk-tab>li:not(.uk-active)>a:focus,.uk-tab>li:not(.uk-active)>a:hover{margin-bottom:1px;padding-bottom:7px}.uk-tab>li.uk-active>a{border-color:#ddd;border-bottom-color:transparent;background:#fff;color:#444}.uk-tab>li.uk-disabled>a{color:#999;cursor:text}.uk-tab>li.uk-disabled.uk-active>a,.uk-tab>li.uk-disabled>a:focus,.uk-tab>li.uk-disabled>a:hover{background:0 0;border-color:transparent}.uk-tab-flip>li{float:right}.uk-tab-flip>li:nth-child(n+2)>a{margin-left:0;margin-right:5px}.uk-tab>li.uk-tab-responsive>a{margin-left:0;margin-right:0}.uk-tab-responsive>a:before{content:"\f0c9\00a0";font-family:FontAwesome}.uk-tab-center{border-bottom:1px solid #ddd}.uk-tab-center-bottom{border-bottom:none;border-top:1px solid #ddd}.uk-tab-center:after,.uk-tab-center:before{content:"";display:table}.uk-tab-center:after{clear:both}.uk-tab-center .uk-tab{position:relative;right:50%;border:none;float:right}.uk-tab-center .uk-tab>li{position:relative;right:-50%}.uk-tab-center .uk-tab>li>a{text-align:center}.uk-tab-bottom{border-top:1px solid #ddd;border-bottom:none}.uk-tab-bottom>li{margin-top:-1px;margin-bottom:0}.uk-tab-bottom>li>a{padding-top:8px;padding-bottom:8px;border-bottom-width:1px;border-top-width:0}.uk-tab-bottom>li.uk-open:not(.uk-active)>a,.uk-tab-bottom>li:not(.uk-active)>a:focus,.uk-tab-bottom>li:not(.uk-active)>a:hover{margin-bottom:0;margin-top:1px;padding-bottom:8px;padding-top:7px}.uk-tab-bottom>li.uk-active>a{border-top-color:transparent;border-bottom-color:#ddd}.uk-tab-grid{margin-left:-5px;border-bottom:none;position:relative;z-index:0}.uk-tab-grid:before{display:block;position:absolute;left:5px;right:0;bottom:-1px;border-top:1px solid #ddd;z-index:-1}.uk-tab-grid>li:first-child>a{margin-left:5px}.uk-tab-grid>li>a{text-align:center}.uk-tab-grid.uk-tab-bottom{border-top:none}.uk-tab-grid.uk-tab-bottom:before{top:-1px;bottom:auto}@media (min-width:768px){.uk-tab-left,.uk-tab-right{border-bottom:none}.uk-tab-left>li,.uk-tab-right>li{margin-bottom:0;float:none}.uk-tab-left>li>a,.uk-tab-right>li>a{padding-top:8px;padding-bottom:8px}.uk-tab-left>li:nth-child(n+2)>a,.uk-tab-right>li:nth-child(n+2)>a{margin-left:0;margin-top:5px}.uk-tab-left>li.uk-active>a,.uk-tab-right>li.uk-active>a{border-color:#ddd}.uk-tab-left{border-right:1px solid #ddd}.uk-tab-left>li{margin-right:-1px}.uk-tab-left>li>a{border-bottom-width:1px;border-right-width:0}.uk-tab-left>li:not(.uk-active)>a:focus,.uk-tab-left>li:not(.uk-active)>a:hover{margin-bottom:0;margin-right:1px;padding-bottom:8px;padding-right:11px}.uk-tab-left>li.uk-active>a{border-right-color:transparent}.uk-tab-right{border-left:1px solid #ddd}.uk-tab-right>li{margin-left:-1px}.uk-tab-right>li>a{border-bottom-width:1px;border-left-width:0}.uk-tab-right>li:not(.uk-active)>a:focus,.uk-tab-right>li:not(.uk-active)>a:hover{margin-bottom:0;margin-left:1px;padding-bottom:8px;padding-left:11px}.uk-tab-right>li.uk-active>a{border-left-color:transparent}}.uk-thumbnav{display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-left:-10px;margin-top:-10px;padding:0;list-style:none}.uk-thumbnav>*{-ms-flex:none;-webkit-flex:none;flex:none;padding-left:10px;margin-top:10px}.uk-thumbnav:after,.uk-thumbnav:before{content:"";display:block;overflow:hidden}.uk-thumbnav:after{clear:both}.uk-thumbnav>*{float:left}.uk-thumbnav>*>*{display:block;background:#fff}.uk-thumbnav>*>*>img{opacity:.7;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.uk-thumbnav>*>:focus>img,.uk-thumbnav>*>:hover>img{opacity:1}.uk-thumbnav>.uk-active>*>img{opacity:1}.uk-list{padding:0;list-style:none}.uk-list>li:after,.uk-list>li:before{content:"";display:table}.uk-list>li:after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:20px;list-style:none}.uk-list-line>li:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-list-striped>li{padding:5px 5px}.uk-list-striped>li:nth-of-type(odd){background:#f5f5f5}.uk-list-space>li:nth-child(n+2){margin-top:10px}@media (min-width:768px){.uk-description-list-horizontal{overflow:hidden}.uk-description-list-horizontal>dt{width:160px;float:left;clear:both;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-description-list-horizontal>dd{margin-left:180px}}.uk-description-list-line>dt{font-weight:400}.uk-description-list-line>dt:nth-child(n+2){margin-top:5px;padding-top:5px;border-top:1px solid #ddd}.uk-description-list-line>dd{color:#999}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:15px}*+.uk-table{margin-top:15px}.uk-table td,.uk-table th{padding:8px 8px}.uk-table th{text-align:left}.uk-table td{vertical-align:top}.uk-table thead th{vertical-align:bottom}.uk-table caption,.uk-table tfoot{font-size:12px;font-style:italic}.uk-table caption{text-align:left;color:#999}.uk-table tbody tr.uk-active{background:#eee}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-striped tbody tr:nth-of-type(odd){background:#f5f5f5}.uk-table-condensed td{padding:4px 8px}.uk-table-hover tbody tr:hover{background:#eee}.uk-form input,.uk-form select,.uk-form textarea{-moz-box-sizing:border-box;box-sizing:border-box;margin:0;border-radius:0;font:inherit;color:inherit}.uk-form select{text-transform:none}.uk-form optgroup{font:inherit;font-weight:700}.uk-form input::-moz-focus-inner{border:0;padding:0}.uk-form input[type=checkbox],.uk-form input[type=radio]{padding:0}.uk-form input[type=checkbox]:not(:disabled),.uk-form input[type=radio]:not(:disabled){cursor:pointer}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form textarea{-webkit-appearance:none}.uk-form input[type=search]::-webkit-search-cancel-button,.uk-form input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-form input[type=number]::-webkit-inner-spin-button,.uk-form input[type=number]::-webkit-outer-spin-button{height:auto}.uk-form fieldset{border:none;margin:0;padding:0}.uk-form textarea{overflow:auto;vertical-align:top}.uk-form ::-moz-placeholder{opacity:1}.uk-form :invalid{box-shadow:none}.uk-form input:not([type=radio]):not([type=checkbox]),.uk-form select{vertical-align:middle}.uk-form>:last-child{margin-bottom:0}.uk-form input:not([type]),.uk-form input[type=text],.uk-form input[type=password],.uk-form input[type=email],.uk-form input[type=url],.uk-form input[type=search],.uk-form input[type=tel],.uk-form input[type=number],.uk-form input[type=datetime],.uk-form input[type=datetime-local],.uk-form input[type=date],.uk-form input[type=month],.uk-form input[type=time],.uk-form input[type=week],.uk-form input[type=color],.uk-form select,.uk-form textarea{height:30px;max-width:100%;padding:4px 6px;border:1px solid #ddd;background:#fff;color:#444;-webkit-transition:all linear .2s;transition:all linear .2s}.uk-form input:not([type]):focus,.uk-form input[type=text]:focus,.uk-form input[type=password]:focus,.uk-form input[type=email]:focus,.uk-form input[type=url]:focus,.uk-form input[type=search]:focus,.uk-form input[type=tel]:focus,.uk-form input[type=number]:focus,.uk-form input[type=datetime]:focus,.uk-form input[type=datetime-local]:focus,.uk-form input[type=date]:focus,.uk-form input[type=month]:focus,.uk-form input[type=time]:focus,.uk-form input[type=week]:focus,.uk-form input[type=color]:focus,.uk-form select:focus,.uk-form textarea:focus{border-color:#99baca;outline:0;background:#f5fbfe;color:#444}.uk-form input:not([type]):disabled,.uk-form input[type=text]:disabled,.uk-form input[type=password]:disabled,.uk-form input[type=email]:disabled,.uk-form input[type=url]:disabled,.uk-form input[type=search]:disabled,.uk-form input[type=tel]:disabled,.uk-form input[type=number]:disabled,.uk-form input[type=datetime]:disabled,.uk-form input[type=datetime-local]:disabled,.uk-form input[type=date]:disabled,.uk-form input[type=month]:disabled,.uk-form input[type=time]:disabled,.uk-form input[type=week]:disabled,.uk-form input[type=color]:disabled,.uk-form select:disabled,.uk-form textarea:disabled{border-color:#ddd;background-color:#f5f5f5;color:#999}.uk-form :-ms-input-placeholder{color:#999!important}.uk-form ::-moz-placeholder{color:#999}.uk-form ::-webkit-input-placeholder{color:#999}.uk-form :disabled:-ms-input-placeholder{color:#999!important}.uk-form :disabled::-moz-placeholder{color:#999}.uk-form :disabled::-webkit-input-placeholder{color:#999}.uk-form legend{width:100%;border:0;padding:0;padding-bottom:15px;font-size:18px;line-height:30px}.uk-form legend:after{content:"";display:block;border-bottom:1px solid #ddd;width:100%}input:not([type]).uk-form-small,input[type].uk-form-small,select.uk-form-small,textarea.uk-form-small{height:25px;padding:3px 3px;font-size:12px}input:not([type]).uk-form-large,input[type].uk-form-large,select.uk-form-large,textarea.uk-form-large{height:40px;padding:8px 6px;font-size:16px}.uk-form select[multiple],.uk-form select[size],.uk-form textarea{height:auto}.uk-form-danger{border-color:#dc8d99!important;background:#fff7f8!important;color:#d85030!important}.uk-form-success{border-color:#8ec73b!important;background:#fafff2!important;color:#659f13!important}.uk-form-blank{border-color:transparent!important;border-style:dashed!important;background:0 0!important}.uk-form-blank:focus{border-color:#ddd!important}input.uk-form-width-mini{width:40px}select.uk-form-width-mini{width:65px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-form-row:after,.uk-form-row:before{content:"";display:table}.uk-form-row:after{clear:both}.uk-form-row+.uk-form-row{margin-top:15px}.uk-form-help-inline{display:inline-block;margin:0 0 0 10px}.uk-form-help-block{margin:5px 0 0 0}.uk-form-controls>:first-child{margin-top:0}.uk-form-controls>:last-child{margin-bottom:0}.uk-form-controls-condensed{margin:5px 0}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px;font-weight:700}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px;font-weight:700}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:5px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:5px}}.uk-form-icon{display:inline-block;position:relative;max-width:100%}.uk-form-icon>[class*=uk-icon-]{position:absolute;top:50%;width:30px;margin-top:-7px;font-size:14px;color:#999;text-align:center;pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)>input{padding-left:30px!important}.uk-form-icon-flip>[class*=uk-icon-]{right:0}.uk-form-icon-flip>input{padding-right:30px!important}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:#444;text-transform:none;display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 12px;background:#eee;vertical-align:middle;line-height:30px;min-height:30px;font-size:1rem;text-decoration:none;text-align:center}.uk-button:not(:disabled){cursor:pointer}.uk-button:focus,.uk-button:hover{background-color:#f5f5f5;color:#444;outline:0;text-decoration:none}.uk-button.uk-active,.uk-button:active{background-color:#ddd;color:#444}.uk-button-primary{background-color:#00a8e6;color:#fff}.uk-button-primary:focus,.uk-button-primary:hover{background-color:#35b3ee;color:#fff}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#0091ca;color:#fff}.uk-button-success{background-color:#8cc14c;color:#fff}.uk-button-success:focus,.uk-button-success:hover{background-color:#8ec73b;color:#fff}.uk-button-success.uk-active,.uk-button-success:active{background-color:#72ae41;color:#fff}.uk-button-danger{background-color:#da314b;color:#fff}.uk-button-danger:focus,.uk-button-danger:hover{background-color:#e4354f;color:#fff}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#c91032;color:#fff}.uk-button:disabled{background-color:#f5f5f5;color:#999}.uk-button-link,.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:disabled,.uk-button-link:focus,.uk-button-link:hover{border-color:transparent;background:0 0}.uk-button-link{color:#07d}.uk-button-link.uk-active,.uk-button-link:active,.uk-button-link:focus,.uk-button-link:hover{color:#059;text-decoration:underline}.uk-button-link:disabled{color:#999}.uk-button-link:focus{outline:1px dotted}.uk-button-mini{min-height:20px;padding:0 6px;line-height:20px;font-size:11px}.uk-button-small{min-height:25px;padding:0 10px;line-height:25px;font-size:12px}.uk-button-large{min-height:40px;padding:0 15px;line-height:40px;font-size:16px}.uk-button-group{display:inline-block;vertical-align:middle;position:relative;font-size:0;white-space:nowrap}.uk-button-group>*{display:inline-block}.uk-button-group .uk-button{vertical-align:top}.uk-button-dropdown{display:inline-block;vertical-align:middle;position:relative}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot);src:url(../fonts/fontawesome-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2)format('woff2'),url(../fonts/fontawesome-webfont.woff)format("woff"),url(../fonts/fontawesome-webfont.ttf)format("truetype");font-weight:400;font-style:normal}[class*=uk-icon-]{font-family:FontAwesome;display:inline-block;font-weight:400;font-style:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=uk-icon-],[class*=uk-icon-]:focus,[class*=uk-icon-]:hover{text-decoration:none}.uk-icon-small{font-size:150%;vertical-align:-10%}.uk-icon-medium{font-size:200%;vertical-align:-16%}.uk-icon-large{font-size:250%;vertical-align:-22%}.uk-icon-justify{width:1em;text-align:center}.uk-icon-spin{display:inline-block;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-icon-hover{color:#999}.uk-icon-hover:hover{color:#444}.uk-icon-button{-moz-box-sizing:border-box;box-sizing:border-box;display:inline-block;width:35px;height:35px;border-radius:100%;background:#eee;line-height:35px;color:#444;font-size:18px;text-align:center}.uk-icon-button:focus,.uk-icon-button:hover{background-color:#f5f5f5;color:#444;outline:0}.uk-icon-button:active{background-color:#ddd;color:#444}.uk-icon-glass:before{content:"\f000"}.uk-icon-music:before{content:"\f001"}.uk-icon-search:before{content:"\f002"}.uk-icon-envelope-o:before{content:"\f003"}.uk-icon-heart:before{content:"\f004"}.uk-icon-star:before{content:"\f005"}.uk-icon-star-o:before{content:"\f006"}.uk-icon-user:before{content:"\f007"}.uk-icon-film:before{content:"\f008"}.uk-icon-th-large:before{content:"\f009"}.uk-icon-th:before{content:"\f00a"}.uk-icon-th-list:before{content:"\f00b"}.uk-icon-check:before{content:"\f00c"}.uk-icon-close:before,.uk-icon-remove:before,.uk-icon-times:before{content:"\f00d"}.uk-icon-search-plus:before{content:"\f00e"}.uk-icon-search-minus:before{content:"\f010"}.uk-icon-power-off:before{content:"\f011"}.uk-icon-signal:before{content:"\f012"}.uk-icon-cog:before,.uk-icon-gear:before{content:"\f013"}.uk-icon-trash-o:before{content:"\f014"}.uk-icon-home:before{content:"\f015"}.uk-icon-file-o:before{content:"\f016"}.uk-icon-clock-o:before{content:"\f017"}.uk-icon-road:before{content:"\f018"}.uk-icon-download:before{content:"\f019"}.uk-icon-arrow-circle-o-down:before{content:"\f01a"}.uk-icon-arrow-circle-o-up:before{content:"\f01b"}.uk-icon-inbox:before{content:"\f01c"}.uk-icon-play-circle-o:before{content:"\f01d"}.uk-icon-repeat:before,.uk-icon-rotate-right:before{content:"\f01e"}.uk-icon-refresh:before{content:"\f021"}.uk-icon-list-alt:before{content:"\f022"}.uk-icon-lock:before{content:"\f023"}.uk-icon-flag:before{content:"\f024"}.uk-icon-headphones:before{content:"\f025"}.uk-icon-volume-off:before{content:"\f026"}.uk-icon-volume-down:before{content:"\f027"}.uk-icon-volume-up:before{content:"\f028"}.uk-icon-qrcode:before{content:"\f029"}.uk-icon-barcode:before{content:"\f02a"}.uk-icon-tag:before{content:"\f02b"}.uk-icon-tags:before{content:"\f02c"}.uk-icon-book:before{content:"\f02d"}.uk-icon-bookmark:before{content:"\f02e"}.uk-icon-print:before{content:"\f02f"}.uk-icon-camera:before{content:"\f030"}.uk-icon-font:before{content:"\f031"}.uk-icon-bold:before{content:"\f032"}.uk-icon-italic:before{content:"\f033"}.uk-icon-text-height:before{content:"\f034"}.uk-icon-text-width:before{content:"\f035"}.uk-icon-align-left:before{content:"\f036"}.uk-icon-align-center:before{content:"\f037"}.uk-icon-align-right:before{content:"\f038"}.uk-icon-align-justify:before{content:"\f039"}.uk-icon-list:before{content:"\f03a"}.uk-icon-dedent:before,.uk-icon-outdent:before{content:"\f03b"}.uk-icon-indent:before{content:"\f03c"}.uk-icon-video-camera:before{content:"\f03d"}.uk-icon-image:before,.uk-icon-photo:before,.uk-icon-picture-o:before{content:"\f03e"}.uk-icon-pencil:before{content:"\f040"}.uk-icon-map-marker:before{content:"\f041"}.uk-icon-adjust:before{content:"\f042"}.uk-icon-tint:before{content:"\f043"}.uk-icon-edit:before,.uk-icon-pencil-square-o:before{content:"\f044"}.uk-icon-share-square-o:before{content:"\f045"}.uk-icon-check-square-o:before{content:"\f046"}.uk-icon-arrows:before{content:"\f047"}.uk-icon-step-backward:before{content:"\f048"}.uk-icon-fast-backward:before{content:"\f049"}.uk-icon-backward:before{content:"\f04a"}.uk-icon-play:before{content:"\f04b"}.uk-icon-pause:before{content:"\f04c"}.uk-icon-stop:before{content:"\f04d"}.uk-icon-forward:before{content:"\f04e"}.uk-icon-fast-forward:before{content:"\f050"}.uk-icon-step-forward:before{content:"\f051"}.uk-icon-eject:before{content:"\f052"}.uk-icon-chevron-left:before{content:"\f053"}.uk-icon-chevron-right:before{content:"\f054"}.uk-icon-plus-circle:before{content:"\f055"}.uk-icon-minus-circle:before{content:"\f056"}.uk-icon-times-circle:before{content:"\f057"}.uk-icon-check-circle:before{content:"\f058"}.uk-icon-question-circle:before{content:"\f059"}.uk-icon-info-circle:before{content:"\f05a"}.uk-icon-crosshairs:before{content:"\f05b"}.uk-icon-times-circle-o:before{content:"\f05c"}.uk-icon-check-circle-o:before{content:"\f05d"}.uk-icon-ban:before{content:"\f05e"}.uk-icon-arrow-left:before{content:"\f060"}.uk-icon-arrow-right:before{content:"\f061"}.uk-icon-arrow-up:before{content:"\f062"}.uk-icon-arrow-down:before{content:"\f063"}.uk-icon-mail-forward:before,.uk-icon-share:before{content:"\f064"}.uk-icon-expand:before{content:"\f065"}.uk-icon-compress:before{content:"\f066"}.uk-icon-plus:before{content:"\f067"}.uk-icon-minus:before{content:"\f068"}.uk-icon-asterisk:before{content:"\f069"}.uk-icon-exclamation-circle:before{content:"\f06a"}.uk-icon-gift:before{content:"\f06b"}.uk-icon-leaf:before{content:"\f06c"}.uk-icon-fire:before{content:"\f06d"}.uk-icon-eye:before{content:"\f06e"}.uk-icon-eye-slash:before{content:"\f070"}.uk-icon-exclamation-triangle:before,.uk-icon-warning:before{content:"\f071"}.uk-icon-plane:before{content:"\f072"}.uk-icon-calendar:before{content:"\f073"}.uk-icon-random:before{content:"\f074"}.uk-icon-comment:before{content:"\f075"}.uk-icon-magnet:before{content:"\f076"}.uk-icon-chevron-up:before{content:"\f077"}.uk-icon-chevron-down:before{content:"\f078"}.uk-icon-retweet:before{content:"\f079"}.uk-icon-shopping-cart:before{content:"\f07a"}.uk-icon-folder:before{content:"\f07b"}.uk-icon-folder-open:before{content:"\f07c"}.uk-icon-arrows-v:before{content:"\f07d"}.uk-icon-arrows-h:before{content:"\f07e"}.uk-icon-bar-chart-o:before,.uk-icon-bar-chart:before{content:"\f080"}.uk-icon-twitter-square:before{content:"\f081"}.uk-icon-facebook-square:before{content:"\f082"}.uk-icon-camera-retro:before{content:"\f083"}.uk-icon-key:before{content:"\f084"}.uk-icon-cogs:before,.uk-icon-gears:before{content:"\f085"}.uk-icon-comments:before{content:"\f086"}.uk-icon-thumbs-o-up:before{content:"\f087"}.uk-icon-thumbs-o-down:before{content:"\f088"}.uk-icon-star-half:before{content:"\f089"}.uk-icon-heart-o:before{content:"\f08a"}.uk-icon-sign-out:before{content:"\f08b"}.uk-icon-linkedin-square:before{content:"\f08c"}.uk-icon-thumb-tack:before{content:"\f08d"}.uk-icon-external-link:before{content:"\f08e"}.uk-icon-sign-in:before{content:"\f090"}.uk-icon-trophy:before{content:"\f091"}.uk-icon-github-square:before{content:"\f092"}.uk-icon-upload:before{content:"\f093"}.uk-icon-lemon-o:before{content:"\f094"}.uk-icon-phone:before{content:"\f095"}.uk-icon-square-o:before{content:"\f096"}.uk-icon-bookmark-o:before{content:"\f097"}.uk-icon-phone-square:before{content:"\f098"}.uk-icon-twitter:before{content:"\f099"}.uk-icon-facebook-f:before,.uk-icon-facebook:before{content:"\f09a"}.uk-icon-github:before{content:"\f09b"}.uk-icon-unlock:before{content:"\f09c"}.uk-icon-credit-card:before{content:"\f09d"}.uk-icon-rss:before{content:"\f09e"}.uk-icon-hdd-o:before{content:"\f0a0"}.uk-icon-bullhorn:before{content:"\f0a1"}.uk-icon-bell:before{content:"\f0f3"}.uk-icon-certificate:before{content:"\f0a3"}.uk-icon-hand-o-right:before{content:"\f0a4"}.uk-icon-hand-o-left:before{content:"\f0a5"}.uk-icon-hand-o-up:before{content:"\f0a6"}.uk-icon-hand-o-down:before{content:"\f0a7"}.uk-icon-arrow-circle-left:before{content:"\f0a8"}.uk-icon-arrow-circle-right:before{content:"\f0a9"}.uk-icon-arrow-circle-up:before{content:"\f0aa"}.uk-icon-arrow-circle-down:before{content:"\f0ab"}.uk-icon-globe:before{content:"\f0ac"}.uk-icon-wrench:before{content:"\f0ad"}.uk-icon-tasks:before{content:"\f0ae"}.uk-icon-filter:before{content:"\f0b0"}.uk-icon-briefcase:before{content:"\f0b1"}.uk-icon-arrows-alt:before{content:"\f0b2"}.uk-icon-group:before,.uk-icon-users:before{content:"\f0c0"}.uk-icon-chain:before,.uk-icon-link:before{content:"\f0c1"}.uk-icon-cloud:before{content:"\f0c2"}.uk-icon-flask:before{content:"\f0c3"}.uk-icon-cut:before,.uk-icon-scissors:before{content:"\f0c4"}.uk-icon-copy:before,.uk-icon-files-o:before{content:"\f0c5"}.uk-icon-paperclip:before{content:"\f0c6"}.uk-icon-floppy-o:before,.uk-icon-save:before{content:"\f0c7"}.uk-icon-square:before{content:"\f0c8"}.uk-icon-bars:before,.uk-icon-navicon:before,.uk-icon-reorder:before{content:"\f0c9"}.uk-icon-list-ul:before{content:"\f0ca"}.uk-icon-list-ol:before{content:"\f0cb"}.uk-icon-strikethrough:before{content:"\f0cc"}.uk-icon-underline:before{content:"\f0cd"}.uk-icon-table:before{content:"\f0ce"}.uk-icon-magic:before{content:"\f0d0"}.uk-icon-truck:before{content:"\f0d1"}.uk-icon-pinterest:before{content:"\f0d2"}.uk-icon-pinterest-square:before{content:"\f0d3"}.uk-icon-google-plus-square:before{content:"\f0d4"}.uk-icon-google-plus:before{content:"\f0d5"}.uk-icon-money:before{content:"\f0d6"}.uk-icon-caret-down:before{content:"\f0d7"}.uk-icon-caret-up:before{content:"\f0d8"}.uk-icon-caret-left:before{content:"\f0d9"}.uk-icon-caret-right:before{content:"\f0da"}.uk-icon-columns:before{content:"\f0db"}.uk-icon-sort:before,.uk-icon-unsorted:before{content:"\f0dc"}.uk-icon-sort-desc:before,.uk-icon-sort-down:before{content:"\f0dd"}.uk-icon-sort-asc:before,.uk-icon-sort-up:before{content:"\f0de"}.uk-icon-envelope:before{content:"\f0e0"}.uk-icon-linkedin:before{content:"\f0e1"}.uk-icon-rotate-left:before,.uk-icon-undo:before{content:"\f0e2"}.uk-icon-gavel:before,.uk-icon-legal:before{content:"\f0e3"}.uk-icon-dashboard:before,.uk-icon-tachometer:before{content:"\f0e4"}.uk-icon-comment-o:before{content:"\f0e5"}.uk-icon-comments-o:before{content:"\f0e6"}.uk-icon-bolt:before,.uk-icon-flash:before{content:"\f0e7"}.uk-icon-sitemap:before{content:"\f0e8"}.uk-icon-umbrella:before{content:"\f0e9"}.uk-icon-clipboard:before,.uk-icon-paste:before{content:"\f0ea"}.uk-icon-lightbulb-o:before{content:"\f0eb"}.uk-icon-exchange:before{content:"\f0ec"}.uk-icon-cloud-download:before{content:"\f0ed"}.uk-icon-cloud-upload:before{content:"\f0ee"}.uk-icon-user-md:before{content:"\f0f0"}.uk-icon-stethoscope:before{content:"\f0f1"}.uk-icon-suitcase:before{content:"\f0f2"}.uk-icon-bell-o:before{content:"\f0a2"}.uk-icon-coffee:before{content:"\f0f4"}.uk-icon-cutlery:before{content:"\f0f5"}.uk-icon-file-text-o:before{content:"\f0f6"}.uk-icon-building-o:before{content:"\f0f7"}.uk-icon-hospital-o:before{content:"\f0f8"}.uk-icon-ambulance:before{content:"\f0f9"}.uk-icon-medkit:before{content:"\f0fa"}.uk-icon-fighter-jet:before{content:"\f0fb"}.uk-icon-beer:before{content:"\f0fc"}.uk-icon-h-square:before{content:"\f0fd"}.uk-icon-plus-square:before{content:"\f0fe"}.uk-icon-angle-double-left:before{content:"\f100"}.uk-icon-angle-double-right:before{content:"\f101"}.uk-icon-angle-double-up:before{content:"\f102"}.uk-icon-angle-double-down:before{content:"\f103"}.uk-icon-angle-left:before{content:"\f104"}.uk-icon-angle-right:before{content:"\f105"}.uk-icon-angle-up:before{content:"\f106"}.uk-icon-angle-down:before{content:"\f107"}.uk-icon-desktop:before{content:"\f108"}.uk-icon-laptop:before{content:"\f109"}.uk-icon-tablet:before{content:"\f10a"}.uk-icon-mobile-phone:before,.uk-icon-mobile:before{content:"\f10b"}.uk-icon-circle-o:before{content:"\f10c"}.uk-icon-quote-left:before{content:"\f10d"}.uk-icon-quote-right:before{content:"\f10e"}.uk-icon-spinner:before{content:"\f110"}.uk-icon-circle:before{content:"\f111"}.uk-icon-mail-reply:before,.uk-icon-reply:before{content:"\f112"}.uk-icon-github-alt:before{content:"\f113"}.uk-icon-folder-o:before{content:"\f114"}.uk-icon-folder-open-o:before{content:"\f115"}.uk-icon-smile-o:before{content:"\f118"}.uk-icon-frown-o:before{content:"\f119"}.uk-icon-meh-o:before{content:"\f11a"}.uk-icon-gamepad:before{content:"\f11b"}.uk-icon-keyboard-o:before{content:"\f11c"}.uk-icon-flag-o:before{content:"\f11d"}.uk-icon-flag-checkered:before{content:"\f11e"}.uk-icon-terminal:before{content:"\f120"}.uk-icon-code:before{content:"\f121"}.uk-icon-mail-reply-all:before,.uk-icon-reply-all:before{content:"\f122"}.uk-icon-star-half-empty:before,.uk-icon-star-half-full:before,.uk-icon-star-half-o:before{content:"\f123"}.uk-icon-location-arrow:before{content:"\f124"}.uk-icon-crop:before{content:"\f125"}.uk-icon-code-fork:before{content:"\f126"}.uk-icon-chain-broken:before,.uk-icon-unlink:before{content:"\f127"}.uk-icon-question:before{content:"\f128"}.uk-icon-info:before{content:"\f129"}.uk-icon-exclamation:before{content:"\f12a"}.uk-icon-superscript:before{content:"\f12b"}.uk-icon-subscript:before{content:"\f12c"}.uk-icon-eraser:before{content:"\f12d"}.uk-icon-puzzle-piece:before{content:"\f12e"}.uk-icon-microphone:before{content:"\f130"}.uk-icon-microphone-slash:before{content:"\f131"}.uk-icon-shield:before{content:"\f132"}.uk-icon-calendar-o:before{content:"\f133"}.uk-icon-fire-extinguisher:before{content:"\f134"}.uk-icon-rocket:before{content:"\f135"}.uk-icon-maxcdn:before{content:"\f136"}.uk-icon-chevron-circle-left:before{content:"\f137"}.uk-icon-chevron-circle-right:before{content:"\f138"}.uk-icon-chevron-circle-up:before{content:"\f139"}.uk-icon-chevron-circle-down:before{content:"\f13a"}.uk-icon-html5:before{content:"\f13b"}.uk-icon-css3:before{content:"\f13c"}.uk-icon-anchor:before{content:"\f13d"}.uk-icon-unlock-alt:before{content:"\f13e"}.uk-icon-bullseye:before{content:"\f140"}.uk-icon-ellipsis-h:before{content:"\f141"}.uk-icon-ellipsis-v:before{content:"\f142"}.uk-icon-rss-square:before{content:"\f143"}.uk-icon-play-circle:before{content:"\f144"}.uk-icon-ticket:before{content:"\f145"}.uk-icon-minus-square:before{content:"\f146"}.uk-icon-minus-square-o:before{content:"\f147"}.uk-icon-level-up:before{content:"\f148"}.uk-icon-level-down:before{content:"\f149"}.uk-icon-check-square:before{content:"\f14a"}.uk-icon-pencil-square:before{content:"\f14b"}.uk-icon-external-link-square:before{content:"\f14c"}.uk-icon-share-square:before{content:"\f14d"}.uk-icon-compass:before{content:"\f14e"}.uk-icon-caret-square-o-down:before,.uk-icon-toggle-down:before{content:"\f150"}.uk-icon-caret-square-o-up:before,.uk-icon-toggle-up:before{content:"\f151"}.uk-icon-caret-square-o-right:before,.uk-icon-toggle-right:before{content:"\f152"}.uk-icon-eur:before,.uk-icon-euro:before{content:"\f153"}.uk-icon-gbp:before{content:"\f154"}.uk-icon-dollar:before,.uk-icon-usd:before{content:"\f155"}.uk-icon-inr:before,.uk-icon-rupee:before{content:"\f156"}.uk-icon-cny:before,.uk-icon-jpy:before,.uk-icon-rmb:before,.uk-icon-yen:before{content:"\f157"}.uk-icon-rouble:before,.uk-icon-rub:before,.uk-icon-ruble:before{content:"\f158"}.uk-icon-krw:before,.uk-icon-won:before{content:"\f159"}.uk-icon-bitcoin:before,.uk-icon-btc:before{content:"\f15a"}.uk-icon-file:before{content:"\f15b"}.uk-icon-file-text:before{content:"\f15c"}.uk-icon-sort-alpha-asc:before{content:"\f15d"}.uk-icon-sort-alpha-desc:before{content:"\f15e"}.uk-icon-sort-amount-asc:before{content:"\f160"}.uk-icon-sort-amount-desc:before{content:"\f161"}.uk-icon-sort-numeric-asc:before{content:"\f162"}.uk-icon-sort-numeric-desc:before{content:"\f163"}.uk-icon-thumbs-up:before{content:"\f164"}.uk-icon-thumbs-down:before{content:"\f165"}.uk-icon-youtube-square:before{content:"\f166"}.uk-icon-youtube:before{content:"\f167"}.uk-icon-xing:before{content:"\f168"}.uk-icon-xing-square:before{content:"\f169"}.uk-icon-youtube-play:before{content:"\f16a"}.uk-icon-dropbox:before{content:"\f16b"}.uk-icon-stack-overflow:before{content:"\f16c"}.uk-icon-instagram:before{content:"\f16d"}.uk-icon-flickr:before{content:"\f16e"}.uk-icon-adn:before{content:"\f170"}.uk-icon-bitbucket:before{content:"\f171"}.uk-icon-bitbucket-square:before{content:"\f172"}.uk-icon-tumblr:before{content:"\f173"}.uk-icon-tumblr-square:before{content:"\f174"}.uk-icon-long-arrow-down:before{content:"\f175"}.uk-icon-long-arrow-up:before{content:"\f176"}.uk-icon-long-arrow-left:before{content:"\f177"}.uk-icon-long-arrow-right:before{content:"\f178"}.uk-icon-apple:before{content:"\f179"}.uk-icon-windows:before{content:"\f17a"}.uk-icon-android:before{content:"\f17b"}.uk-icon-linux:before{content:"\f17c"}.uk-icon-dribbble:before{content:"\f17d"}.uk-icon-skype:before{content:"\f17e"}.uk-icon-foursquare:before{content:"\f180"}.uk-icon-trello:before{content:"\f181"}.uk-icon-female:before{content:"\f182"}.uk-icon-male:before{content:"\f183"}.uk-icon-gittip:before,.uk-icon-gratipay:before{content:"\f184"}.uk-icon-sun-o:before{content:"\f185"}.uk-icon-moon-o:before{content:"\f186"}.uk-icon-archive:before{content:"\f187"}.uk-icon-bug:before{content:"\f188"}.uk-icon-vk:before{content:"\f189"}.uk-icon-weibo:before{content:"\f18a"}.uk-icon-renren:before{content:"\f18b"}.uk-icon-pagelines:before{content:"\f18c"}.uk-icon-stack-exchange:before{content:"\f18d"}.uk-icon-arrow-circle-o-right:before{content:"\f18e"}.uk-icon-arrow-circle-o-left:before{content:"\f190"}.uk-icon-caret-square-o-left:before,.uk-icon-toggle-left:before{content:"\f191"}.uk-icon-dot-circle-o:before{content:"\f192"}.uk-icon-wheelchair:before{content:"\f193"}.uk-icon-vimeo-square:before{content:"\f194"}.uk-icon-try:before,.uk-icon-turkish-lira:before{content:"\f195"}.uk-icon-plus-square-o:before{content:"\f196"}.uk-icon-space-shuttle:before{content:"\f197"}.uk-icon-slack:before{content:"\f198"}.uk-icon-envelope-square:before{content:"\f199"}.uk-icon-wordpress:before{content:"\f19a"}.uk-icon-openid:before{content:"\f19b"}.uk-icon-bank:before,.uk-icon-institution:before,.uk-icon-university:before{content:"\f19c"}.uk-icon-graduation-cap:before,.uk-icon-mortar-board:before{content:"\f19d"}.uk-icon-yahoo:before{content:"\f19e"}.uk-icon-google:before{content:"\f1a0"}.uk-icon-reddit:before{content:"\f1a1"}.uk-icon-reddit-square:before{content:"\f1a2"}.uk-icon-stumbleupon-circle:before{content:"\f1a3"}.uk-icon-stumbleupon:before{content:"\f1a4"}.uk-icon-delicious:before{content:"\f1a5"}.uk-icon-digg:before{content:"\f1a6"}.uk-icon-pied-piper:before{content:"\f1a7"}.uk-icon-pied-piper-alt:before{content:"\f1a8"}.uk-icon-drupal:before{content:"\f1a9"}.uk-icon-joomla:before{content:"\f1aa"}.uk-icon-language:before{content:"\f1ab"}.uk-icon-fax:before{content:"\f1ac"}.uk-icon-building:before{content:"\f1ad"}.uk-icon-child:before{content:"\f1ae"}.uk-icon-paw:before{content:"\f1b0"}.uk-icon-spoon:before{content:"\f1b1"}.uk-icon-cube:before{content:"\f1b2"}.uk-icon-cubes:before{content:"\f1b3"}.uk-icon-behance:before{content:"\f1b4"}.uk-icon-behance-square:before{content:"\f1b5"}.uk-icon-steam:before{content:"\f1b6"}.uk-icon-steam-square:before{content:"\f1b7"}.uk-icon-recycle:before{content:"\f1b8"}.uk-icon-automobile:before,.uk-icon-car:before{content:"\f1b9"}.uk-icon-cab:before,.uk-icon-taxi:before{content:"\f1ba"}.uk-icon-tree:before{content:"\f1bb"}.uk-icon-spotify:before{content:"\f1bc"}.uk-icon-deviantart:before{content:"\f1bd"}.uk-icon-soundcloud:before{content:"\f1be"}.uk-icon-database:before{content:"\f1c0"}.uk-icon-file-pdf-o:before{content:"\f1c1"}.uk-icon-file-word-o:before{content:"\f1c2"}.uk-icon-file-excel-o:before{content:"\f1c3"}.uk-icon-file-powerpoint-o:before{content:"\f1c4"}.uk-icon-file-image-o:before,.uk-icon-file-photo-o:before,.uk-icon-file-picture-o:before{content:"\f1c5"}.uk-icon-file-archive-o:before,.uk-icon-file-zip-o:before{content:"\f1c6"}.uk-icon-file-audio-o:before,.uk-icon-file-sound-o:before{content:"\f1c7"}.uk-icon-file-movie-o:before,.uk-icon-file-video-o:before{content:"\f1c8"}.uk-icon-file-code-o:before{content:"\f1c9"}.uk-icon-vine:before{content:"\f1ca"}.uk-icon-codepen:before{content:"\f1cb"}.uk-icon-jsfiddle:before{content:"\f1cc"}.uk-icon-life-bouy:before,.uk-icon-life-buoy:before,.uk-icon-life-ring:before,.uk-icon-life-saver:before,.uk-icon-support:before{content:"\f1cd"}.uk-icon-circle-o-notch:before{content:"\f1ce"}.uk-icon-ra:before,.uk-icon-rebel:before{content:"\f1d0"}.uk-icon-empire:before,.uk-icon-ge:before{content:"\f1d1"}.uk-icon-git-square:before{content:"\f1d2"}.uk-icon-git:before{content:"\f1d3"}.uk-icon-hacker-news:before{content:"\f1d4"}.uk-icon-tencent-weibo:before{content:"\f1d5"}.uk-icon-qq:before{content:"\f1d6"}.uk-icon-wechat:before,.uk-icon-weixin:before{content:"\f1d7"}.uk-icon-paper-plane:before,.uk-icon-send:before{content:"\f1d8"}.uk-icon-paper-plane-o:before,.uk-icon-send-o:before{content:"\f1d9"}.uk-icon-history:before{content:"\f1da"}.uk-icon-circle-thin:before,.uk-icon-genderless:before{content:"\f1db"}.uk-icon-header:before{content:"\f1dc"}.uk-icon-paragraph:before{content:"\f1dd"}.uk-icon-sliders:before{content:"\f1de"}.uk-icon-share-alt:before{content:"\f1e0"}.uk-icon-share-alt-square:before{content:"\f1e1"}.uk-icon-bomb:before{content:"\f1e2"}.uk-icon-futbol-o:before,.uk-icon-soccer-ball-o:before{content:"\f1e3"}.uk-icon-tty:before{content:"\f1e4"}.uk-icon-binoculars:before{content:"\f1e5"}.uk-icon-plug:before{content:"\f1e6"}.uk-icon-slideshare:before{content:"\f1e7"}.uk-icon-twitch:before{content:"\f1e8"}.uk-icon-yelp:before{content:"\f1e9"}.uk-icon-newspaper-o:before{content:"\f1ea"}.uk-icon-wifi:before{content:"\f1eb"}.uk-icon-calculator:before{content:"\f1ec"}.uk-icon-paypal:before{content:"\f1ed"}.uk-icon-google-wallet:before{content:"\f1ee"}.uk-icon-cc-visa:before{content:"\f1f0"}.uk-icon-cc-mastercard:before{content:"\f1f1"}.uk-icon-cc-discover:before{content:"\f1f2"}.uk-icon-cc-amex:before{content:"\f1f3"}.uk-icon-cc-paypal:before{content:"\f1f4"}.uk-icon-cc-stripe:before{content:"\f1f5"}.uk-icon-bell-slash:before{content:"\f1f6"}.uk-icon-bell-slash-o:before{content:"\f1f7"}.uk-icon-trash:before{content:"\f1f8"}.uk-icon-copyright:before{content:"\f1f9"}.uk-icon-at:before{content:"\f1fa"}.uk-icon-eyedropper:before{content:"\f1fb"}.uk-icon-paint-brush:before{content:"\f1fc"}.uk-icon-birthday-cake:before{content:"\f1fd"}.uk-icon-area-chart:before{content:"\f1fe"}.uk-icon-pie-chart:before{content:"\f200"}.uk-icon-line-chart:before{content:"\f201"}.uk-icon-lastfm:before{content:"\f202"}.uk-icon-lastfm-square:before{content:"\f203"}.uk-icon-toggle-off:before{content:"\f204"}.uk-icon-toggle-on:before{content:"\f205"}.uk-icon-bicycle:before{content:"\f206"}.uk-icon-bus:before{content:"\f207"}.uk-icon-ioxhost:before{content:"\f208"}.uk-icon-angellist:before{content:"\f209"}.uk-icon-cc:before{content:"\f20a"}.uk-icon-ils:before,.uk-icon-shekel:before,.uk-icon-sheqel:before{content:"\f20b"}.uk-icon-meanpath:before{content:"\f20c"}.uk-icon-buysellads:before{content:"\f20d"}.uk-icon-connectdevelop:before{content:"\f20e"}.uk-icon-dashcube:before{content:"\f210"}.uk-icon-forumbee:before{content:"\f211"}.uk-icon-leanpub:before{content:"\f212"}.uk-icon-sellsy:before{content:"\f213"}.uk-icon-shirtsinbulk:before{content:"\f214"}.uk-icon-simplybuilt:before{content:"\f215"}.uk-icon-skyatlas:before{content:"\f216"}.uk-icon-cart-plus:before{content:"\f217"}.uk-icon-cart-arrow-down:before{content:"\f218"}.uk-icon-diamond:before{content:"\f219"}.uk-icon-ship:before{content:"\f21a"}.uk-icon-user-secret:before{content:"\f21b"}.uk-icon-motorcycle:before{content:"\f21c"}.uk-icon-street-view:before{content:"\f21d"}.uk-icon-heartbeat:before{content:"\f21e"}.uk-icon-venus:before{content:"\f221"}.uk-icon-mars:before{content:"\f222"}.uk-icon-mercury:before{content:"\f223"}.uk-icon-transgender:before{content:"\f224"}.uk-icon-transgender-alt:before{content:"\f225"}.uk-icon-venus-double:before{content:"\f226"}.uk-icon-mars-double:before{content:"\f227"}.uk-icon-venus-mars:before{content:"\f228"}.uk-icon-mars-stroke:before{content:"\f229"}.uk-icon-mars-stroke-v:before{content:"\f22a"}.uk-icon-mars-stroke-h:before{content:"\f22b"}.uk-icon-neuter:before{content:"\f22c"}.uk-icon-facebook-official:before{content:"\f230"}.uk-icon-pinterest-p:before{content:"\f231"}.uk-icon-whatsapp:before{content:"\f232"}.uk-icon-server:before{content:"\f233"}.uk-icon-user-plus:before{content:"\f234"}.uk-icon-user-times:before{content:"\f235"}.uk-icon-bed:before,.uk-icon-hotel:before{content:"\f236"}.uk-icon-viacoin:before{content:"\f237"}.uk-icon-train:before{content:"\f238"}.uk-icon-subway:before{content:"\f239"}.uk-icon-medium-logo:before{content:"\f23a"}.uk-close::-moz-focus-inner{border:0;padding:0}.uk-close{-webkit-appearance:none;margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background:0 0;display:inline-block;-moz-box-sizing:content-box;box-sizing:content-box;width:20px;line-height:20px;text-align:center;vertical-align:middle;opacity:.3}.uk-close:after{display:block;content:"\f00d";font-family:FontAwesome}.uk-close:focus,.uk-close:hover{opacity:.5;outline:0;color:inherit;text-decoration:none;cursor:pointer}.uk-close-alt{padding:2px;border-radius:50%;background:#eee;opacity:1}.uk-close-alt:focus,.uk-close-alt:hover{opacity:1}.uk-close-alt:after{opacity:.5}.uk-close-alt:focus:after,.uk-close-alt:hover:after{opacity:.8}.uk-badge{display:inline-block;padding:0 5px;background:#00a8e6;font-size:10px;font-weight:700;line-height:14px;color:#fff;text-align:center;vertical-align:middle;text-transform:none}a.uk-badge:hover{color:#fff}.uk-badge-notification{-moz-box-sizing:border-box;box-sizing:border-box;min-width:18px;border-radius:500px;font-size:12px;line-height:18px}.uk-badge-success{background-color:#8cc14c}.uk-badge-warning{background-color:#faa732}.uk-badge-danger{background-color:#da314b}.uk-alert{margin-bottom:15px;padding:10px;background:#ebf7fd;color:#2d7091}*+.uk-alert{margin-top:15px}.uk-alert>:last-child{margin-bottom:0}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert>.uk-close:first-child{float:right}.uk-alert>.uk-close:first-child+*{margin-top:0}.uk-alert-success{background:#f2fae3;color:#659f13}.uk-alert-warning{background:#fffceb;color:#e28327}.uk-alert-danger{background:#fff1f0;color:#d85030}.uk-alert-large{padding:20px}.uk-alert-large>.uk-close:first-child{margin:-10px -10px 0 0}.uk-thumbnail{display:inline-block;max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px;border:1px solid #ddd;background:#fff}a.uk-thumbnail:focus,a.uk-thumbnail:hover{border-color:#aaa;background-color:#fff;text-decoration:none;outline:0}.uk-thumbnail-caption{padding-top:4px;text-align:center;color:#444}.uk-thumbnail-mini{width:150px}.uk-thumbnail-small{width:200px}.uk-thumbnail-medium{width:300px}.uk-thumbnail-large{width:400px}.uk-thumbnail-expand,.uk-thumbnail-expand>img{width:100%}.uk-overlay{display:inline-block;position:relative;max-width:100%;vertical-align:middle;overflow:hidden;-webkit-transform:translateZ(0);margin:0}.uk-overlay.uk-border-circle{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.uk-overlay>:first-child{margin-bottom:0}.uk-overlay-panel{position:absolute;top:0;bottom:0;left:0;right:0;padding:20px;color:#fff}.uk-overlay-panel.uk-flex>*>:last-child,.uk-overlay-panel>:last-child{margin-bottom:0}.uk-overlay-panel h1,.uk-overlay-panel h2,.uk-overlay-panel h3,.uk-overlay-panel h4,.uk-overlay-panel h5,.uk-overlay-panel h6{color:inherit}.uk-overlay-panel a:not([class]){color:inherit;text-decoration:underline}.uk-overlay-panel a[class*=uk-icon-]:not(.uk-icon-button){color:inherit}.uk-overlay-hover:not(:hover):not(.uk-hover) .uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-active :not(.uk-active)>.uk-overlay-panel:not(.uk-ignore){opacity:0}.uk-overlay-background{background:rgba(0,0,0,.5)}.uk-overlay-image{padding:0}.uk-overlay-top{bottom:auto}.uk-overlay-bottom{top:auto}.uk-overlay-left{right:auto}.uk-overlay-right{left:auto}.uk-overlay-icon:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-blur,.uk-overlay-fade,.uk-overlay-grayscale,.uk-overlay-scale,.uk-overlay-spin,[class*=uk-overlay-slide]{transition-duration:.3s;transition-timing-function:ease-out;transition-property:opacity transform filter}.uk-overlay-active .uk-overlay-fade,.uk-overlay-active .uk-overlay-scale,.uk-overlay-active .uk-overlay-spin,.uk-overlay-active [class*=uk-overlay-slide]{transition-duration:.8s}.uk-overlay-fade{opacity:.7}.uk-overlay-active .uk-active>.uk-overlay-fade,.uk-overlay-hover:hover .uk-overlay-fade{opacity:1}.uk-overlay-scale{-webkit-transform:scale(1);transform:scale(1)}.uk-overlay-active .uk-active>.uk-overlay-scale,.uk-overlay-hover:hover .uk-overlay-scale{-webkit-transform:scale(1.1);transform:scale(1.1)}.uk-overlay-spin{-webkit-transform:scale(1)rotate(0);transform:scale(1)rotate(0)}.uk-overlay-active .uk-active>.uk-overlay-spin,.uk-overlay-hover:hover .uk-overlay-spin{-webkit-transform:scale(1.1)rotate(3deg);transform:scale(1.1)rotate(3deg)}.uk-overlay-grayscale{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.uk-overlay-active .uk-active>.uk-overlay-grayscale,.uk-overlay-hover:hover .uk-overlay-grayscale{-webkit-filter:grayscale(0);filter:grayscale(0)}[class*=uk-overlay-slide]{opacity:0}.uk-overlay-slide-top{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.uk-overlay-slide-bottom{-webkit-transform:translateY(100%);transform:translateY(100%)}.uk-overlay-slide-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.uk-overlay-slide-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-overlay-active .uk-active>[class*=uk-overlay-slide],.uk-overlay-hover:hover [class*=uk-overlay-slide]{opacity:1;-webkit-transform:translateX(0)translateY(0);transform:translateX(0)translateY(0)}.uk-overlay-area{position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.3);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-area,.uk-overlay-toggle:hover .uk-overlay-area,.uk-overlay.uk-hover .uk-overlay-area,.uk-overlay:hover .uk-overlay-area{opacity:1}.uk-overlay-area:empty:before{content:"\f002";position:absolute;top:50%;left:50%;width:50px;height:50px;margin-top:-25px;margin-left:-25px;font-size:50px;line-height:1;font-family:FontAwesome;text-align:center;color:#fff}.uk-overlay-area:not(:empty){font-size:0}.uk-overlay-area:not(:empty):before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-overlay-area-content{display:inline-block;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;vertical-align:middle;font-size:1rem;text-align:center;padding:0 15px;color:#fff}.uk-overlay-area-content>:last-child{margin-bottom:0}.uk-overlay-area-content a:not([class]),.uk-overlay-area-content a:not([class]):hover{color:inherit}.uk-overlay-caption{position:absolute;bottom:0;left:0;right:0;padding:15px;background:rgba(0,0,0,.5);color:#fff;opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;-webkit-transform:translate3d(0,0,0)}.uk-overlay-toggle.uk-hover .uk-overlay-caption,.uk-overlay-toggle:hover .uk-overlay-caption,.uk-overlay.uk-hover .uk-overlay-caption,.uk-overlay:hover .uk-overlay-caption{opacity:1}[class*=uk-animation-]{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media screen{[data-uk-scrollspy*=uk-animation-]:not([data-uk-scrollspy*=target]){opacity:0}}.uk-animation-fade{-webkit-animation-name:uk-fade;animation-name:uk-fade;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-timing-function:linear!important;animation-timing-function:linear!important}.uk-animation-scale-up{-webkit-animation-name:uk-fade-scale-02;animation-name:uk-fade-scale-02}.uk-animation-scale-down{-webkit-animation-name:uk-fade-scale-18;animation-name:uk-fade-scale-18}.uk-animation-slide-top{-webkit-animation-name:uk-fade-top;animation-name:uk-fade-top}.uk-animation-slide-bottom{-webkit-animation-name:uk-fade-bottom;animation-name:uk-fade-bottom}.uk-animation-slide-left{-webkit-animation-name:uk-fade-left;animation-name:uk-fade-left}.uk-animation-slide-right{-webkit-animation-name:uk-fade-right;animation-name:uk-fade-right}.uk-animation-scale{-webkit-animation-name:uk-scale-12;animation-name:uk-scale-12}.uk-animation-shake{-webkit-animation-name:uk-shake;animation-name:uk-shake}.uk-animation-reverse{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}.uk-animation-15{-webkit-animation-duration:15s;animation-duration:15s}.uk-animation-top-left{-webkit-transform-origin:0 0;transform-origin:0 0}.uk-animation-top-center{-webkit-transform-origin:50% 0;transform-origin:50% 0}.uk-animation-top-right{-webkit-transform-origin:100% 0;transform-origin:100% 0}.uk-animation-middle-left{-webkit-transform-origin:0 50%;transform-origin:0 50%}.uk-animation-middle-right{-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.uk-animation-bottom-left{-webkit-transform-origin:0 100%;transform-origin:0 100%}.uk-animation-bottom-center{-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.uk-animation-bottom-right{-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.uk-animation-hover:not(:hover),.uk-animation-hover:not(:hover) [class*=uk-animation-],.uk-touch .uk-animation-hover:not(.uk-hover),.uk-touch .uk-animation-hover:not(.uk-hover) [class*=uk-animation-]{-webkit-animation-name:none;animation-name:none}@-webkit-keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes uk-fade-top{0%{opacity:0;-webkit-transform:translateY(-100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-bottom{0%{opacity:0;-webkit-transform:translateY(100%)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-fade-left{0%{opacity:0;-webkit-transform:translateX(-100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-right{0%{opacity:0;-webkit-transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@-webkit-keyframes uk-fade-scale-02{0%{opacity:0;-webkit-transform:scale(.2)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-15{0%{opacity:0;-webkit-transform:scale(1.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-15{0%{opacity:0;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-fade-scale-18{0%{opacity:0;-webkit-transform:scale(1.8)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@-webkit-keyframes uk-slide-left{0%{-webkit-transform:translateX(-100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right{0%{-webkit-transform:translateX(100%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-left-33{0%{-webkit-transform:translateX(33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-left-33{0%{transform:translateX(33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-slide-right-33{0%{-webkit-transform:translateX(-33%)}100%{-webkit-transform:translateX(0)}}@keyframes uk-slide-right-33{0%{transform:translateX(-33%)}100%{transform:translateX(0)}}@-webkit-keyframes uk-scale-12{0%{-webkit-transform:scale(1.2)}100%{-webkit-transform:scale(1)}}@keyframes uk-scale-12{0%{transform:scale(1.2)}100%{transform:scale(1)}}@-webkit-keyframes uk-rotate{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes uk-rotate{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}@-webkit-keyframes uk-shake{0%,100%{-webkit-transform:translateX(0)}10%{-webkit-transform:translateX(-9px)}20%{-webkit-transform:translateX(8px)}30%{-webkit-transform:translateX(-7px)}40%{-webkit-transform:translateX(6px)}50%{-webkit-transform:translateX(-5px)}60%{-webkit-transform:translateX(4px)}70%{-webkit-transform:translateX(-3px)}80%{-webkit-transform:translateX(2px)}90%{-webkit-transform:translateX(-1px)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@-webkit-keyframes uk-slide-top-fixed{0%{opacity:0;-webkit-transform:translateY(-10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-top-fixed{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@-webkit-keyframes uk-slide-bottom-fixed{0%{opacity:0;-webkit-transform:translateY(10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@keyframes uk-slide-bottom-fixed{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}.uk-dropdown{display:none;position:absolute;top:100%;left:0;z-index:1020;-moz-box-sizing:border-box;box-sizing:border-box;width:200px;margin-top:5px;padding:15px;background:#f5f5f5;color:#444;font-size:1rem;vertical-align:top}.uk-open>.uk-dropdown{display:block;-webkit-animation:uk-fade .2s ease-in-out;animation:uk-fade .2s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}.uk-dropdown-flip{left:auto;right:0}.uk-dropdown-up{top:auto;bottom:100%;margin-top:auto;margin-bottom:5px}.uk-dropdown .uk-nav{margin:0 -15px}.uk-grid .uk-dropdown-grid+.uk-dropdown-grid{margin-top:15px}.uk-dropdown-grid>[class*=uk-width-]>.uk-panel+.uk-panel{margin-top:15px}@media (min-width:768px){.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid{margin-left:-15px;margin-right:-15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]{padding-left:15px;padding-right:15px}.uk-dropdown:not(.uk-dropdown-stack)>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){border-left:1px solid #ddd}.uk-dropdown-width-2:not(.uk-dropdown-stack){width:400px}.uk-dropdown-width-3:not(.uk-dropdown-stack){width:600px}.uk-dropdown-width-4:not(.uk-dropdown-stack){width:800px}.uk-dropdown-width-5:not(.uk-dropdown-stack){width:1000px}}@media (max-width:767px){.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]{width:100%}.uk-dropdown-stack>.uk-dropdown-grid>[class*=uk-width-]:nth-child(n+2){margin-top:15px}.uk-dropdown-small{min-width:150px;width:auto;padding:5px;white-space:nowrap}.uk-dropdown-small .uk-nav{margin:0 -5px}.uk-dropdown-navbar{margin-top:0;background:#f5f5f5;color:#444}.uk-open>.uk-dropdown-navbar{-webkit-animation:uk-slide-top-fixed .2s ease-in-out;animation:uk-slide-top-fixed .2s ease-in-out}.uk-dropdown-scrollable{overflow-y:auto;max-height:200px}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;background:rgba(0,0,0,.6);opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear;touch-action:cross-slide-y pinch-zoom double-tap-zoom;-webkit-transform:translateZ(0);transform:translateZ(0)}.uk-modal.uk-open{opacity:1}.uk-modal-page,.uk-modal-page body{overflow:hidden}.uk-modal-dialog{position:relative;-moz-box-sizing:border-box;box-sizing:border-box;margin:50px auto;padding:20px;width:600px;max-width:100%;max-width:calc(100% - 20px);background:#fff;opacity:0;-webkit-transform:translateY(-100px);transform:translateY(-100px);-webkit-transition:opacity .3s linear,-webkit-transform .3s ease-out;transition:opacity .3s linear,transform .3s ease-out}@media (max-width:767px){.uk-modal-dialog{width:auto;margin:10px auto}}.uk-open .uk-modal-dialog{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.uk-modal-dialog>:not([class*=uk-modal-]):last-child{margin-bottom:0}.uk-modal-dialog>.uk-close:first-child{margin:-10px -10px 0 0;float:right}.uk-modal-dialog>.uk-close:first-child+:not([class*=uk-modal-]){margin-top:0}.uk-modal-dialog-lightbox{margin:15px auto;padding:0;max-width:95%;max-width:calc(100% - 30px)}.uk-modal-dialog-lightbox>.uk-close:first-child{position:absolute;top:-12px;right:-12px;margin:0;float:none}@media (max-width:767px){.uk-modal-dialog-lightbox>.uk-close:first-child{top:-7px;right:-7px}}@media (min-width:768px){.uk-modal-dialog-large{width:930px}}@media (min-width:1220px){.uk-modal-dialog-large{width:1130px}}.uk-modal-header{margin-bottom:15px}.uk-modal-footer{margin-top:15px}.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-caption{position:absolute;left:0;right:0;bottom:-20px;margin-bottom:-10px;color:#fff;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-modal-spinner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:25px;color:#ddd}.uk-modal-spinner:after{content:"\f110";font-family:FontAwesome;-webkit-animation:uk-rotate 2s infinite linear;animation:uk-rotate 2s infinite linear}.uk-offcanvas{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;touch-action:none;background:rgba(0,0,0,.1)}.uk-offcanvas.uk-active{display:block}.uk-offcanvas-page{position:fixed;-webkit-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out}.uk-offcanvas-bar{position:fixed;top:0;bottom:0;left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:1001;width:270px;max-width:100%;background:#333;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;-ms-scroll-chaining:none}.uk-offcanvas.uk-active .uk-offcanvas-bar.uk-offcanvas-bar-show{-webkit-transform:translateX(0);transform:translateX(0)}.uk-offcanvas-bar-flip{left:auto;right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.uk-offcanvas .uk-panel{margin:20px 15px;color:#777}.uk-offcanvas .uk-panel-title{color:#ccc}.uk-offcanvas .uk-panel a:not([class]){color:#ccc}.uk-offcanvas .uk-panel a:not([class]):hover{color:#fff}.uk-switcher{margin:0;padding:0;list-style:none;touch-action:cross-slide-y pinch-zoom double-tap-zoom}.uk-switcher>:not(.uk-active){display:none}.uk-text-small{font-size:11px;line-height:16px}.uk-text-large{font-size:18px;line-height:24px;font-weight:400}.uk-text-bold{font-weight:700}.uk-text-muted{color:#999!important}.uk-text-primary{color:#2d7091!important}.uk-text-success{color:#659f13!important}.uk-text-warning{color:#e28327!important}.uk-text-danger{color:#d85030!important}.uk-text-contrast{color:#fff!important}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}@media (max-width:959px){.uk-text-center-medium{text-align:center!important}.uk-text-left-medium{text-align:left!important}}@media (max-width:767px){.uk-text-center-small{text-align:center!important}.uk-text-left-small{text-align:left!important}}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uk-text-break{word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;-moz-hyphens:auto;hyphens:auto}.uk-container{-moz-box-sizing:border-box;box-sizing:border-box;max-width:980px;padding:0 25px}@media (min-width:1220px){.uk-container{max-width:1200px;padding:0 35px}}.uk-container:after,.uk-container:before{content:"";display:table}.uk-container:after{clear:both}.uk-container-center{margin-left:auto;margin-right:auto}.uk-clearfix:before{content:"";display:table-cell}.uk-clearfix:after{content:"";display:table;clear:both}.uk-nbfc{overflow:hidden}.uk-nbfc-alt{display:table-cell;width:10000px}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}[class*=uk-align-]{display:block;margin-bottom:15px}.uk-align-left{margin-right:15px;float:left}.uk-align-right{margin-left:15px;float:right}@media (min-width:768px){.uk-align-medium-left{margin-right:15px;margin-bottom:15px;float:left}.uk-align-medium-right{margin-left:15px;margin-bottom:15px;float:right}}.uk-align-center{margin-left:auto;margin-right:auto}.uk-vertical-align{font-size:0}.uk-vertical-align:before{content:'';display:inline-block;height:100%;vertical-align:middle}.uk-vertical-align-bottom,.uk-vertical-align-middle{display:inline-block;max-width:100%;font-size:1rem}.uk-vertical-align-middle{vertical-align:middle}.uk-vertical-align-bottom{vertical-align:bottom}[class*=uk-height]{-moz-box-sizing:border-box;box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{height:100vh;min-height:600px}.uk-responsive-height,.uk-responsive-width{-moz-box-sizing:border-box;box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto}.uk-margin{margin-bottom:15px}*+.uk-margin{margin-top:15px}.uk-margin-top{margin-top:15px!important}.uk-margin-bottom{margin-bottom:15px!important}.uk-margin-left{margin-left:15px!important}.uk-margin-right{margin-right:15px!important}.uk-margin-large{margin-bottom:50px}*+.uk-margin-large{margin-top:50px}.uk-margin-large-top{margin-top:50px!important}.uk-margin-large-bottom{margin-bottom:50px!important}.uk-margin-large-left{margin-left:50px!important}.uk-margin-large-right{margin-right:50px!important}.uk-margin-small{margin-bottom:5px}*+.uk-margin-small{margin-top:5px}.uk-margin-small-top{margin-top:5px!important}.uk-margin-small-bottom{margin-bottom:5px!important}.uk-margin-small-left{margin-left:5px!important}.uk-margin-small-right{margin-right:5px!important}.uk-margin-remove{margin:0!important}.uk-margin-top-remove{margin-top:0!important}.uk-margin-bottom-remove{margin-bottom:0!important}.uk-padding-remove{padding:0!important}.uk-padding-top-remove{padding-top:0!important}.uk-padding-bottom-remove{padding-bottom:0!important}.uk-padding-vertical-remove{padding-top:0!important;padding-bottom:0!important}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-heading-large{font-size:36px;line-height:42px}@media (min-width:768px){.uk-heading-large{font-size:52px;line-height:64px}}.uk-link-muted,.uk-link-muted a{color:#444}.uk-link-muted a:hover,.uk-link-muted:hover{color:#444}.uk-link-reset,.uk-link-reset a,.uk-link-reset a:focus,.uk-link-reset a:hover,.uk-link-reset:focus,.uk-link-reset:hover{color:inherit;text-decoration:none}.uk-scrollable-text{height:300px;overflow-y:scroll;-webkit-overflow-scrolling:touch;resize:both}.uk-scrollable-box{-moz-box-sizing:border-box;box-sizing:border-box;height:170px;padding:10px;border:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-scrollable-box>:last-child{margin-bottom:0}.uk-overflow-hidden{overflow:hidden}.uk-overflow-container{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-container>:last-child{margin-bottom:0}.uk-position-absolute,[class*=uk-position-top],[class*=uk-position-bottom]{position:absolute!important}.uk-position-top{top:0;width:100%}.uk-position-bottom{bottom:0;width:100%}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative!important}.uk-position-z-index{z-index:1}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important}@media (min-width:960px){.uk-visible-small{display:none!important}.uk-visible-medium{display:none!important}.uk-hidden-large{display:none!important}}@media (min-width:768px)and (max-width:959px){.uk-visible-small{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-medium{display:none!important}}@media (max-width:767px){.uk-visible-medium{display:none!important}.uk-visible-large{display:none!important}.uk-hidden-small{display:none!important}}.uk-hidden{display:none!important;visibility:hidden!important}.uk-invisible{visibility:hidden!important}.uk-visible-hover:hover .uk-hidden,.uk-visible-hover:hover .uk-invisible{display:block!important;visibility:visible!important}.uk-visible-hover-inline:hover .uk-hidden,.uk-visible-hover-inline:hover .uk-invisible{display:inline-block!important;visibility:visible!important}.uk-notouch .uk-hidden-notouch,.uk-touch .uk-hidden-touch{display:none!important}.uk-flex{display:-ms-flexbox;display:-webkit-flex;display:flex}.uk-flex-inline{display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex}.uk-flex-inline>*,.uk-flex>*{-ms-flex-negative:1}.uk-flex-top{-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start}.uk-flex-middle{-ms-flex-align:center;-webkit-align-items:center;align-items:center}.uk-flex-bottom{-ms-flex-align:end;-webkit-align-items:flex-end;align-items:flex-end}.uk-flex-center{-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center}.uk-flex-right{-ms-flex-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.uk-flex-space-between{-ms-flex-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.uk-flex-space-around{-ms-flex-pack:distribute;-webkit-justify-content:space-around;justify-content:space-around}.uk-flex-row-reverse{-ms-flex-direction:row-reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.uk-flex-column{-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.uk-flex-column-reverse{-ms-flex-direction:column-reverse;-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.uk-flex-nowrap{-ms-flex-wrap:nowrap;-webkit-flex-wrap:nowrap;flex-wrap:nowrap}.uk-flex-wrap{-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.uk-flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;-webkit-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse}.uk-flex-wrap-top{-ms-flex-line-pack:start;-webkit-align-content:flex-start;align-content:flex-start}.uk-flex-wrap-middle{-ms-flex-line-pack:center;-webkit-align-content:center;align-content:center}.uk-flex-wrap-bottom{-ms-flex-line-pack:end;-webkit-align-content:flex-end;align-content:flex-end}.uk-flex-wrap-space-between{-ms-flex-line-pack:justify;-webkit-align-content:space-between;align-content:space-between}.uk-flex-wrap-space-around{-ms-flex-line-pack:distribute;-webkit-align-content:space-around;align-content:space-around}.uk-flex-order-first{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last{-ms-flex-order:99;-webkit-order:99;order:99}@media (min-width:480px){.uk-flex-order-first-small{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-small{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:768px){.uk-flex-order-first-medium{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-medium{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:960px){.uk-flex-order-first-large{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-large{-ms-flex-order:99;-webkit-order:99;order:99}}@media (min-width:1220px){.uk-flex-order-first-xlarge{-ms-flex-order:-1;-webkit-order:-1;order:-1}.uk-flex-order-last-xlarge{-ms-flex-order:99;-webkit-order:99;order:99}}.uk-flex-item-none{-ms-flex:none;-webkit-flex:none;flex:none}.uk-flex-item-auto{-ms-flex:auto;-webkit-flex:auto;flex:auto;-ms-flex-negative:1}.uk-flex-item-1{-ms-flex:1;-webkit-flex:1;flex:1}.uk-contrast{color:#fff}.uk-contrast .uk-link,.uk-contrast a:not([class]){color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-link:hover,.uk-contrast a:not([class]):hover{color:#fff;text-decoration:underline}.uk-contrast :not(pre)>code,.uk-contrast :not(pre)>kbd,.uk-contrast :not(pre)>samp{color:#fff}.uk-contrast em{color:#fff}.uk-contrast h1,.uk-contrast h2,.uk-contrast h3,.uk-contrast h4,.uk-contrast h5,.uk-contrast h6{color:#fff}.uk-contrast hr{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav li>a,.uk-contrast .uk-nav li>a:hover{text-decoration:none}.uk-contrast .uk-nav-side>li>a{color:#fff}.uk-contrast .uk-nav-side>li>a:focus,.uk-contrast .uk-nav-side>li>a:hover{background:rgba(255,255,255,.1);color:#fff}.uk-contrast .uk-nav-side>li.uk-active>a{background:#fff;color:#444}.uk-contrast .uk-nav-side .uk-nav-header{color:#fff}.uk-contrast .uk-nav-side .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-nav-side ul a{color:rgba(255,255,255,.7)}.uk-contrast .uk-nav-side ul a:hover{color:#fff}.uk-contrast .uk-subnav>*>a{color:rgba(255,255,255,.7);text-decoration:none}.uk-contrast .uk-subnav>*>a:focus,.uk-contrast .uk-subnav>*>a:hover{color:#fff;text-decoration:none}.uk-contrast .uk-subnav>.uk-active>a{color:#fff}.uk-contrast .uk-subnav-line>:nth-child(n+2):before{border-left-color:rgba(255,255,255,.2)}.uk-contrast .uk-subnav-pill>*>a:focus,.uk-contrast .uk-subnav-pill>*>a:hover{background:rgba(255,255,255,.7);color:#444;text-decoration:none}.uk-contrast .uk-subnav-pill>.uk-active>a{background:#fff;color:#444}.uk-contrast .uk-list-line>li:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-contrast .uk-form input:not([type]),.uk-contrast .uk-form input[type=text],.uk-contrast .uk-form input[type=password],.uk-contrast .uk-form input[type=email],.uk-contrast .uk-form input[type=url],.uk-contrast .uk-form input[type=search],.uk-contrast .uk-form input[type=tel],.uk-contrast .uk-form input[type=number],.uk-contrast .uk-form input[type=datetime],.uk-contrast .uk-form input[type=datetime-local],.uk-contrast .uk-form input[type=date],.uk-contrast .uk-form input[type=month],.uk-contrast .uk-form input[type=time],.uk-contrast .uk-form input[type=week],.uk-contrast .uk-form input[type=color],.uk-contrast .uk-form select,.uk-contrast .uk-form textarea{border-color:rgba(255,255,255,.8);background:rgba(255,255,255,.8);color:#444;background-clip:padding-box}.uk-contrast .uk-form input:not([type]):focus,.uk-contrast .uk-form input[type=text]:focus,.uk-contrast .uk-form input[type=password]:focus,.uk-contrast .uk-form input[type=email]:focus,.uk-contrast .uk-form input[type=url]:focus,.uk-contrast .uk-form input[type=search]:focus,.uk-contrast .uk-form input[type=tel]:focus,.uk-contrast .uk-form input[type=number]:focus,.uk-contrast .uk-form input[type=datetime]:focus,.uk-contrast .uk-form input[type=datetime-local]:focus,.uk-contrast .uk-form input[type=date]:focus,.uk-contrast .uk-form input[type=month]:focus,.uk-contrast .uk-form input[type=time]:focus,.uk-contrast .uk-form input[type=week]:focus,.uk-contrast .uk-form input[type=color]:focus,.uk-contrast .uk-form select:focus,.uk-contrast .uk-form textarea:focus{border-color:#fff;background:#fff;color:#444}.uk-contrast .uk-form :-ms-input-placeholder{color:rgba(68,68,68,.7)!important}.uk-contrast .uk-form ::-moz-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-form ::-webkit-input-placeholder{color:rgba(68,68,68,.7)}.uk-contrast .uk-button{color:#444;background:#fff}.uk-contrast .uk-button:focus,.uk-contrast .uk-button:hover{background-color:rgba(255,255,255,.8);color:#444}.uk-contrast .uk-button.uk-active,.uk-contrast .uk-button:active{background-color:rgba(255,255,255,.7);color:#444}.uk-contrast .uk-button-primary{background-color:#00a8e6;color:#fff}.uk-contrast .uk-button-primary:focus,.uk-contrast .uk-button-primary:hover{background-color:#35b3ee;color:#fff}.uk-contrast .uk-button-primary.uk-active,.uk-contrast .uk-button-primary:active{background-color:#0091ca;color:#fff}.uk-contrast .uk-icon-hover{color:rgba(255,255,255,.7)}.uk-contrast .uk-icon-hover:hover{color:#fff}.uk-contrast .uk-icon-button{background:#fff;color:#444}.uk-contrast .uk-icon-button:focus,.uk-contrast .uk-icon-button:hover{background-color:rgba(255,255,255,.8);color:#444}.uk-contrast .uk-icon-button:active{background-color:rgba(255,255,255,.7);color:#444}.uk-contrast .uk-text-muted{color:rgba(255,255,255,.6)!important}.uk-contrast .uk-text-primary{color:#2d7091!important}@media print{*{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/media/uikit/fonts/FontAwesome.otf b/media/uikit/fonts/FontAwesome.otf deleted file mode 100644 index f7936cc..0000000 Binary files a/media/uikit/fonts/FontAwesome.otf and /dev/null differ diff --git a/media/uikit/fonts/fontawesome-webfont.eot b/media/uikit/fonts/fontawesome-webfont.eot deleted file mode 100644 index 33b2bb8..0000000 Binary files a/media/uikit/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/media/uikit/fonts/fontawesome-webfont.woff b/media/uikit/fonts/fontawesome-webfont.woff deleted file mode 100644 index 8b280b9..0000000 Binary files a/media/uikit/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/media/uikit/fonts/fontawesome-webfont.woff2 b/media/uikit/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 3311d58..0000000 Binary files a/media/uikit/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/media/uikit/js/components/accordion.min.js b/media/uikit/js/components/accordion.min.js deleted file mode 100644 index 7da0724..0000000 --- a/media/uikit/js/components/accordion.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-accordion",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";function i(i){var o=t.$(i),e="auto";if(o.is(":visible"))e=o.outerHeight();else{var a={position:o.css("position"),visibility:o.css("visibility"),display:o.css("display")};e=o.css({position:"absolute",visibility:"hidden",display:"block"}).outerHeight(),o.css(a)}return e}return t.component("accordion",{defaults:{showfirst:!0,collapse:!0,animate:!0,easing:"swing",duration:300,toggle:".uk-accordion-title",containers:".uk-accordion-content",clsactive:"uk-active"},boot:function(){t.ready(function(i){setTimeout(function(){t.$("[data-uk-accordion]",i).each(function(){var i=t.$(this);i.data("accordion")||t.accordion(i,t.Utils.options(i.attr("data-uk-accordion")))})},0)})},init:function(){var i=this;this.element.on("click.uikit.accordion",this.options.toggle,function(o){o.preventDefault(),i.toggleItem(t.$(this).data("wrapper"),i.options.animate,i.options.collapse)}),this.update(),this.options.showfirst&&this.toggleItem(this.toggle.eq(0).data("wrapper"),!1,!1)},toggleItem:function(o,e,a){var n=this;o.data("toggle").toggleClass(this.options.clsactive);var s=o.data("toggle").hasClass(this.options.clsactive);a&&(this.toggle.not(o.data("toggle")).removeClass(this.options.clsactive),this.content.not(o.data("content")).parent().stop().css("overflow","hidden").animate({height:0},{easing:this.options.easing,duration:e?this.options.duration:0}).attr("aria-expanded","false")),o.stop().css("overflow","hidden"),e?o.animate({height:s?i(o.data("content")):0},{easing:this.options.easing,duration:this.options.duration,complete:function(){s&&(o.css({overflow:"",height:"auto"}),t.Utils.checkDisplay(o.data("content"))),n.trigger("display.uk.check")}}):(o.height(s?"auto":0),s&&(o.css({overflow:""}),t.Utils.checkDisplay(o.data("content"))),this.trigger("display.uk.check")),o.attr("aria-expanded",s),this.element.trigger("toggle.uk.accordion",[s,o.data("toggle"),o.data("content")])},update:function(){var i,o,e,a=this;this.toggle=this.find(this.options.toggle),this.content=this.find(this.options.containers),this.content.each(function(n){i=t.$(this),i.parent().data("wrapper")?o=i.parent():(o=t.$(this).wrap('
            ').parent(),o.attr("aria-expanded","false")),e=a.toggle.eq(n),o.data("toggle",e),o.data("content",i),e.data("wrapper",o),i.data("wrapper",o)}),this.element.trigger("update.uk.accordion",[this])}}),t.accordion}); \ No newline at end of file diff --git a/media/uikit/js/components/autocomplete.min.js b/media/uikit/js/components/autocomplete.min.js deleted file mode 100644 index 2752df4..0000000 --- a/media/uikit/js/components/autocomplete.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-autocomplete",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";var e;return t.component("autocomplete",{defaults:{minLength:3,param:"search",method:"post",delay:300,loadingClass:"uk-loading",flipDropdown:!1,skipClass:"uk-skip",hoverClass:"uk-active",source:null,renderer:null,template:''},visible:!1,value:null,selected:null,boot:function(){t.$html.on("focus.autocomplete.uikit","[data-uk-autocomplete]",function(){var e=t.$(this);if(!e.data("autocomplete")){t.autocomplete(e,t.Utils.options(e.attr("data-uk-autocomplete")))}}),t.$html.on("click.autocomplete.uikit",function(t){e&&t.target!=e.input[0]&&e.hide()})},init:function(){var e=this,i=!1,s=t.Utils.debounce(function(){return i?i=!1:(e.handle(),void 0)},this.options.delay);this.dropdown=this.find(".uk-dropdown"),this.template=this.find('script[type="text/autocomplete"]').html(),this.template=t.Utils.template(this.template||this.options.template),this.input=this.find("input:first").attr("autocomplete","off"),this.dropdown.length||(this.dropdown=t.$('
            ').appendTo(this.element)),this.options.flipDropdown&&this.dropdown.addClass("uk-dropdown-flip"),this.dropdown.attr("aria-expanded","false"),this.input.on({keydown:function(t){if(t&&t.which&&!t.shiftKey)switch(t.which){case 13:i=!0,e.selected&&(t.preventDefault(),e.select());break;case 38:t.preventDefault(),e.pick("prev",!0);break;case 40:t.preventDefault(),e.pick("next",!0);break;case 27:case 9:e.hide()}},keyup:s}),this.dropdown.on("click",".uk-autocomplete-results > *",function(){e.select()}),this.dropdown.on("mouseover",".uk-autocomplete-results > *",function(){e.pick(t.$(this))}),this.triggercomplete=s},handle:function(){var t=this,e=this.value;return this.value=this.input.val(),this.value.lengtha-1?o.length-1:a-1)}else n=o["next"==e?"first":"last"]();n=t.$(n)}}else n=e;if(n&&n.length&&(this.selected=n,o.removeClass(this.options.hoverClass),this.selected.addClass(this.options.hoverClass),i)){var l=n.position().top,h=s.dropdown.scrollTop(),r=s.dropdown.height();(l>r||0>l)&&s.dropdown.scrollTop(h+l)}},select:function(){if(this.selected){var t=this.selected.data();this.trigger("selectitem.uk.autocomplete",[t,this]),t.value&&this.input.val(t.value).trigger("change"),this.hide()}},show:function(){return this.visible?void 0:(this.visible=!0,this.element.addClass("uk-open"),e&&e!==this&&e.hide(),e=this,this.dropdown.attr("aria-expanded","true"),this)},hide:function(){return this.visible?(this.visible=!1,this.element.removeClass("uk-open"),e===this&&(e=!1),this.dropdown.attr("aria-expanded","false"),this):void 0},request:function(){var e=this,i=function(t){t&&e.render(t),e.element.removeClass(e.options.loadingClass)};if(this.element.addClass(this.options.loadingClass),this.options.source){var s=this.options.source;switch(typeof this.options.source){case"function":this.options.source.apply(this,[i]);break;case"object":if(s.length){var o=[];s.forEach(function(t){t.value&&-1!=t.value.toLowerCase().indexOf(e.value.toLowerCase())&&o.push(t)}),i(o)}break;case"string":var n={};n[this.options.param]=this.value,t.$.ajax({url:this.options.source,data:n,type:this.options.method,dataType:"json"}).done(function(t){i(t||[])});break;default:i(null)}}else this.element.removeClass(e.options.loadingClass)},render:function(t){return this.dropdown.empty(),this.selected=!1,this.options.renderer?this.options.renderer.apply(this,[t]):t&&t.length&&(this.dropdown.append(this.template({items:t})),this.show(),this.trigger("show.uk.autocomplete")),this}}),t.autocomplete}); \ No newline at end of file diff --git a/media/uikit/js/components/form-password.js b/media/uikit/js/components/form-password.js deleted file mode 100644 index 38d0549..0000000 --- a/media/uikit/js/components/form-password.js +++ /dev/null @@ -1,66 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -(function(addon) { - - var component; - - if (window.UIkit) { - component = addon(UIkit); - } - - if (typeof define == "function" && define.amd) { - define("uikit-form-password", ["uikit"], function(){ - return component || addon(UIkit); - }); - } - -})(function(UI){ - - "use strict"; - - UI.component('formPassword', { - - defaults: { - "lblShow": "Show", - "lblHide": "Hide" - }, - - boot: function() { - // init code - UI.$html.on("click.formpassword.uikit", "[data-uk-form-password]", function(e) { - - var ele = UI.$(this); - - if (!ele.data("formPassword")) { - - e.preventDefault(); - - var obj = UI.formPassword(ele, UI.Utils.options(ele.attr("data-uk-form-password"))); - ele.trigger("click"); - } - }); - }, - - init: function() { - - var $this = this; - - this.on("click", function(e) { - - e.preventDefault(); - - if($this.input.length) { - var type = $this.input.attr("type"); - $this.input.attr("type", type=="text" ? "password":"text"); - $this.element.text($this.options[type=="text" ? "lblShow":"lblHide"]); - } - }); - - this.input = this.element.next("input").length ? this.element.next("input") : this.element.prev("input"); - this.element.text(this.options[this.input.is("[type='password']") ? "lblShow":"lblHide"]); - - this.element.data("formPassword", this); - } - }); - - return UI.formPassword; -}); diff --git a/media/uikit/js/components/form-password.min.js b/media/uikit/js/components/form-password.min.js deleted file mode 100644 index a57ba50..0000000 --- a/media/uikit/js/components/form-password.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-form-password",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";return t.component("formPassword",{defaults:{lblShow:"Show",lblHide:"Hide"},boot:function(){t.$html.on("click.formpassword.uikit","[data-uk-form-password]",function(i){var e=t.$(this);if(!e.data("formPassword")){i.preventDefault();{t.formPassword(e,t.Utils.options(e.attr("data-uk-form-password")))}e.trigger("click")}})},init:function(){var t=this;this.on("click",function(i){if(i.preventDefault(),t.input.length){var e=t.input.attr("type");t.input.attr("type","text"==e?"password":"text"),t.element.text(t.options["text"==e?"lblShow":"lblHide"])}}),this.input=this.element.next("input").length?this.element.next("input"):this.element.prev("input"),this.element.text(this.options[this.input.is("[type='password']")?"lblShow":"lblHide"]),this.element.data("formPassword",this)}}),t.formPassword}); \ No newline at end of file diff --git a/media/uikit/js/components/form-select.js b/media/uikit/js/components/form-select.js deleted file mode 100644 index ddafff8..0000000 --- a/media/uikit/js/components/form-select.js +++ /dev/null @@ -1,70 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -(function(addon) { - - var component; - - if (window.UIkit) { - component = addon(UIkit); - } - - if (typeof define == "function" && define.amd) { - define("uikit-form-select", ["uikit"], function(){ - return component || addon(UIkit); - }); - } - -})(function(UI){ - - "use strict"; - - UI.component('formSelect', { - - defaults: { - 'target': '>span:first', - 'activeClass': 'uk-active' - }, - - boot: function() { - // init code - UI.ready(function(context) { - - UI.$("[data-uk-form-select]", context).each(function(){ - - var ele = UI.$(this); - - if (!ele.data("formSelect")) { - var obj = UI.formSelect(ele, UI.Utils.options(ele.attr("data-uk-form-select"))); - } - }); - }); - }, - - init: function() { - var $this = this; - - this.target = this.find(this.options.target); - this.select = this.find('select'); - - // init + on change event - this.select.on("change", (function(){ - - var select = $this.select[0], fn = function(){ - - try { - $this.target.text(select.options[select.selectedIndex].text); - } catch(e) {} - - $this.element[$this.select.val() ? 'addClass':'removeClass']($this.options.activeClass); - - return fn; - }; - - return fn(); - })()); - - this.element.data("formSelect", this); - } - }); - - return UI.formSelect; -}); diff --git a/media/uikit/js/components/form-select.min.js b/media/uikit/js/components/form-select.min.js deleted file mode 100644 index fc09bfb..0000000 --- a/media/uikit/js/components/form-select.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-form-select",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";return t.component("formSelect",{defaults:{target:">span:first",activeClass:"uk-active"},boot:function(){t.ready(function(e){t.$("[data-uk-form-select]",e).each(function(){var e=t.$(this);if(!e.data("formSelect")){t.formSelect(e,t.Utils.options(e.attr("data-uk-form-select")))}})})},init:function(){var t=this;this.target=this.find(this.options.target),this.select=this.find("select"),this.select.on("change",function(){var e=t.select[0],i=function(){try{t.target.text(e.options[e.selectedIndex].text)}catch(n){}return t.element[t.select.val()?"addClass":"removeClass"](t.options.activeClass),i};return i()}()),this.element.data("formSelect",this)}}),t.formSelect}); \ No newline at end of file diff --git a/media/uikit/js/components/grid.min.js b/media/uikit/js/components/grid.min.js deleted file mode 100644 index ce3bbde..0000000 --- a/media/uikit/js/components/grid.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-grid",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";function i(t){return e(t)}t.component("grid",{defaults:{colwidth:"auto",animation:!0,duration:300,gutter:0,controls:!1,filter:!1},boot:function(){t.ready(function(i){t.$("[data-uk-grid]",i).each(function(){var i=t.$(this);if(!i.data("grid")){t.grid(i,t.Utils.options(i.attr("data-uk-grid")))}})})},init:function(){var i=this,e=String(this.options.gutter).trim().split(" ");this.gutterv=parseInt(e[0],10),this.gutterh=parseInt(e[1]||e[0],10),this.element.css({position:"relative"}),this.controls=null,this.options.controls&&(this.controls=t.$(this.options.controls),this.controls.on("click","[data-uk-filter]",function(e){e.preventDefault(),i.filter(t.$(this).data("ukFilter"))}),this.controls.on("click","[data-uk-sort]",function(e){e.preventDefault();var n=t.$(this).attr("data-uk-sort").split(":");i.sort(n[0],n[1])})),t.$win.on("load resize orientationchange",t.Utils.debounce(function(){i.currentfilter?i.filter(i.currentfilter):this.updateLayout()}.bind(this),100)),this.on("display.uk.check",function(){i.element.is(":visible")&&i.updateLayout()}),t.$html.on("changed.uk.dom",function(){i.updateLayout()}),this.options.filter!==!1?this.filter(this.options.filter):this.updateLayout()},_prepareElements:function(){var t,i=this.element.children(":not([data-grid-prepared])");i.length&&(t={position:"absolute","box-sizing":"border-box",width:"auto"==this.options.colwidth?"":this.options.colwidth},this.options.gutter&&(t["padding-left"]=this.gutterh,t["padding-bottom"]=this.gutterv,this.element.css("margin-left",-1*this.gutterh)),i.attr("data-grid-prepared","true").css(t))},updateLayout:function(e){this._prepareElements(),e=e||this.element.children(":visible");var n,r,o,a,s,d,h,u,l=e,f=this.element.width()+2*this.gutterh+2,c=0,p=0,g=[];this.trigger("beforeupdate.uk.grid",[l]),l.each(function(){for(u=i(this),n=t.$(this),r=u.outerWidth,o=u.outerHeight,c=0,p=0,s=0,h=g.length;h>s;s++)a=g[s],c<=a.aX&&(c=a.aX),c+r>f&&(c=0),p<=a.aY&&(p=a.aY);g.push({ele:n,top:p,left:c,width:r,height:o,aY:p+o,aX:c+r})});var m,v=0;for(s=0,h=g.length;h>s;s++){for(a=g[s],p=0,d=0;s>d;d++)m=g[d],a.left-1&&(o=!0)})),r[o?"visible":"hidden"].push(e)}),r.hidden=t.$(r.hidden).map(function(){return this[0]}),r.visible=t.$(r.visible).map(function(){return this[0]}),r.hidden.attr("aria-hidden","true").filter(":visible").fadeOut(this.options.duration),r.visible.attr("aria-hidden","false").filter(":hidden").css("opacity",0).show(),e.updateLayout(r.visible),this.controls&&this.controls.length&&this.controls.find("[data-uk-filter]").removeClass("uk-active").filter('[data-uk-filter="'+i+'"]').addClass("uk-active")},sort:function(i,e){e=e||1,"string"==typeof e&&(e="desc"==e.toLowerCase()?-1:1);var n=this.element.children();n.sort(function(n,r){return n=t.$(n),r=t.$(r),(r.data(i)||"")<(n.data(i)||"")?e:-1*e}).appendTo(this.element),this.updateLayout(n.filter(":visible")),this.controls&&this.controls.length&&this.controls.find("[data-uk-sort]").removeClass("uk-active").filter('[data-uk-sort="'+i+":"+(-1==e?"desc":"asc")+'"]').addClass("uk-active")}});var e=function(){function t(t){if(t){if("string"==typeof u[t])return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var i,e=0,n=h.length;n>e;e++)if(i=h[e]+t,"string"==typeof u[i])return i}}function i(t){var i=parseFloat(t),e=-1===t.indexOf("%")&&!isNaN(i);return e&&i}function e(){}function n(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},i=0,e=f.length;e>i;i++){var n=f[i];t[n]=0}return t}function r(){if(!c){c=!0;var e=window.getComputedStyle;if(a=function(){var t=e?function(t){return e(t,null)}:function(t){return t.currentStyle};return function(i){var e=t(i);return e||l("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}}(),s=t("boxSizing")){var n=document.createElement("div");n.style.width="200px",n.style.padding="1px 2px 3px 4px",n.style.borderStyle="solid",n.style.borderWidth="1px 2px 3px 4px",n.style[s]="border-box";var r=document.body||document.documentElement;r.appendChild(n);var o=a(n);d=200===i(o.width),r.removeChild(n)}}}function o(t){if(r(),"string"==typeof t&&(t=document.querySelector(t)),t&&"object"==typeof t&&t.nodeType){var e=a(t);if("none"===e.display)return n();var o={};o.width=t.offsetWidth,o.height=t.offsetHeight;for(var h=o.isBorderBox=!(!s||!e[s]||"border-box"!==e[s]),u=0,l=f.length;l>u;u++){var c=f[u],p=e[c],g=parseFloat(p);o[c]=isNaN(g)?0:g}var m=o.paddingLeft+o.paddingRight,v=o.paddingTop+o.paddingBottom,b=o.marginLeft+o.marginRight,y=o.marginTop+o.marginBottom,k=o.borderLeftWidth+o.borderRightWidth,w=o.borderTopWidth+o.borderBottomWidth,x=h&&d,W=i(e.width);W!==!1&&(o.width=W+(x?0:m+k));var L=i(e.height);return L!==!1&&(o.height=L+(x?0:v+w)),o.innerWidth=o.width-(m+k),o.innerHeight=o.height-(v+w),o.outerWidth=o.width+b,o.outerHeight=o.height+y,o}}var a,s,d,h="Webkit Moz ms Ms O".split(" "),u=document.documentElement.style,l="undefined"==typeof console?e:function(t){console.error(t)},f=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],c=!1;return o}()}); \ No newline at end of file diff --git a/media/uikit/js/components/htmleditor.min.js b/media/uikit/js/components/htmleditor.min.js deleted file mode 100644 index a33d65f..0000000 --- a/media/uikit/js/components/htmleditor.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-htmleditor",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";var e=[];return t.component("htmleditor",{defaults:{iframe:!1,mode:"split",markdown:!1,autocomplete:!0,height:500,maxsplitsize:1e3,codemirror:{mode:"htmlmixed",lineWrapping:!0,dragDrop:!1,autoCloseTags:!0,matchTags:!0,autoCloseBrackets:!0,matchBrackets:!0,indentUnit:4,indentWithTabs:!1,tabSize:4,hintOptions:{completionSingle:!1}},toolbar:["bold","italic","strike","link","image","blockquote","listUl","listOl"],lblPreview:"Preview",lblCodeview:"HTML",lblMarkedview:"Markdown"},boot:function(){t.ready(function(e){t.$("textarea[data-uk-htmleditor]",e).each(function(){var e,i=t.$(this);i.data("htmleditor")||(e=t.htmleditor(i,t.Utils.options(i.attr("data-uk-htmleditor"))))})})},init:function(){var i=this,o=t.components.htmleditor.template;this.CodeMirror=this.options.CodeMirror||CodeMirror,this.buttons={},o=o.replace(/\{:lblPreview\}/g,this.options.lblPreview),o=o.replace(/\{:lblCodeview\}/g,this.options.lblCodeview),this.htmleditor=t.$(o),this.content=this.htmleditor.find(".uk-htmleditor-content"),this.toolbar=this.htmleditor.find(".uk-htmleditor-toolbar"),this.preview=this.htmleditor.find(".uk-htmleditor-preview").children().eq(0),this.code=this.htmleditor.find(".uk-htmleditor-code"),this.element.before(this.htmleditor).appendTo(this.code),this.editor=this.CodeMirror.fromTextArea(this.element[0],this.options.codemirror),this.editor.htmleditor=this,this.editor.on("change",t.Utils.debounce(function(){i.render()},150)),this.editor.on("change",function(){i.editor.save(),i.element.trigger("input")}),this.code.find(".CodeMirror").css("height",this.options.height),this.options.iframe?(this.iframe=t.$(''),this.preview.append(this.iframe),this.iframe[0].contentWindow.document.open(),this.iframe[0].contentWindow.document.close(),this.preview.container=t.$(this.iframe[0].contentWindow.document).find("body"),"string"==typeof this.options.iframe&&this.preview.container.parent().append('')):this.preview.container=this.preview,t.$win.on("resize load",t.Utils.debounce(function(){i.fit()},200));var r=this.iframe?this.preview.container:i.preview.parent(),n=this.code.find(".CodeMirror-sizer"),l=this.code.find(".CodeMirror-scroll").on("scroll",t.Utils.debounce(function(){if("tab"!=i.htmleditor.attr("data-mode")){var t=n.height()-l.height(),e=r[0].scrollHeight-(i.iframe?i.iframe.height():r.height()),o=e/t,s=l.scrollTop()*o;r.scrollTop(s)}},10));this.htmleditor.on("click",".uk-htmleditor-button-code, .uk-htmleditor-button-preview",function(e){e.preventDefault(),"tab"==i.htmleditor.attr("data-mode")&&(i.htmleditor.find(".uk-htmleditor-button-code, .uk-htmleditor-button-preview").removeClass("uk-active").filter(this).addClass("uk-active"),i.activetab=t.$(this).hasClass("uk-htmleditor-button-code")?"code":"preview",i.htmleditor.attr("data-active-tab",i.activetab),i.editor.refresh())}),this.htmleditor.on("click","a[data-htmleditor-button]",function(){i.code.is(":visible")&&i.trigger("action."+t.$(this).data("htmleditor-button"),[i.editor])}),this.preview.parent().css("height",this.code.height()),this.options.autocomplete&&this.CodeMirror.showHint&&this.CodeMirror.hint&&this.CodeMirror.hint.html&&this.editor.on("inputRead",t.Utils.debounce(function(){var t=i.editor.getDoc(),e=t.getCursor(),o=i.CodeMirror.innerMode(i.editor.getMode(),i.editor.getTokenAt(e).state).mode.name;if("xml"==o){var r=i.editor.getCursor(),n=i.editor.getTokenAt(r);("<"==n.string.charAt(0)||"attribute"==n.type)&&i.CodeMirror.showHint(i.editor,i.CodeMirror.hint.html,{completeSingle:!1})}},100)),this.debouncedRedraw=t.Utils.debounce(function(){i.redraw()},5),this.on("init.uk.component",function(){i.redraw()}),this.element.attr("data-uk-check-display",1).on("display.uk.check",function(){this.htmleditor.is(":visible")&&this.fit()}.bind(this)),e.push(this)},addButton:function(t,e){this.buttons[t]=e},addButtons:function(e){t.$.extend(this.buttons,e)},replaceInPreview:function(t,e){function i(t){var e=o.getValue().substring(0,t).split("\n");return{line:e.length-1,ch:e[e.length-1].length}}var o=this.editor,r=[],n=o.getValue(),l=-1;return this.currentvalue=this.currentvalue.replace(t,function(){l=n.indexOf(arguments[0],++l);var t={matches:arguments,from:i(l),to:i(l+arguments[0].length),replace:function(e){o.replaceRange(e,t.from,t.to)},inRange:function(e){return e.line===t.from.line&&e.line===t.to.line?e.ch>=t.from.ch&&e.ch=t.from.ch||e.line>t.from.line&&e.line'+t.buttons[i].label+"")}}),this.toolbar.html(e.join("\n"))}},fit:function(){var t=this.options.mode;"split"==t&&this.htmleditor.width()','
            ','
              ','
              ','","
              ","
              ",'
              ','
              ','
              ',"
              ","
              "].join(""),t.plugin("htmleditor","base",{init:function(e){function i(t,i,o){e.on("action."+t,function(){"html"==e.getCursorMode()&&e["replaceLine"==o?"replaceLine":"replaceSelection"](i)})}e.addButtons({fullscreen:{title:"Fullscreen",label:''},bold:{title:"Bold",label:''},italic:{title:"Italic",label:''},strike:{title:"Strikethrough",label:''},blockquote:{title:"Blockquote",label:''},link:{title:"Link",label:''},image:{title:"Image",label:''},listUl:{title:"Unordered List",label:''},listOl:{title:"Ordered List",label:''}}),i("bold","$1"),i("italic","$1"),i("strike","$1"),i("blockquote","

              $1

              ","replaceLine"),i("link",'$1'),i("image",'$1');var o=function(){if("html"==e.getCursorMode()){for(var t=e.editor,i=t.getDoc().getCursor(!0),o=t.getDoc().getCursor(!1),r=i.line;r"+t.getLine(r)+"",{line:r,ch:0},{line:r,ch:t.getLine(r).length});t.setCursor({line:o.line,ch:t.getLine(o.line).length}),t.focus()}};e.on("action.listUl",function(){o()}),e.on("action.listOl",function(){o()}),e.htmleditor.on("click",'a[data-htmleditor-button="fullscreen"]',function(){e.htmleditor.toggleClass("uk-htmleditor-fullscreen");var i=e.editor.getWrapperElement();if(e.htmleditor.hasClass("uk-htmleditor-fullscreen"))e.editor.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:i.style.width,height:i.style.height},i.style.width="",i.style.height=e.content.height()+"px",document.documentElement.style.overflow="hidden";else{document.documentElement.style.overflow="";var o=e.editor.state.fullScreenRestore;i.style.width=o.width,i.style.height=o.height,window.scrollTo(o.scrollLeft,o.scrollTop)}setTimeout(function(){e.fit(),t.$win.trigger("resize")},50)}),e.addShortcut(["Ctrl-S","Cmd-S"],function(){e.element.trigger("htmleditor-save",[e])}),e.addShortcutAction("bold",["Ctrl-B","Cmd-B"])}}),t.plugin("htmleditor","markdown",{init:function(e){function i(){e.editor.setOption("mode","gfm"),e.htmleditor.find(".uk-htmleditor-button-code a").html(e.options.lblMarkedview)}function o(t,i,o){e.on("action."+t,function(){"markdown"==e.getCursorMode()&&e["replaceLine"==o?"replaceLine":"replaceSelection"](i)})}var r=e.options.mdparser||marked||null;r&&(e.options.markdown&&i(),o("bold","**$1**"),o("italic","*$1*"),o("strike","~~$1~~"),o("blockquote","> $1","replaceLine"),o("link","[$1](http://)"),o("image","![$1](http://)"),e.on("action.listUl",function(){if("markdown"==e.getCursorMode()){for(var t=e.editor,i=t.getDoc().getCursor(!0),o=t.getDoc().getCursor(!1),r=i.line;r0){var n,l=t.getLine(i.line-1);(n=l.match(/^(\d+)\./))&&(r=Number(n[1])+1)}for(var s=i.line;s','
              ','','
              ','
              ',"
              ","
              "].join("")).appendTo("body"),e.dialog=e.find(".uk-modal-dialog:first"),e.content=e.find(".uk-lightbox-content:first"),e.loader=e.find(".uk-modal-spinner:first"),e.closer=e.find(".uk-close.uk-close-alt"),e.modal=i.modal(e,{modal:!1}),e.on("swipeRight swipeLeft",function(i){e.lightbox["swipeLeft"==i.type?"next":"previous"]()}).on("click","[data-lightbox-previous], [data-lightbox-next]",function(t){t.preventDefault(),e.lightbox[i.$(this).is("[data-lightbox-next]")?"next":"previous"]()}),e.on("hide.uk.modal",function(){e.content.html("")}),i.$win.on("load resize orientationchange",i.Utils.debounce(function(){e.is(":visible")&&!i.Utils.isFullscreen()&&e.lightbox.fitSize()}.bind(this),100)),e.lightbox=t,e)}var e,o={};return i.component("lightbox",{defaults:{group:!1,duration:400,keyboard:!0},index:0,items:!1,boot:function(){i.$html.on("click","[data-uk-lightbox]",function(t){t.preventDefault();var e=i.$(this);e.data("lightbox")||i.lightbox(e,i.Utils.options(e.attr("data-uk-lightbox"))),e.data("lightbox").show(e)}),i.$doc.on("keyup",function(i){if(e&&e.is(":visible")&&e.lightbox.options.keyboard)switch(i.preventDefault(),i.keyCode){case 37:e.lightbox.previous();break;case 39:e.lightbox.next()}})},init:function(){var t=[];if(this.index=0,this.siblings=[],this.element&&this.element.length){var e=this.options.group?i.$(['[data-uk-lightbox*="'+this.options.group+'"]',"[data-uk-lightbox*='"+this.options.group+"']"].join(",")):this.element;e.each(function(){var e=i.$(this);t.push({source:e.attr("href"),title:e.attr("title"),type:e.attr("data-lightbox-type")||"auto",link:e})}),this.index=e.index(this.element),this.siblings=t}else this.options.group&&this.options.group.length&&(this.siblings=this.options.group);this.trigger("lightbox-init",[this])},show:function(e){this.modal=t(this),this.modal.dialog.stop(),this.modal.content.stop();var o,n,s=this,h=i.$.Deferred();e=e||0,"object"==typeof e&&this.siblings.forEach(function(i,t){e[0]===i.link[0]&&(e=t)}),0>e?e=this.siblings.length-e:this.siblings[e]||(e=0),n=this.siblings[e],o={lightbox:s,source:n.source,type:n.type,index:e,promise:h,title:n.title,item:n,meta:{content:"",width:null,height:null}},this.index=e,this.modal.content.empty(),this.modal.is(":visible")||(this.modal.content.css({width:"",height:""}).empty(),this.modal.modal.show()),this.modal.loader.removeClass("uk-hidden"),h.promise().done(function(){s.data=o,s.fitSize(o)}).fail(function(){o.meta.content='
              Loading resource failed!
              ',o.meta.width=400,o.meta.height=300,s.data=o,s.fitSize(o)}),s.trigger("showitem.uk.lightbox",[o])},fitSize:function(){var t=this,e=this.data,o=this.modal.dialog.outerWidth()-this.modal.dialog.width(),n=parseInt(this.modal.dialog.css("margin-top"),10),s=parseInt(this.modal.dialog.css("margin-bottom"),10),h=n+s,a=e.meta.content,d=t.options.duration;this.siblings.length>1&&(a=[a,'',''].join(""));var l,r,u=i.$("
               
              ").css({opacity:0,position:"absolute",top:0,left:0,width:"100%","max-width":t.modal.dialog.css("max-width"),padding:t.modal.dialog.css("padding"),margin:t.modal.dialog.css("margin")}),c=e.meta.width,g=e.meta.height;u.appendTo("body").width(),l=u.width(),r=window.innerHeight-h,u.remove(),this.modal.dialog.find(".uk-modal-caption").remove(),e.title&&(this.modal.dialog.append('
              '+e.title+"
              "),r-=this.modal.dialog.find(".uk-modal-caption").outerHeight()),lr&&(g=Math.floor(r),c=Math.ceil(e.meta.width*(r/e.meta.height))),this.modal.content.css("opacity",0).width(c).html(a),"iframe"==e.type&&this.modal.content.find("iframe:first").height(g);var m=g+o,p=Math.floor(window.innerHeight/2-m/2)-h;0>p&&(p=0),this.modal.closer.addClass("uk-hidden"),t.modal.data("mwidth")==c&&t.modal.data("mheight")==g&&(d=0),this.modal.dialog.animate({width:c+o,height:g+o,top:p},d,"swing",function(){t.modal.loader.addClass("uk-hidden"),t.modal.content.css({width:""}).animate({opacity:1},function(){t.modal.closer.removeClass("uk-hidden")}),t.modal.data({mwidth:c,mheight:g})})},next:function(){this.show(this.siblings[this.index+1]?this.index+1:0)},previous:function(){this.show(this.siblings[this.index-1]?this.index-1:this.siblings.length-1)}}),i.plugin("lightbox","image",{init:function(i){i.on("showitem.uk.lightbox",function(i,t){if("image"==t.type||t.source&&t.source.match(/\.(jpg|jpeg|png|gif|svg)$/i)){var e=function(i,e,o){t.meta={content:'',width:e,height:o},t.type="image",t.promise.resolve()};if(o[t.source])e(t.source,o[t.source].width,o[t.source].height);else{var n=new Image;n.onerror=function(){t.promise.reject("Loading image failed")},n.onload=function(){o[t.source]={width:n.width,height:n.height},e(t.source,o[t.source].width,o[t.source].height)},n.src=t.source}}})}}),i.plugin("lightbox","youtube",{init:function(i){var t=/(\/\/.*?youtube\.[a-z]+)\/watch\?v=([^&]+)&?(.*)/,e=/youtu\.be\/(.*)/;i.on("showitem.uk.lightbox",function(i,n){var s,h,a=function(i,t,e){n.meta={content:'',width:t,height:e},n.type="iframe",n.promise.resolve()};if((h=n.source.match(t))&&(s=h[2]),(h=n.source.match(e))&&(s=h[1]),s){if(o[s])a(s,o[s].width,o[s].height);else{var d=new Image;d.onerror=function(){o[s]={width:640,height:320},a(s,o[s].width,o[s].height)},d.onload=function(){o[s]={width:d.width,height:d.height},a(s,d.width,d.height)},d.src="//img.youtube.com/vi/"+s+"/0.jpg"}i.stopImmediatePropagation()}})}}),i.plugin("lightbox","vimeo",{init:function(t){var e,n=/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/;t.on("showitem.uk.lightbox",function(t,s){var h,a=function(i,t,e){s.meta={content:'',width:t,height:e},s.type="iframe",s.promise.resolve()};(e=s.source.match(n))&&(h=e[2],o[h]?a(h,o[h].width,o[h].height):i.$.ajax({type:"GET",url:"http://vimeo.com/api/oembed.json?url="+encodeURI(s.source),jsonp:"callback",dataType:"jsonp",success:function(i){o[h]={width:i.width,height:i.height},a(h,o[h].width,o[h].height)}}),t.stopImmediatePropagation())})}}),i.plugin("lightbox","video",{init:function(t){t.on("showitem.uk.lightbox",function(t,e){var n=function(i,t,o){e.meta={content:'',width:t,height:o},e.type="video",e.promise.resolve()};if("video"==e.type||e.source.match(/\.(mp4|webm|ogv)$/i))if(o[e.source])n(e.source,o[e.source].width,o[e.source].height);else var s=i.$('').attr("src",e.source).appendTo("body"),h=setInterval(function(){s[0].videoWidth&&(clearInterval(h),o[e.source]={width:s[0].videoWidth,height:s[0].videoHeight},n(e.source,o[e.source].width,o[e.source].height),s.remove())},20)})}}),i.lightbox.create=function(t,e){if(t){var o,n=[];return t.forEach(function(t){n.push(i.$.extend({source:"",title:"",type:"auto",link:!1},"string"==typeof t?{source:t}:t))}),o=i.lightbox(i.$.extend({},e,{group:n}))}},i.lightbox}); \ No newline at end of file diff --git a/media/uikit/js/components/nestable.min.js b/media/uikit/js/components/nestable.min.js deleted file mode 100644 index 30629de..0000000 --- a/media/uikit/js/components/nestable.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var s;window.UIkit&&(s=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-nestable",["uikit"],function(){return s||t(UIkit)})}(function(t){"use strict";var s,e="ontouchstart"in window,i=t.$html,l=[],a=t.$win,n=e?"touchstart":"mousedown",o=e?"touchmove":"mousemove",h=e?"touchend":"mouseup",r=e?"touchcancel":"mouseup";return t.component("nestable",{defaults:{listBaseClass:"uk-nestable",listClass:"uk-nestable-list",listItemClass:"uk-nestable-item",dragClass:"uk-nestable-dragged",movingClass:"uk-nestable-moving",handleClass:"",collapsedClass:"uk-collapsed",placeholderClass:"uk-nestable-placeholder",noDragClass:"uk-nestable-nodrag",group:!1,maxDepth:10,threshold:20,idlethreshold:10},boot:function(){t.$html.on("mousemove touchmove",function(){if(s){var e=s.offset().top;ewindow.innerHeight+t.$win.scrollTop()&&t.$win.scrollTop(t.$win.scrollTop()+Math.ceil(s.height()/2))}}),t.ready(function(s){t.$("[data-uk-nestable]",s).each(function(){var s=t.$(this);s.data("nestable")||t.nestable(s,t.Utils.options(s.attr("data-uk-nestable")))})})},init:function(){var i=this;Object.keys(this.options).forEach(function(t){-1!=String(t).indexOf("Class")&&(i.options["_"+t]="."+i.options[t])}),this.find(this.options._listItemClass).find(">ul").addClass(this.options.listClass),this.checkEmptyList(),this.reset(),this.element.data("nestable-group",this.options.group||t.Utils.uid("nestable-group")),this.find(this.options._listItemClass).each(function(){i.setParent(t.$(this))}),this.on("click","[data-nestable-action]",function(s){if(!i.dragEl&&(e||0===s.button)){s.preventDefault();var l=t.$(s.currentTarget),a=l.data("nestableAction"),n=l.closest(i.options._listItemClass);"collapse"===a&&i.collapseItem(n),"expand"===a&&i.expandItem(n),"toggle"===a&&i.toggleItem(n)}});var l=function(s){var l=t.$(s.target);s.target!==i.element[0]&&(l.is(i.options._noDragClass)||l.closest(i.options._noDragClass).length||l.is("[data-nestable-action]")||l.closest("[data-nestable-action]").length||(i.options.handleClass&&!l.hasClass(i.options.handleClass)&&i.options.handleClass&&(l=l.closest(i.options._handleClass)),!l.length||i.dragEl||!e&&0!==s.button||e&&1!==s.touches.length||(s.originalEvent&&s.originalEvent.touches&&(s=evt.originalEvent.touches[0]),i.delayMove=function(t){t.preventDefault(),i.dragStart(s),i.trigger("start.uk.nestable",[i]),i.delayMove=!1},i.delayMove.x=parseInt(s.pageX,10),i.delayMove.y=parseInt(s.pageY,10),i.delayMove.threshold=i.options.idlethreshold,s.preventDefault())))},d=function(t){t.originalEvent&&t.originalEvent.touches&&(t=t.originalEvent.touches[0]),i.delayMove&&(Math.abs(t.pageX-i.delayMove.x)>i.delayMove.threshold||Math.abs(t.pageY-i.delayMove.y)>i.delayMove.threshold)&&(window.getSelection().toString()?i.delayMove=!1:i.delayMove(t)),i.dragEl&&(t.preventDefault(),i.dragMove(t),i.trigger("move.uk.nestable",[i]))},p=function(t){i.dragEl&&(t.preventDefault(),i.dragStop(e?t.touches[0]:t)),s=!1,i.delayMove=!1};e?(this.element[0].addEventListener(n,l,!1),window.addEventListener(o,d,!1),window.addEventListener(h,p,!1),window.addEventListener(r,p,!1)):(this.on(n,l),a.on(o,d),a.on(h,p))},serialize:function(){var s,e=0,i=this,l=function(s,e){var a=[],n=s.children(i.options._listItemClass);return n.each(function(){for(var s,n=t.$(this),o={},h=n.children(i.options._listClass),r=0;r
            ").addClass(this.options.listClass+" "+this.options.dragClass).append(n.clone()),this.dragEl.css("width",n.width()),this.placeEl.addClass(this.options.placeholderClass),s=this.dragEl,this.tmpDragOnSiblings=[n[0].previousSibling,n[0].nextSibling],t.$body.append(this.dragEl),this.dragEl.css({left:o.left,top:o.top});var h,r,d=this.dragEl.find(this.options._listItemClass);for(h=0;hthis.dragDepth&&(this.dragDepth=r);i.addClass(this.options.movingClass)},dragStop:function(){var t=this.placeEl,s=this.placeEl.parents(this.options._listBaseClass+":first");this.placeEl.removeClass(this.options.placeholderClass),this.dragEl.remove(),this.element[0]!==s[0]?(s.trigger("change.uk.nestable",[t,"added",s,s.data("nestable")]),this.element.trigger("change.uk.nestable",[t,"removed",this.element,this])):this.element.trigger("change.uk.nestable",[t,"moved",this.element,this]),this.trigger("stop.uk.nestable",[this,t]),this.reset(),i.removeClass(this.options.movingClass)},dragMove:function(s){var e,i,a,n,o,h=this.options,r=this.mouse,d=this.dragRootEl?this.dragRootEl.data("nestable").options.maxDepth:h.maxDepth;this.dragEl.css({left:s.pageX-r.offsetX,top:s.pageY-r.offsetY}),r.lastX=r.nowX,r.lastY=r.nowY,r.nowX=s.pageX,r.nowY=s.pageY,r.distX=r.nowX-r.lastX,r.distY=r.nowY-r.lastY,r.lastDirX=r.dirX,r.lastDirY=r.dirY,r.dirX=0===r.distX?0:r.distX>0?1:-1,r.dirY=0===r.distY?0:r.distY>0?1:-1;var p=Math.abs(r.distX)>Math.abs(r.distY)?1:0;if(!r.moving)return r.dirAx=p,r.moving=!0,void 0;r.dirAx!==p?(r.distAxX=0,r.distAxY=0):(r.distAxX+=Math.abs(r.distX),0!==r.dirX&&r.dirX!==r.lastDirX&&(r.distAxX=0),r.distAxY+=Math.abs(r.distY),0!==r.dirY&&r.dirY!==r.lastDirY&&(r.distAxY=0)),r.dirAx=p,r.dirAx&&r.distAxX>=h.threshold&&(r.distAxX=0,a=this.placeEl.prev("li"),r.distX>0&&a.length&&!a.hasClass(h.collapsedClass)&&(e=a.find(h._listClass).last(),o=this.placeEl.parents(h._listClass+","+h._listBaseClass).length,o+this.dragDepth<=d&&(e.length?(e=a.children(h._listClass).last(),e.append(this.placeEl)):(e=t.$("
              ").addClass(h.listClass),e.append(this.placeEl),a.append(e),this.setParent(a)))),r.distX<0&&(n=this.placeEl.next("li"),n.length||(i=this.placeEl.parent(),this.placeEl.closest(h._listItemClass).after(this.placeEl),i.children().length||this.unsetParent(i.parent()))));var c=!1,g=this.dragEl.offset().left-(window.pageXOffset||document.scrollLeft||0),u=s.pageY-(window.pageYOffset||document.documentElement.scrollTop);if(this.pointEl=t.$(document.elementFromPoint(g,u)),h.handleClass&&this.pointEl.hasClass(h.handleClass))this.pointEl=this.pointEl.closest(h._listItemClass);else{var f=this.pointEl.closest(h._listItemClass);f.length&&(this.pointEl=f)}if(!this.placeEl.find(this.pointEl).length){if(this.pointEl.data("nestable")&&!this.pointEl.children().length)c=!0,this.checkEmptyList(this.pointEl);else if(!this.pointEl.length||!this.pointEl.hasClass(h.listItemClass))return;var m=this.element,v=this.pointEl.closest(this.options._listBaseClass),E=m[0]!==this.pointEl.closest(this.options._listBaseClass)[0];if(!r.dirAx||E||c){if(E&&h.group!==v.data("nestable-group"))return;if(l.push(m),o=this.dragDepth-1+this.pointEl.parents(h._listClass+","+h._listBaseClass).length,o>d)return;var C=s.pageY','',"
              ",""].join("")).data("notifyMessage",this),this.content(this.options.message),this.options.status&&(this.element.addClass("uk-notify-message-"+this.options.status),this.currentstatus=this.options.status),this.group=this.options.group,i[this.uuid]=this,e[this.options.pos]||(e[this.options.pos]=t.$('
              ').appendTo("body").on("click",".uk-notify-message",function(){var e=t.$(this).data("notifyMessage");e.element.trigger("manualclose.uk.notify",[e]),e.close()}))};return t.$.extend(n.prototype,{uuid:!1,element:!1,timout:!1,currentstatus:"",group:!1,show:function(){if(!this.element.is(":visible")){var t=this;e[this.options.pos].show().prepend(this.element);var i=parseInt(this.element.css("margin-bottom"),10);return this.element.css({opacity:0,"margin-top":-1*this.element.outerHeight(),"margin-bottom":0}).animate({opacity:1,"margin-top":0,"margin-bottom":i},function(){if(t.options.timeout){var e=function(){t.close()};t.timeout=setTimeout(e,t.options.timeout),t.element.hover(function(){clearTimeout(t.timeout)},function(){t.timeout=setTimeout(e,t.options.timeout)})}}),this}},close:function(t){var s=this,o=function(){s.element.remove(),e[s.options.pos].children().length||e[s.options.pos].hide(),s.options.onClose.apply(s,[]),s.element.trigger("close.uk.notify",[s]),delete i[s.uuid]};this.timeout&&clearTimeout(this.timeout),t?o():this.element.animate({opacity:0,"margin-top":-1*this.element.outerHeight(),"margin-bottom":0},function(){o()})},content:function(t){var e=this.element.find(">div");return t?(e.html(t),this):e.html()},status:function(t){return t?(this.element.removeClass("uk-notify-message-"+this.currentstatus).addClass("uk-notify-message-"+t),this.currentstatus=t,this):this.currentstatus}}),n.defaults={message:"",status:"",timeout:5e3,group:null,pos:"top-center",onClose:function(){}},t.notify=s,t.notify.message=n,t.notify.closeAll=o,s}); \ No newline at end of file diff --git a/media/uikit/js/components/pagination.min.js b/media/uikit/js/components/pagination.min.js deleted file mode 100644 index 220310b..0000000 --- a/media/uikit/js/components/pagination.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-pagination",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";return t.component("pagination",{defaults:{items:1,itemsOnPage:1,pages:0,displayedPages:3,edges:3,currentPage:1,lblPrev:!1,lblNext:!1,onSelectPage:function(){}},boot:function(){t.ready(function(e){t.$("[data-uk-pagination]",e).each(function(){var e=t.$(this);if(!e.data("pagination")){t.pagination(e,t.Utils.options(e.attr("data-uk-pagination")))}})})},init:function(){var e=this;this.pages=this.options.pages?this.options.pages:Math.ceil(this.options.items/this.options.itemsOnPage)?Math.ceil(this.options.items/this.options.itemsOnPage):1,this.currentPage=this.options.currentPage-1,this.halfDisplayed=this.options.displayedPages/2,this.on("click","a[data-page]",function(i){i.preventDefault(),e.selectPage(t.$(this).data("page"))}),this._render()},_getInterval:function(){return{start:Math.ceil(this.currentPage>this.halfDisplayed?Math.max(Math.min(this.currentPage-this.halfDisplayed,this.pages-this.options.displayedPages),0):0),end:Math.ceil(this.currentPage>this.halfDisplayed?Math.min(this.currentPage+this.halfDisplayed,this.pages):Math.min(this.options.displayedPages,this.pages))}},render:function(t){this.pages=t?t:this.pages,this._render()},selectPage:function(t,e){this.currentPage=t,this.render(e),this.options.onSelectPage.apply(this,[t]),this.trigger("select.uk.pagination",[t,this])},_render:function(){var t,e=this.options,i=this._getInterval();if(this.element.empty(),e.lblPrev&&this._append(e.currentPage-1,{text:e.lblPrev}),i.start>0&&e.edges>0){var s=Math.min(e.edges,i.start);for(t=0;s>t;t++)this._append(t);e.edges..."):i.start-e.edges==1&&this._append(e.edges)}for(t=i.start;t0){this.pages-e.edges>i.end&&this.pages-e.edges-i.end!=1?this.element.append("
            • ...
            • "):this.pages-e.edges-i.end==1&&this._append(i.end++);var a=Math.max(this.pages-e.edges,i.end);for(t=a;te?0:e'+a.text+"":'
            • '+a.text+"
            • ",this.element.append(s)}}),t.pagination}); \ No newline at end of file diff --git a/media/uikit/js/components/parallax.min.js b/media/uikit/js/components/parallax.min.js deleted file mode 100644 index 9964ffa..0000000 --- a/media/uikit/js/components/parallax.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-parallax",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";function e(e,a,r){var n,i,o,s,c,p,l,d=new Image;return i=e.element.css({"background-size":"cover","background-repeat":"no-repeat"}),n=i.css("background-image").replace(/^url\(/g,"").replace(/\)$/g,"").replace(/("|')/g,""),s=function(){var t=i.width(),n=i.height(),o="bg"==a?r.diff:r.diff/100*n;n+=o,t+=Math.ceil(o*c),n>t/c?(p=Math.ceil(n*c),l=n):(p=t,l=Math.ceil(t/c)),e.element.css({"background-size":p+"px "+l+"px"})},d.onerror=function(){},d.onload=function(){o={w:d.width,height:d.height},c=d.width/d.height,t.$win.on("load resize orientationchange",t.Utils.debounce(function(){s()},50)),s()},d.src=n,!0}function a(t,e,a){return t=n(t),e=n(e),a=a||0,r(t,e,a)}function r(t,e,a){var r="rgba("+parseInt(t[0]+a*(e[0]-t[0]),10)+","+parseInt(t[1]+a*(e[1]-t[1]),10)+","+parseInt(t[2]+a*(e[2]-t[2]),10)+","+(t&&e?parseFloat(t[3]+a*(e[3]-t[3])):1);return r+=")"}function n(t){var e,a;return a=(e=/#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/.exec(t))?[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16),1]:(e=/#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/.exec(t))?[17*parseInt(e[1],16),17*parseInt(e[2],16),17*parseInt(e[3],16),1]:(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(t))?[parseInt(e[1]),parseInt(e[2]),parseInt(e[3]),1]:(e=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9\.]*)\s*\)/.exec(t))?[parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10),parseFloat(e[4])]:l[t]||[255,255,255,0]}var i=[],o=!1,s=0,c=window.innerHeight,p=function(){s=t.$win.scrollTop(),window.requestAnimationFrame.apply(window,[function(){for(var t=0;t0&&"none"!==t}(),t.$doc.on("scrolling.uk.document",p),t.$win.on("load resize orientationchange",t.Utils.debounce(function(){c=window.innerHeight,p()},50)),t.ready(function(e){t.$("[data-uk-parallax]",e).each(function(){var e=t.$(this);if(!e.data("parallax")){t.parallax(e,t.Utils.options(e.attr("data-uk-parallax")))}})})},init:function(){this.base=this.options.target?t.$(this.options.target):this.element,this.props={},this.velocity=this.options.velocity||1;var e=["target","velocity","viewport","plugins","media"];Object.keys(this.options).forEach(function(t){if(-1===e.indexOf(t)){var a,r,n,i,o=String(this.options[t]).split(",");t.match(/color/i)?(a=o[1]?o[0]:this._getStartValue(t),r=o[1]?o[1]:o[0],a||(a="rgba(255,255,255,0)")):(a=parseFloat(o[1]?o[0]:this._getStartValue(t)),r=parseFloat(o[1]?o[1]:o[0]),i=r>a?r-a:a-r,n=r>a?1:-1),this.props[t]={start:a,end:r,dir:n,diff:i}}}.bind(this)),i.push(this)},process:function(){if(this.options.media)switch(typeof this.options.media){case"number":if(window.innerWidths+c?a=0:s>r+n?a=1:c>r+n?a=(c>s?s:s-c)/(r+n):(t=s+c-r,e=Math.round(t/((c+n)/100)),a=e/100),a},update:function(t){var r,n,i={transform:""},s=t*(1-(this.velocity-this.velocity*t));0>s&&(s=0),s>1&&(s=1),(void 0===this._percent||this._percent!=s)&&(Object.keys(this.props).forEach(function(c){switch(r=this.props[c],0===t?n=r.start:1===t?n=r.end:void 0!==r.diff&&(n=r.start+r.diff*s*r.dir),"bg"!=c&&"bgp"!=c||this._bgcover||(this._bgcover=e(this,c,r)),c){case"x":i.transform+=o?" translate3d("+n+"px, 0, 0)":" translateX("+n+"px)";break;case"xp":i.transform+=o?" translate3d("+n+"%, 0, 0)":" translateX("+n+"%)";break;case"y":i.transform+=o?" translate3d(0, "+n+"px, 0)":" translateY("+n+"px)";break;case"yp":i.transform+=o?" translate3d(0, "+n+"%, 0)":" translateY("+n+"%)";break;case"rotate":i.transform+=" rotate("+n+"deg)";break;case"scale":i.transform+=" scale("+n+")";break;case"bg":i["background-position"]="50% "+n+"px";break;case"bgp":i["background-position"]="50% "+n+"%";break;case"color":case"background-color":case"border-color":i[c]=a(r.start,r.end,s);break;default:i[c]=n}}.bind(this)),this.element.css(i),this._percent=s)},_getStartValue:function(t){var e=0;switch(t){case"scale":e=1;break;default:e=this.element.css(t)}return e||0}});var l={black:[0,0,0,1],blue:[0,0,255,1],brown:[165,42,42,1],cyan:[0,255,255,1],fuchsia:[255,0,255,1],gold:[255,215,0,1],green:[0,128,0,1],indigo:[75,0,130,1],khaki:[240,230,140,1],lime:[0,255,0,1],magenta:[255,0,255,1],maroon:[128,0,0,1],navy:[0,0,128,1],olive:[128,128,0,1],orange:[255,165,0,1],pink:[255,192,203,1],purple:[128,0,128,1],violet:[128,0,128,1],red:[255,0,0,1],silver:[192,192,192,1],white:[255,255,255,1],yellow:[255,255,0,1],transparent:[255,255,255,0]};return t.parallax}); \ No newline at end of file diff --git a/media/uikit/js/components/search.min.js b/media/uikit/js/components/search.min.js deleted file mode 100644 index 09fedd7..0000000 --- a/media/uikit/js/components/search.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(e){var s;window.UIkit&&(s=e(UIkit)),"function"==typeof define&&define.amd&&define("uikit-search",["uikit"],function(){return s||e(UIkit)})}(function(e){"use strict";e.component("search",{defaults:{msgResultsHeader:"Search Results",msgMoreResults:"More Results",msgNoResults:"No results found",template:'',renderer:function(e){var s=this.options;this.dropdown.append(this.template({items:e.results||[],msgResultsHeader:s.msgResultsHeader,msgMoreResults:s.msgMoreResults,msgNoResults:s.msgNoResults})),this.show()}},boot:function(){e.$html.on("focus.search.uikit","[data-uk-search]",function(){var s=e.$(this);if(!s.data("search")){e.search(s,e.Utils.options(s.attr("data-uk-search")))}})},init:function(){var s=this;this.autocomplete=e.autocomplete(this.element,this.options),this.autocomplete.dropdown.addClass("uk-dropdown-search"),this.autocomplete.input.on("keyup",function(){s.element[s.autocomplete.input.val()?"addClass":"removeClass"]("uk-active")}).closest("form").on("reset",function(){s.value="",s.element.removeClass("uk-active")}),this.on("selectitem.uk.autocomplete",function(e,t){t.url?location.href=t.url:t.moreresults&&s.autocomplete.input.closest("form").submit()}),this.element.data("search",this)}})}); \ No newline at end of file diff --git a/media/uikit/js/components/slider.min.js b/media/uikit/js/components/slider.min.js deleted file mode 100644 index 5159096..0000000 --- a/media/uikit/js/components/slider.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-slider",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";var i,e,s,n,a={};return t.component("slider",{defaults:{center:!1,threshold:10,infinite:!0,activecls:"uk-active"},boot:function(){t.ready(function(i){setTimeout(function(){t.$("[data-uk-slider]",i).each(function(){var i=t.$(this);i.data("slider")||t.slider(i,t.Utils.options(i.attr("data-uk-slider")))})},0)})},init:function(){var o=this;this.container=this.element.find(".uk-slider"),this.focus=0,t.$win.on("resize load",t.Utils.debounce(function(){o.resize(!0)},100)),this.on("click.uikit.slider","[data-uk-slider-item]",function(i){i.preventDefault();var e=t.$(this).attr("data-uk-slider-item");if(o.focus!=e)switch(e){case"next":case"previous":o["next"==e?"next":"previous"]();break;default:o.updateFocus(parseInt(slide,10))}}),this.container.on("touchstart mousedown",function(h){h.originalEvent&&h.originalEvent.touches&&(h=h.originalEvent.touches[0]),h.button&&2==h.button||!o.active||(s=t.$(h.target).is("a")?t.$(h.target):t.$(h.target).parents("a:first"),n=!1,s.length&&s.one("click",function(t){n&&t.preventDefault()}),e=function(t){n=!0,i=o,a={touchx:parseInt(t.pageX,10),dir:1,focus:o.focus,base:o.options.center?"center":"area"},t.originalEvent&&t.originalEvent.touches&&(t=t.originalEvent.touches[0]),i.element.data({"pointer-start":{x:parseInt(t.pageX,10),y:parseInt(t.pageY,10)},"pointer-pos-start":o.pos}),o.container.addClass("uk-drag"),e=!1},e.x=parseInt(h.pageX,10),e.threshold=o.options.threshold)}),this.resize(!0),this.on("display.uk.check",function(){o.element.is(":visible")&&o.resize(!0)}),this.element.find("a,img").attr("draggable","false")},resize:function(){var i,e,s,n,a=this,o=0,h=0;return this.items=this.container.children().filter(":visible"),this.vp=this.element[0].getBoundingClientRect().width,this.container.css({"min-width":"","min-height":""}),this.items.each(function(r){i=t.$(this),n=i.css({left:"",width:""})[0].getBoundingClientRect(),e=n.width,s=i.width(),h=Math.max(h,n.height),i.css({left:o,width:e}).data({idx:r,left:o,width:e,cwidth:s,area:o+e,center:o-(a.vp/2-s/2)}),o+=e}),this.container.css({"min-width":o,"min-height":h}),this.options.infinite&&o<=2*this.vp&&!this.itemsResized?(this.container.children().each(function(t){a.container.append(a.items.eq(t).clone(!0).attr("id",""))}).each(function(t){a.container.append(a.items.eq(t).clone(!0).attr("id",""))}),this.itemsResized=!0,this.resize()):(this.cw=o,this.pos=0,this.active=o>=this.vp,this.container.css({"-ms-transform":"","-webkit-transform":"",transform:""}),this.updateFocus(0),void 0)},updatePos:function(t){this.pos=t,this.container.css({"-ms-transform":"translateX("+t+"px)","-webkit-transform":"translateX("+t+"px)",transform:"translateX("+t+"px)"})},updateFocus:function(t,i){if(this.active){i=i||(t>this.focus?1:-1);var e,s,n=this.items.eq(t);if(this.options.infinite&&this.infinite(t,i),this.options.center)this.updatePos(-1*n.data("center")),this.items.filter("."+this.options.activecls).removeClass(this.options.activecls),n.addClass(this.options.activecls);else if(this.options.infinite)this.updatePos(-1*n.data("left"));else{for(e=0,s=t;sthis.vp)this.updatePos(-1*n.data("left"));else if(1==i){for(e=0,s=this.items.length-1;s>=0;s--)if(e+=this.items.eq(s).data("width"),e>=this.vp){t=s;break}this.updatePos(-1*this.items.eq(t).data("left"))}}this.focus=t,this.trigger("focusitem.uk.slider",[t,this.items.eq(t),this])}},next:function(){var t=this.items[this.focus+1]?this.focus+1:this.options.infinite?0:this.focus;this.updateFocus(t,1)},previous:function(){var t=this.items[this.focus-1]?this.focus-1:this.options.infinite?this.items[this.focus-1]?this.items-1:this.items.length-1:this.focus;this.updateFocus(t,-1)},infinite:function(t,i){var e,s=this,n=this.items.eq(t),a=t,o=[],h=0;if(1==i){for(e=0;ethis.vp));e++)a=a+1==this.items.length?0:a+1;o.length&&o.forEach(function(t){var i=n.data("area");t.css({left:i}).data({left:i,area:i+t.data("width"),center:i-(s.vp/2-t.data("cwidth")/2)}),n=t})}else{for(e=this.items.length-1;e>-1&&(h+=this.items.eq(a).data("width"),a!=t&&o.push(this.items.eq(a)),!(h>this.vp));e--)a=a-1==-1?this.items.length-1:a-1;o.length&&o.forEach(function(t){var i=n.data("left")-t.data("width");t.css({left:i}).data({left:i,area:i+t.data("width"),center:i-(s.vp/2-t.data("cwidth")/2)}),n=t})}}}),t.$doc.on("mousemove.uikit.slider touchmove.uikit.slider",function(t){if(t.originalEvent&&t.originalEvent.touches&&(t=t.originalEvent.touches[0]),e&&Math.abs(t.pageX-e.x)>e.threshold&&(window.getSelection().toString()?i=e=!1:e(t)),i){var s,n,o,h,r,c,f,d,u,l;if(t.clientX||t.clientY?s=t.clientX:(t.pageX||t.pageY)&&(s=t.pageX-document.body.scrollLeft-document.documentElement.scrollLeft),r=a.focus,n=s-i.element.data("pointer-start").x,o=i.element.data("pointer-pos-start")+n,h=s>i.element.data("pointer-start").x?-1:1,c=i.items.eq(a.focus),1==h)for(f=c.data("left")+Math.abs(n),d=0,u=a.focus;df){r=u;break}u=u+1==i.items.length?0:u+1}else for(f=c.data("left")-Math.abs(n),d=0,u=a.focus;da.diff){o=n;break}n=n+1==i.items.length?0:n+1}else for(s=0,n=a.focus;si)return null;for(;a>s;)e=s%i,e?o[n][e]=t[s]:o[++n]=[t[s]],s++;for(s=0,a=o.length;a>s;)o[s]=jQuery(o[s]),s++;return o}var s;t.component("slideset",{defaults:{"default":1,animation:"fade",duration:200,filter:"",delay:!1,controls:!1,autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0},sets:[],boot:function(){t.ready(function(i){t.$("[data-uk-slideset]",i).each(function(){var i=t.$(this);if(!i.data("slideset")){t.slideset(i,t.Utils.options(i.attr("data-uk-slideset")))}})})},init:function(){var i=this;this.activeSet=!1,this.list=this.element.find(".uk-slideset"),this.nav=this.element.find(".uk-slideset-nav"),this.controls=this.options.controls?t.$(this.options.controls):this.element,t.$win.on("resize load",t.Utils.debounce(function(){i.updateSets()},100)),i.list.addClass("uk-grid-width-1-"+i.options.default),["xlarge","large","medium","small"].forEach(function(t){i.options[t]&&i.list.addClass("uk-grid-width-"+t+"-1-"+i.options[t])}),this.on("click.uikit.slideset","[data-uk-slideset-item]",function(e){if(e.preventDefault(),!i.animating){var s=t.$(this).attr("data-uk-slideset-item");if(i.activeSet!==s)switch(s){case"next":case"previous":i["next"==s?"next":"previous"]();break;default:i.show(parseInt(s,10))}}}),this.controls.on("click.uikit.slideset","[data-uk-filter]",function(e){var s=t.$(this);s.parent().hasClass("uk-slideset")||(e.preventDefault(),i.animating||i.currentFilter==s.attr("data-uk-filter")||(i.updateFilter(s.attr("data-uk-filter")),i._hide().then(function(){i.updateSets(!0,!0)})))}),this.on("swipeRight swipeLeft",function(t){i["swipeLeft"==t.type?"next":"previous"]()}),this.updateFilter(this.options.filter),this.updateSets(),this.element.on({mouseenter:function(){i.options.pauseOnHover&&(i.hovering=!0)},mouseleave:function(){i.hovering=!1}}),this.options.autoplay&&this.start()},updateSets:function(t,i){var s,n=this.visible;if(this.visible=this.getVisibleOnCurrenBreakpoint(),n!=this.visible||i){for(this.children=this.list.children().hide(),this.items=this.getItems(),this.sets=e(this.items,this.visible),s=0;s');this.nav[1==this.nav.children().length?"addClass":"removeClass"]("uk-invisible")}this.activeSet=!1,this.show(0,!t)}},updateFilter:function(i){var e,s=this;this.currentFilter=i,this.controls.find("[data-uk-filter]").each(function(){e=t.$(this),e.parent().hasClass("uk-slideset")||(e.attr("data-uk-filter")==s.currentFilter?e.addClass("uk-active"):e.removeClass("uk-active"))})},getVisibleOnCurrenBreakpoint:function(){var i=null,e=t.$('
              ').appendTo("body"),s=e.children().eq(0),n=this.options;return["xlarge","large","medium","small"].forEach(function(t){n[t]&&!i&&(e.attr("class","uk-grid-width-"+t+"-1-2").width(),50==s.width()&&(i=t))}),e.remove(),this.options[i]||this.options["default"]},getItems:function(){var i,e=[];return this.currentFilter?(i=this.currentFilter||[],"string"==typeof i&&(i=i.split(/,/).map(function(t){return t.trim()})),this.children.each(function(){var s=t.$(this),n=s.attr("data-uk-filter"),a=i.length?!1:!0;n&&(n=n.split(/,/).map(function(t){return t.trim()}),i.forEach(function(t){n.indexOf(t)>-1&&(a=!0)})),a&&e.push(s[0])}),e=t.$(e)):e=this.list.children(),e},show:function(i,e,n){var a=this;if(this.activeSet!==i&&!this.animating){n=n||(i").css({top:0,left:0,width:this.container.width(),height:this.container.height(),opacity:1,zIndex:15}),d=p.width(),l=p.height(),u="slice-up"==o?l:"0",f=0;f').css({position:"absolute",top:0,left:0,width:d,height:l,"background-image":h,clip:m,opacity:0,transition:"all "+this.options.duration+"ms ease-in-out "+60*f+"ms","-webkit-transition":"all "+this.options.duration+"ms ease-in-out "+60*f+"ms"}).data("clip",v),p.append(r)}return this.container.append(p),p.children().last().on(i.support.transition.end,function(){p.remove(),a.resolve()}),p.width(),p.children().each(function(){var t=i.$(this);t.css({clip:t.data("clip"),opacity:1})}),a.promise()},"slice-up":function(i,e,s){return t.slice.apply(this,[i,e,s,"slice-up"])},"slice-down":function(i,e,s){return t.slice.apply(this,[i,e,s,"slice-down"])},"slice-up-down":function(i,e,s){return t.slice.apply(this,[i,e,s,"slice-up-down"])},fold:function(e,s){if(!s.data("cover"))return t.fade.apply(this,arguments);for(var n,o=i.$.Deferred(),r=Math.ceil(this.element.width()/this.options.slices),a=s.data("cover").css("background-image"),c=i.$("
            • ").css({width:s.width(),height:s.height(),opacity:1,zIndex:15}),h=s.width(),p=s.height(),d=0;d').css({position:"absolute",top:0,left:0,width:h,height:p,"background-image":a,"transform-origin":r*d+"px 0 0",clip:"rect(0px, "+r*(d+1)+"px, "+p+"px, "+r*d+"px)",opacity:0,transform:"scaleX(0.000001)",transition:"all "+this.options.duration+"ms ease-in-out "+(100+60*d)+"ms","-webkit-transition":"all "+this.options.duration+"ms ease-in-out "+(100+60*d)+"ms"}),c.prepend(n)}return this.container.append(c),c.width(),c.children().first().on(i.support.transition.end,function(){c.remove(),o.resolve()}).end().css({transform:"scaleX(1)",opacity:1}),o.promise()},puzzle:function(s,n){if(!n.data("cover"))return t.fade.apply(this,arguments);for(var o,r,a,c=i.$.Deferred(),h=this,p=Math.round(this.options.slices/2),d=Math.round(n.width()/p),l=Math.round(n.height()/d),u=Math.round(n.height()/l)+1,f=n.data("cover").css("background-image"),m=i.$("
            • ").css({width:this.container.width(),height:this.container.height(),opacity:1,zIndex:15}),x=this.container.width(),v=this.container.height(),g=0;l>g;g++)for(var w=0;p>w;w++)a=w==p-1?d+2:d,r=[u*g+"px",a*(w+1)+"px",u*(g+1)+"px",d*w+"px"],o=i.$('
              ').css({position:"absolute",top:0,left:0,opacity:0,width:x,height:v,"background-image":f,clip:"rect("+r.join(",")+")","-webkit-transform":"translateZ(0)",transform:"translateZ(0)"}),m.append(o);this.container.append(m);var b=e(m.children());return b.each(function(t){i.$(this).css({transition:"all "+h.options.duration+"ms ease-in-out "+(50+25*t)+"ms","-webkit-transition":"all "+h.options.duration+"ms ease-in-out "+(50+25*t)+"ms"})}).last().on(i.support.transition.end,function(){m.remove(),c.resolve()}),m.width(),b.css({opacity:1}),c.promise()},boxes:function(e,s,n,o){if(!s.data("cover"))return t.fade.apply(this,arguments);for(var r,a,c,h,p=i.$.Deferred(),d=Math.round(this.options.slices/2),l=Math.round(s.width()/d),u=Math.round(s.height()/l),f=Math.round(s.height()/u)+1,m=s.data("cover").css("background-image"),x=i.$("
            • ").css({width:s.width(),height:s.height(),opacity:1,zIndex:15}),v=s.width(),g=s.height(),w=0;u>w;w++)for(h=0;d>h;h++)c=h==d-1?l+2:l,a=[f*w+"px",c*(h+1)+"px",f*(w+1)+"px",l*h+"px"],r=i.$('
              ').css({position:"absolute",top:0,left:0,opacity:1,width:v,height:g,"background-image":m,"transform-origin":a[3]+" "+a[0]+" 0",clip:"rect("+a.join(",")+")","-webkit-transform":"scale(0.0000000000000001)",transform:"scale(0.0000000000000001)"}),x.append(r);this.container.append(x);var b,k=0,y=0,$=0,I=[[]],M=x.children();for("boxes-reverse"==o&&(M=[].reverse.apply(M)),M.each(function(){I[k][y]=i.$(this),y++,y==d&&(k++,y=0,I[k]=[])}),h=0,b=0;d*u>h;h++){b=h;for(var z=0;u>z;z++)b>=0&&d>b&&I[z][b].css({transition:"all "+this.options.duration+"ms linear "+(50+$)+"ms","-webkit-transition":"all "+this.options.duration+"ms linear "+(50+$)+"ms"}),b--;$+=100}return M.last().on(i.support.transition.end,function(){x.remove(),p.resolve()}),x.width(),M.css({"-webkit-transform":"scale(1)",transform:"scale(1)"}),p.promise()},"boxes-reverse":function(i,e,s){return t.boxes.apply(this,[i,e,s,"boxes-reverse"])},"random-fx":function(){var i=["slice-up","fold","puzzle","slice-down","boxes","slice-up-down","boxes-reverse"];return this.fxIndex=(void 0===this.fxIndex?-1:this.fxIndex)+1,i[this.fxIndex]||(this.fxIndex=0),t[i[this.fxIndex]].apply(this,arguments)}});var e=function(i){for(var t,e,s=i.length;s;t=parseInt(Math.random()*s),e=i[--s],i[s]=i[t],i[t]=e);return i};return i.slideshow.animations}); \ No newline at end of file diff --git a/media/uikit/js/components/slideshow.min.js b/media/uikit/js/components/slideshow.min.js deleted file mode 100644 index e7af4f0..0000000 --- a/media/uikit/js/components/slideshow.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(i){var s;window.UIkit&&(s=i(UIkit)),"function"==typeof define&&define.amd&&define("uikit-slideshow",["uikit"],function(){return s||i(UIkit)})}(function(i){"use strict";var s,t=0;i.component("slideshow",{defaults:{animation:"fade",duration:500,height:"auto",start:0,autoplay:!1,autoplayInterval:7e3,videoautoplay:!0,videomute:!0,slices:15,pauseOnHover:!0,kenburns:!1,kenburnsanimations:["uk-animation-middle-left","uk-animation-top-right","uk-animation-bottom-left","uk-animation-top-center","","uk-animation-bottom-right"]},current:!1,interval:null,hovering:!1,boot:function(){i.ready(function(s){i.$("[data-uk-slideshow]",s).each(function(){var s=i.$(this);if(!s.data("slideshow")){i.slideshow(s,i.Utils.options(s.attr("data-uk-slideshow")))}})})},init:function(){var s,e,n=this;this.container=this.element.hasClass("uk-slideshow")?this.element:i.$(this.find(".uk-slideshow")),this.slides=this.container.children(),this.slidesCount=this.slides.length,this.current=this.options.start,this.animating=!1,this.triggers=this.find("[data-uk-slideshow-item]"),this.fixFullscreen=navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&this.container.hasClass("uk-slideshow-fullscreen"),this.options.kenburns&&(e=this.options.kenburns===!0?"15s":this.options.kenburns,String(e).match(/(ms|s)$/)||(e+="ms"),"string"==typeof this.options.kenburnsanimations&&(this.options.kenburnsanimations=this.options.kenburnsanimations.split(","))),this.slides.each(function(a){var o=i.$(this),r=o.children("img,video,iframe").eq(0);if(o.data("media",r),o.data("sizer",r),r.length){var d;switch(r[0].nodeName){case"IMG":var u=i.$('
              ').css({"background-image":"url("+r.attr("src")+")"});r.css({width:"100%",height:"auto"}),o.prepend(u).data("cover",u);break;case"IFRAME":var h=r[0].src,c="sw-"+ ++t;r.attr("src","").on("load",function(){if((a!==n.current||a==n.current&&!n.options.videoautoplay)&&n.pausemedia(r),n.options.videomute){n.mutemedia(r);var i=setInterval(function(s){return function(){n.mutemedia(r),++s>=4&&clearInterval(i)}}(0),250)}}).data("slideshow",n).attr("data-player-id",c).attr("src",[h,h.indexOf("?")>-1?"&":"?","enablejsapi=1&api=1&player_id="+c].join("")).addClass("uk-position-absolute"),i.support.touch||r.css("pointer-events","none"),d=!0,i.cover&&(i.cover(r),r.attr("data-uk-cover","{}"));break;case"VIDEO":r.addClass("uk-cover-object uk-position-absolute"),d=!0,n.options.videomute&&n.mutemedia(r)}if(d){s=i.$("").attr({width:r[0].width,height:r[0].height});var l=i.$('').attr("src",s[0].toDataURL());o.prepend(l),o.data("sizer",l)}}else o.data("sizer",o);n.hasKenBurns(o)&&o.data("cover").css({"-webkit-animation-duration":e,"animation-duration":e})}),this.on("click.uikit.slideshow","[data-uk-slideshow-item]",function(s){s.preventDefault();var t=i.$(this).attr("data-uk-slideshow-item");if(n.current!=t){switch(t){case"next":case"previous":n["next"==t?"next":"previous"]();break;default:n.show(parseInt(t,10))}n.stop()}}),this.slides.attr("aria-hidden","true").eq(this.current).addClass("uk-active").attr("aria-hidden","false"),this.triggers.filter('[data-uk-slideshow-item="'+this.current+'"]').addClass("uk-active"),i.$win.on("resize load",i.Utils.debounce(function(){n.resize(),n.fixFullscreen&&(n.container.css("height",window.innerHeight),n.slides.css("height",window.innerHeight))},100)),setTimeout(function(){n.resize()},80),this.options.autoplay&&this.start(),this.options.videoautoplay&&this.slides.eq(this.current).data("media")&&this.playmedia(this.slides.eq(this.current).data("media")),this.options.kenburns&&this.applyKenBurns(this.slides.eq(this.current)),this.container.on({mouseenter:function(){n.options.pauseOnHover&&(n.hovering=!0)},mouseleave:function(){n.hovering=!1}}),this.on("swipeRight swipeLeft",function(i){n["swipeLeft"==i.type?"next":"previous"]()}),this.on("display.uk.check",function(){n.element.is(":visible")&&(n.resize(),n.fixFullscreen&&(n.container.css("height",window.innerHeight),n.slides.css("height",window.innerHeight)))})},resize:function(){if(!this.container.hasClass("uk-slideshow-fullscreen")){var s=this.options.height;"auto"===this.options.height&&(s=0,this.slides.css("height","").each(function(){s=Math.max(s,i.$(this).height())})),this.container.css("height",s),this.slides.css("height",s)}},show:function(t,e){if(!this.animating&&this.current!=t){this.animating=!0;var n=this,a=this.slides.eq(this.current),o=this.slides.eq(t),r=e?e:this.current-1&&"ready"==e.event&&e.player_id&&(t=i.$('[data-player-id="'+e.player_id+'"]'),t.length&&t.data("slideshow").mutemedia(t))},!1)}); \ No newline at end of file diff --git a/media/uikit/js/components/sortable.min.js b/media/uikit/js/components/sortable.min.js deleted file mode 100644 index 7bd90d7..0000000 --- a/media/uikit/js/components/sortable.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-sortable",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";function e(e){e=t.$(e);do{if(e.data("sortable"))return e;e=t.$(e).parent()}while(e.length);return e}function o(t,e){var o=t.parentNode;if(e.parentNode!=o)return!1;for(var n=t.previousSibling;n&&9!==n.nodeType;){if(n===e)return!0;n=n.previousSibling}return!1}function n(t,e){var o=e;if(o==t)return null;for(;o;){if(o.parentNode===t)return o;if(o=o.parentNode,!o||!o.ownerDocument||11===o.nodeType)break}return null}function a(t){t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.returnValue=!1}var s,r,i,l,d,h,u,p,c,g="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch;return t.component("sortable",{defaults:{animation:150,threshold:10,childClass:"uk-sortable-item",placeholderClass:"uk-sortable-placeholder",overClass:"uk-sortable-over",draggingClass:"uk-sortable-dragged",dragMovingClass:"uk-sortable-moving",baseClass:"uk-sortable",noDragClass:"uk-sortable-nodrag",dragCustomClass:"",handleClass:!1,group:!1,stop:function(){},start:function(){},change:function(){}},boot:function(){t.ready(function(e){t.$("[data-uk-sortable]",e).each(function(){var e=t.$(this);if(!e.data("sortable")){t.sortable(e,t.Utils.options(e.attr("data-uk-sortable")))}})}),t.$html.on("mousemove touchmove",function(e){if(u){var o=e.originalEvent.targetTouches?e.originalEvent.targetTouches[0]:e;(Math.abs(o.pageX-u.pos.x)>u.threshold||Math.abs(o.pageY-u.pos.y)>u.threshold)&&u.apply(o)}if(s){d||(d=!0,s.show(),s.$current.addClass(s.$sortable.options.placeholderClass),s.$sortable.element.children().addClass(s.$sortable.options.childClass),t.$html.addClass(s.$sortable.options.dragMovingClass));var n=s.data("mouse-offset"),a=parseInt(e.originalEvent.pageX,10)+n.left,r=parseInt(e.originalEvent.pageY,10)+n.top;s.css({left:a,top:r}),rwindow.innerHeight+t.$win.scrollTop()&&t.$win.scrollTop(t.$win.scrollTop()+Math.ceil(s.height()/2))}}),t.$html.on("mouseup touchend",function(t){if(u=h=!1,!r||!s)return r=s=null,void 0;var o=e(t.target),n=s.$sortable,a={type:t.type};o[0]&&n.dragDrop(a,n.element),n.dragEnd(a,n.element)})},init:function(){function e(){g?h.addEventListener("touchmove",v,!1):(h.addEventListener("mouseover",f,!1),h.addEventListener("mouseout",m,!1))}function o(){g?h.removeEventListener("touchmove",v,!1):(h.removeEventListener("mouseover",f,!1),h.removeEventListener("mouseout",m,!1))}function s(t){r&&d.dragMove(t,d)}function l(e){return function(o){var a,s,r;o&&(a=g&&o.touches&&o.touches[0]||{},s=a.target||o.target,g&&document.elementFromPoint&&(s=document.elementFromPoint(o.pageX-document.body.scrollLeft,o.pageY-document.body.scrollTop))),t.$(s).hasClass(d.options.childClass)?e.apply(s,[o]):s!==h&&(r=n(h,s),r&&e.apply(r,[o]))}}var d=this,h=this.element[0];p=[],0===this.element.children().length&&this.element.html(""),this.element.data("sortable-group",this.options.group?this.options.group:t.Utils.uid("sortable-group"));var u=l(function(e){var o=t.$(e.target),n=o.is("a[href]")?o:o.parents("a[href]");if(!o.is(":input"))return e.preventDefault(),!g&&n.length&&n.one("click",function(t){t.preventDefault()}).one("mouseup",function(){c||n.trigger("click")}),d.dragStart(e,this)}),f=(l(function(t){return r?(t.preventDefault&&t.preventDefault(),!1):!0}),l(t.Utils.debounce(function(t){return d.dragEnter(t,this)}),40)),m=l(function(){var e=d.dragenterData(this);d.dragenterData(this,e-1),d.dragenterData(this)||(t.$(this).removeClass(d.options.overClass),d.dragenterData(this,!1))}),v=l(function(t){return r&&r!==this&&i!==this?(d.element.children().removeClass(d.options.overClass),i=this,d.moveElementNextTo(r,this),a(t)):!0});this.addDragHandlers=e,this.removeDragHandlers=o,window.addEventListener(g?"touchmove":"mousemove",s,!1),h.addEventListener(g?"touchstart":"mousedown",u,!1)},dragStart:function(e,o){c=!1,d=!1,l=!1;{var n=this,a=t.$(e.target);n.element.children()}if(g||2!=e.button){if(n.options.handleClass){var i=a.hasClass(n.options.handleClass)?a:a.closest("."+n.options.handleClass,n.element);if(!i.length)return}if(!a.is("."+n.options.noDragClass)&&!a.closest("."+n.options._noDragClass).length&&!a.is(":input")){r=o,s&&s.remove();var h=t.$(r),p=h.offset();u={pos:{x:e.pageX,y:e.pageY},threshold:n.options.threshold,apply:function(e){s=t.$('
              ').css({display:"none",top:p.top,left:p.left,width:h.width(),height:h.height(),padding:h.css("padding")}).data({"mouse-offset":{left:p.left-parseInt(e.pageX,10),top:p.top-parseInt(e.pageY,10)},origin:n.element,index:h.index()}).append(h.html()).appendTo("body"),s.$current=h,s.$sortable=n,h.data("sortable-group",n.options.group),n.addDragHandlers(),n.options.start(this,r),n.trigger("start.uk.sortable",[n,r]),c=!0,u=!1}}}}},dragMove:function(e){var o,n=t.$(document.elementFromPoint(e.pageX-document.body.scrollLeft,e.pageY-(window.pageYOffset||document.documentElement.scrollTop))),a=n.closest("."+this.options.baseClass),s=a.data("sortable-group"),i=t.$(r),l=i.parent(),d=i.data("sortable-group");a[0]!==l[0]&&void 0!==d&&s===d&&(a.data("sortable").addDragHandlers(),p.push(a),a.children().addClass(this.options.childClass),a.children().length>0?(o=n.closest("."+this.options.childClass),o.before(i)):n.append(i),0===l.children().length&&l.html(""),UIkit.$doc.trigger("mouseover"))},dragEnter:function(e,o){if(!r||r===o)return!0;var n=this.dragenterData(o);return this.dragenterData(o,n+1),0===n&&(t.$(o).addClass(this.options.overClass),this.moveElementNextTo(r,o)),!1},dragEnd:function(e,o){var n=this;r&&(this.options.stop(o),this.trigger("stop.uk.sortable",[this])),r=null,i=null,p.push(this.element),p.forEach(function(e){t.$(e).children().each(function(){1===this.nodeType&&(t.$(this).removeClass(n.options.overClass).removeClass(n.options.placeholderClass).removeClass(n.options.childClass),n.dragenterData(this,!1))})}),p=[],t.$html.removeClass(this.options.dragMovingClass),this.removeDragHandlers(),s&&(s.remove(),s=null)},dragDrop:function(t){"drop"===t.type&&(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault()),this.triggerChangeEvents()},triggerChangeEvents:function(){if(r){var e=t.$(r),o=s.data("origin"),n=e.closest("."+this.options.baseClass),a=[];o[0]===n[0]&&s.data("index")!=e.index()?a.push({el:this,mode:"moved"}):o[0]!=n[0]&&a.push({el:n,mode:"added"},{el:o,mode:"removed"}),a.forEach(function(t){t.el.trigger("change.uk.sortable",[t.el,r,t.mode])})}},dragenterData:function(e,o){return e=t.$(e),1==arguments.length?parseInt(e.data("child-dragenter"),10)||0:(o?e.data("child-dragenter",Math.max(0,o)):e.removeData("child-dragenter"),void 0)},moveElementNextTo:function(e,n){l=!0;var a=this,s=t.$(e).parent().css("min-height",""),r=o(e,n)?n:n.nextSibling,i=s.children(),d=i.length;return a.options.animation?(s.css("min-height",s.height()),i.stop().each(function(){var e=t.$(this),o=e.position();o.width=e.width(),e.data("offset-before",o)}),n.parentNode.insertBefore(e,r),t.Utils.checkDisplay(a.element.parent()),i=s.children().each(function(){var e=t.$(this);e.data("offset-after",e.position())}).each(function(){var e=t.$(this),o=e.data("offset-before");e.css({position:"absolute",top:o.top,left:o.left,"min-width":o.width})}),i.each(function(){var e=t.$(this),o=(e.data("offset-before"),e.data("offset-after"));e.css("pointer-events","none").width(),setTimeout(function(){e.animate({top:o.top,left:o.left},a.options.animation,function(){e.css({position:"",top:"",left:"","min-width":"","pointer-events":""}).removeClass(a.options.overClass).removeData("child-dragenter"),d--,d||(s.css("min-height",""),t.Utils.checkDisplay(a.element.parent()))})},0)}),void 0):(n.parentNode.insertBefore(e,r),t.Utils.checkDisplay(a.element.parent()),void 0)},serialize:function(){var e,o,n=[];return this.element.children().each(function(a,s){e={};for(var r=0;ru?u-h:0,m=0;ms?s+p.options.top:p.options.top),p.boundary&&p.boundary.length){var f=p.boundary.position().top;a=p.boundtoparent?c-(f+p.boundary.outerHeight())+parseInt(p.boundary.css("padding-bottom")):c-f-parseInt(p.boundary.css("margin-top")),s=h+r>c-a-(p.options.top<0?0:p.options.top)?c-a-(h+r):s}if(p.currentTop!=s){if(p.element.css({position:"fixed",top:s,width:"undefined"!=typeof p.getWidthFrom?t.$(p.getWidthFrom).width():p.element.width(),left:p.wrapper.offset().left}),!p.init&&(p.element.addClass(p.options.clsinit),location.hash&&h>0&&p.options.target)){var g=t.$(location.hash);g.length&&setTimeout(function(t,i){return function(){i.element.width();var e=t.offset(),n=e.top+t.outerHeight(),o=i.element.offset(),s=i.element.outerHeight(),a=o.top+s;o.top'),a=this.options.boundary;this.wrapper=this.element.css("margin",0).wrap(s).parent(),this.computeWrapper(),a&&(a===!0?(a=this.wrapper.parent(),i=!0):"string"==typeof a&&(a=t.$(a))),this.sticky={self:this,options:this.options,element:this.element,currentTop:null,wrapper:this.wrapper,init:!1,getWidthFrom:this.options.getWidthFrom||this.wrapper,boundary:a,boundtoparent:i,reset:function(i){var e=function(){this.element.css({position:"",top:"",width:"",left:"",margin:"0"}),this.element.removeClass([this.options.animation,"uk-animation-reverse",this.options.clsactive].join(" ")),this.currentTop=null,this.animate=!1}.bind(this);!i&&this.options.animation&&t.support.animation?(this.animate=!0,this.element.removeClass(this.options.animation).one(t.support.animation.end,function(){e()}).width(),this.element.addClass(this.options.animation+" uk-animation-reverse")):e()},check:function(){if(this.options.disabled)return!1;if(this.options.media)switch(typeof this.options.media){case"number":if(window.innerWidtho?o-t:0,a=this.wrapper.offset().top,r=a-this.options.top-s;return t>=r}},o.push(this.sticky)},update:function(){i(this.sticky)},enable:function(){this.options.disabled=!1,this.update()},disable:function(t){this.options.disabled=!0,this.sticky.reset(t)},computeWrapper:function(){this.wrapper.css({height:"absolute"!=this.element.css("position")?this.element.outerHeight():"","float":"none"!=this.element.css("float")?this.element.css("float"):"",margin:this.element.css("margin")})}}),t.sticky}); \ No newline at end of file diff --git a/media/uikit/js/components/timepicker.min.js b/media/uikit/js/components/timepicker.min.js deleted file mode 100644 index f11f4a8..0000000 --- a/media/uikit/js/components/timepicker.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var e;window.UIkit&&(e=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-search",["uikit"],function(){return e||t(UIkit)})}(function(t){"use strict";function e(t,e){t=t||0,e=e||24;var i,o,a={"12h":[],"24h":[]};for(i=t,o="";e>i;i++)o=""+i,10>i&&(o="0"+o),a["24h"].push({value:o+":00"}),a["24h"].push({value:o+":30"}),0===i&&(o=12,a["12h"].push({value:o+":00 AM"}),a["12h"].push({value:o+":30 AM"})),i>0&&13>i&&12!==i&&(a["12h"].push({value:o+":00 AM"}),a["12h"].push({value:o+":30 AM"})),i>=12&&(o-=12,0===o&&(o=12),10>o&&(o="0"+String(o)),a["12h"].push({value:o+":00 PM"}),a["12h"].push({value:o+":30 PM"}));return a}t.component("timepicker",{defaults:{format:"24h",delay:0,start:0,end:24},boot:function(){t.$html.on("focus.timepicker.uikit","[data-uk-timepicker]",function(){var e=t.$(this);if(!e.data("timepicker")){var i=t.timepicker(e,t.Utils.options(e.attr("data-uk-timepicker")));setTimeout(function(){i.autocomplete.input.focus()},40)}})},init:function(){var i,o=this,a=e(this.options.start,this.options.end);this.options.minLength=0,this.options.template='',this.options.source=function(t){t(a[o.options.format]||a["12h"])},this.element.is("input")?(this.element.wrap('
              '),i=this.element.parent()):i=this.element.addClass("uk-autocomplete"),this.autocomplete=t.autocomplete(i,this.options),this.autocomplete.dropdown.addClass("uk-dropdown-small uk-dropdown-scrollable"),this.autocomplete.on("show.uk.autocomplete",function(){var t=o.autocomplete.dropdown.find('[data-value="'+o.autocomplete.input.val()+'"]');setTimeout(function(){o.autocomplete.pick(t,!0)},10)}),this.autocomplete.input.on("focus",function(){o.autocomplete.value=Math.random(),o.autocomplete.triggercomplete()}).on("blur",function(){o.checkTime()}),this.element.data("timepicker",this)},checkTime:function(){var t,e,i,o,a="AM",u=this.autocomplete.input.val();"12h"==this.options.format?(t=u.split(" "),e=t[0].split(":"),a=t[1]):e=u.split(":"),i=parseInt(e[0],10),o=parseInt(e[1],10),isNaN(i)&&(i=0),isNaN(o)&&(o=0),"12h"==this.options.format?(i>12?i=12:0>i&&(i=12),"am"===a||"a"===a?a="AM":("pm"===a||"p"===a)&&(a="PM"),"AM"!==a&&"PM"!==a&&(a="AM")):i>=24?i=23:0>i&&(i=0),0>o?o=0:o>=60&&(o=0),this.autocomplete.input.val(this.formatTime(i,o,a)).trigger("change")},formatTime:function(t,e,i){return t=10>t?"0"+t:t,e=10>e?"0"+e:e,t+":"+e+("12h"==this.options.format?" "+i:"")}})}); \ No newline at end of file diff --git a/media/uikit/js/components/tooltip.min.js b/media/uikit/js/components/tooltip.min.js deleted file mode 100644 index 80a1f05..0000000 --- a/media/uikit/js/components/tooltip.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){var i;window.UIkit&&(i=t(UIkit)),"function"==typeof define&&define.amd&&define("uikit-tooltip",["uikit"],function(){return i||t(UIkit)})}(function(t){"use strict";var i,o,e;return t.component("tooltip",{defaults:{offset:5,pos:"top",animation:!1,delay:0,cls:"",activeClass:"uk-active",src:function(t,i){return i=t.attr("title"),i&&t.data("cached-title",i).removeAttr("title"),t.data("cached-title")}},tip:"",boot:function(){t.$html.on("mouseenter.tooltip.uikit focus.tooltip.uikit","[data-uk-tooltip]",function(){var i=t.$(this);if(!i.data("tooltip")){{t.tooltip(i,t.Utils.options(i.attr("data-uk-tooltip")))}i.trigger("mouseenter")}})},init:function(){var o=this;i||(i=t.$('
              ').appendTo("body")),this.on({focus:function(){o.show()},blur:function(){o.hide()},mouseenter:function(){o.show()},mouseleave:function(){o.hide()}})},show:function(){if(this.tip="function"==typeof this.options.src?this.options.src(this.element):this.options.src,o&&clearTimeout(o),e&&clearTimeout(e),this.tip.length){i.stop().css({top:-2e3,visibility:"hidden"}).removeClass(this.options.activeClass).show(),i.html('
              '+this.tip+"
              ");var s=this,n=t.$.extend({},this.element.offset(),{width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}),l=i[0].offsetWidth,f=i[0].offsetHeight,p="function"==typeof this.options.offset?this.options.offset.call(this.element):this.options.offset,a="function"==typeof this.options.pos?this.options.pos.call(this.element):this.options.pos,h=a.split("-"),c={display:"none",visibility:"visible",top:n.top+n.height+f,left:n.left};if("fixed"==t.$html.css("position")||"fixed"==t.$body.css("position")){var r=t.$("body").offset(),d=t.$("html").offset(),u={top:d.top+r.top,left:d.left+r.left};n.left-=u.left,n.top-=u.top}"left"!=h[0]&&"right"!=h[0]||"right"!=t.langdirection||(h[0]="left"==h[0]?"right":"left");var m={bottom:{top:n.top+n.height+p,left:n.left+n.width/2-l/2},top:{top:n.top-f-p,left:n.left+n.width/2-l/2},left:{top:n.top+n.height/2-f/2,left:n.left-l-p},right:{top:n.top+n.height/2-f/2,left:n.left+n.width+p}};t.$.extend(c,m[h[0]]),2==h.length&&(c.left="left"==h[1]?n.left:n.left+n.width-l);var v=this.checkBoundary(c.left,c.top,l,f);if(v){switch(v){case"x":a=2==h.length?h[0]+"-"+(c.left<0?"left":"right"):c.left<0?"right":"left";break;case"y":a=2==h.length?(c.top<0?"bottom":"top")+"-"+h[1]:c.top<0?"bottom":"top";break;case"xy":a=2==h.length?(c.top<0?"bottom":"top")+"-"+(c.left<0?"left":"right"):c.left<0?"right":"left"}h=a.split("-"),t.$.extend(c,m[h[0]]),2==h.length&&(c.left="left"==h[1]?n.left:n.left+n.width-l)}c.left-=t.$body.position().left,o=setTimeout(function(){i.css(c).attr("class",["uk-tooltip","uk-tooltip-"+a,s.options.cls].join(" ")),s.options.animation?i.css({opacity:0,display:"block"}).addClass(s.options.activeClass).animate({opacity:1},parseInt(s.options.animation,10)||400):i.show().addClass(s.options.activeClass),o=!1,e=setInterval(function(){s.element.is(":visible")||s.hide()},150)},parseInt(this.options.delay,10)||0)}},hide:function(){if(!this.element.is("input")||this.element[0]!==document.activeElement)if(o&&clearTimeout(o),e&&clearTimeout(e),i.stop(),this.options.animation){var t=this;i.fadeOut(parseInt(this.options.animation,10)||400,function(){i.removeClass(t.options.activeClass)})}else i.hide().removeClass(this.options.activeClass)},content:function(){return this.tip},checkBoundary:function(i,o,e,s){var n="";return(0>i||i-t.$win.scrollLeft()+e>window.innerWidth)&&(n+="x"),(0>o||o-t.$win.scrollTop()+s>window.innerHeight)&&(n+="y"),n}}),t.tooltip}); \ No newline at end of file diff --git a/media/uikit/js/components/upload.min.js b/media/uikit/js/components/upload.min.js deleted file mode 100644 index e9b4759..0000000 --- a/media/uikit/js/components/upload.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(e){var t;window.UIkit&&(t=e(UIkit)),"function"==typeof define&&define.amd&&define("uikit-upload",["uikit"],function(){return t||e(UIkit)})}(function(e){"use strict";function t(o,a){function r(t,n){var o=new FormData,a=new XMLHttpRequest;if(n.before(n,t)!==!1){for(var r,l=0;r=t[l];l++)o.append(n.param,r);for(var i in n.params)o.append(i,n.params[i]);a.upload.addEventListener("progress",function(e){var t=e.loaded/e.total*100;n.progress(t,e)},!1),a.addEventListener("loadstart",function(e){n.loadstart(e)},!1),a.addEventListener("load",function(e){n.load(e)},!1),a.addEventListener("loadend",function(e){n.loadend(e)},!1),a.addEventListener("error",function(e){n.error(e)},!1),a.addEventListener("abort",function(e){n.abort(e)},!1),a.open(n.method,n.action,!0),a.onreadystatechange=function(){if(n.readystatechange(a),4==a.readyState){var t=a.responseText;if("json"==n.type)try{t=e.$.parseJSON(t)}catch(o){t=!1}n.complete(t,a)}},n.beforeSend(a),a.send(o)}}if(!e.support.ajaxupload)return this;if(a=e.$.extend({},t.defaults,a),o.length){if("*.*"!==a.allow)for(var l,i=0;l=o[i];i++)if(!n(a.allow,l.name))return"string"==typeof a.notallowed?alert(a.notallowed):a.notallowed(l,a),void 0;var f=a.complete;if(a.single){var d=o.length,s=0,p=!0;a.beforeAll(o),a.complete=function(e,t){s+=1,f(e,t),a.filelimit&&s>=a.filelimit&&(p=!1),p&&d>s?r([o[s]],a):a.allcomplete(e,t)},r([o[0]],a)}else a.complete=function(e,t){f(e,t),a.allcomplete(e,t)},r(o,a)}}function n(e,t){var n="^"+e.replace(/\//g,"\\/").replace(/\*\*/g,"(\\/[^\\/]+)*").replace(/\*/g,"[^\\/]+").replace(/((?!\\))\?/g,"$1.")+"$";return n="^"+n+"$",null!==t.match(new RegExp(n,"i"))}return e.component("uploadSelect",{init:function(){var e=this;this.on("change",function(){t(e.element[0].files,e.options);var n=e.element.clone(!0).data("uploadSelect",e);e.element.replaceWith(n),e.element=n})}}),e.component("uploadDrop",{defaults:{dragoverClass:"uk-dragover"},init:function(){var e=this,n=!1;this.on("drop",function(n){n.dataTransfer&&n.dataTransfer.files&&(n.stopPropagation(),n.preventDefault(),e.element.removeClass(e.options.dragoverClass),e.element.trigger("dropped.uk.upload",[n.dataTransfer.files]),t(n.dataTransfer.files,e.options))}).on("dragenter",function(e){e.stopPropagation(),e.preventDefault()}).on("dragover",function(t){t.stopPropagation(),t.preventDefault(),n||(e.element.addClass(e.options.dragoverClass),n=!0)}).on("dragleave",function(t){t.stopPropagation(),t.preventDefault(),e.element.removeClass(e.options.dragoverClass),n=!1})}}),e.support.ajaxupload=function(){function e(){var e=document.createElement("INPUT");return e.type="file","files"in e}function t(){var e=new XMLHttpRequest;return!!(e&&"upload"in e&&"onprogress"in e.upload)}function n(){return!!window.FormData}return e()&&t()&&n()}(),e.support.ajaxupload&&e.$.event.props.push("dataTransfer"),t.defaults={action:"",single:!0,method:"POST",param:"files[]",params:{},allow:"*.*",type:"text",filelimit:!1,before:function(){},beforeSend:function(){},beforeAll:function(){},loadstart:function(){},load:function(){},loadend:function(){},error:function(){},abort:function(){},progress:function(){},complete:function(){},allcomplete:function(){},readystatechange:function(){},notallowed:function(e,t){alert("Only the following file types are allowed: "+t.allow)}},e.Utils.xhrupload=t,t}); \ No newline at end of file diff --git a/media/uikit/js/core/button.min.js b/media/uikit/js/core/button.min.js deleted file mode 100644 index bac71ee..0000000 --- a/media/uikit/js/core/button.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";t.component("buttonRadio",{defaults:{target:".uk-button"},boot:function(){t.$html.on("click.buttonradio.uikit","[data-uk-button-radio]",function(i){var e=t.$(this);if(!e.data("buttonRadio")){var a=t.buttonRadio(e,t.Utils.options(e.attr("data-uk-button-radio"))),n=t.$(i.target);n.is(a.options.target)&&n.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter(".uk-active").attr("aria-checked","true"),this.on("click",this.options.target,function(e){var a=t.$(this);a.is('a[href="#"]')&&e.preventDefault(),i.find(i.options.target).not(a).removeClass("uk-active").blur(),a.addClass("uk-active"),i.find(i.options.target).not(a).attr("aria-checked","false"),a.attr("aria-checked","true"),i.trigger("change.uk.button",[a])})},getSelected:function(){return this.find(".uk-active")}}),t.component("buttonCheckbox",{defaults:{target:".uk-button"},boot:function(){t.$html.on("click.buttoncheckbox.uikit","[data-uk-button-checkbox]",function(i){var e=t.$(this);if(!e.data("buttonCheckbox")){var a=t.buttonCheckbox(e,t.Utils.options(e.attr("data-uk-button-checkbox"))),n=t.$(i.target);n.is(a.options.target)&&n.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter(".uk-active").attr("aria-checked","true"),this.on("click",this.options.target,function(e){var a=t.$(this);a.is('a[href="#"]')&&e.preventDefault(),a.toggleClass("uk-active").blur(),a.attr("aria-checked",a.hasClass("uk-active")),i.trigger("change.uk.button",[a])})},getSelected:function(){return this.find(".uk-active")}}),t.component("button",{defaults:{},boot:function(){t.$html.on("click.button.uikit","[data-uk-button]",function(){var i=t.$(this);if(!i.data("button")){{t.button(i,t.Utils.options(i.attr("data-uk-button")))}i.trigger("click")}})},init:function(){var t=this;this.element.attr("aria-pressed",this.element.hasClass("uk-active")),this.on("click",function(i){t.element.is('a[href="#"]')&&i.preventDefault(),t.toggle(),t.trigger("change.uk.button",[t.element.blur().hasClass("uk-active")])})},toggle:function(){this.element.toggleClass("uk-active"),this.element.attr("aria-pressed",this.element.hasClass("uk-active"))}})}(UIkit); \ No newline at end of file diff --git a/media/uikit/js/core/core.min.js b/media/uikit/js/core/core.min.js deleted file mode 100644 index 42c051f..0000000 --- a/media/uikit/js/core/core.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){if("function"==typeof define&&define.amd&&define("uikit",function(){var n=window.UIkit||t(window,window.jQuery,window.document);return n.load=function(t,e,o,i){var r,s=t.split(","),a=[],u=(i.config&&i.config.uikit&&i.config.uikit.base?i.config.uikit.base:"").replace(/\/+$/g,"");if(!u)throw new Error("Please define base path to UIkit in the requirejs config.");for(r=0;r0||t.navigator.pointerEnabled&&t.navigator.maxTouchPoints>0||!1,o.support.mutationobserver=t.MutationObserver||t.WebKitMutationObserver||null,o.Utils={},o.Utils.isFullscreen=function(){return document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.fullscreenElement||!1},o.Utils.str2json=function(t,n){try{return n?JSON.parse(t.replace(/([\$\w]+)\s*:/g,function(t,n){return'"'+n+'":'}).replace(/'([^']+)'/g,function(t,n){return'"'+n+'"'})):new Function("","var json = "+t+"; return JSON.parse(JSON.stringify(json));")()}catch(e){return!1}},o.Utils.debounce=function(t,n,e){var o;return function(){var i=this,r=arguments,s=function(){o=null,e||t.apply(i,r)},a=e&&!o;clearTimeout(o),o=setTimeout(s,n),a&&t.apply(i,r)}},o.Utils.removeCssRules=function(t){var n,e,o,i,r,s,a,u,c,d;t&&setTimeout(function(){try{for(d=document.styleSheets,i=0,a=d.length;a>i;i++){for(o=d[i],e=[],o.cssRules=o.cssRules,n=r=0,u=o.cssRules.length;u>r;n=++r)o.cssRules[n].type===CSSRule.STYLE_RULE&&t.test(o.cssRules[n].selectorText)&&e.unshift(n);for(s=0,c=e.length;c>s;s++)o.deleteRule(e[s])}}catch(l){}},0)},o.Utils.isInView=function(t,e){var i=n(t);if(!i.is(":visible"))return!1;var r=o.$win.scrollLeft(),s=o.$win.scrollTop(),a=i.offset(),u=a.left,c=a.top;return e=n.extend({topoffset:0,leftoffset:0},e),c+i.height()>=s&&c-e.topoffset<=s+o.$win.height()&&u+i.width()>=r&&u-e.leftoffset<=r+o.$win.width()?!0:!1},o.Utils.checkDisplay=function(t,e){var i=o.$("[data-uk-margin], [data-uk-grid-match], [data-uk-grid-margin], [data-uk-check-display]",t||document);return t&&!i.length&&(i=n(t)),i.trigger("display.uk.check"),e&&("string"!=typeof e&&(e='[class*="uk-animation-"]'),i.find(e).each(function(){var t=o.$(this),n=t.attr("class"),e=n.match(/uk\-animation\-(.+)/);t.removeClass(e[0]).width(),t.addClass(e[0])})),i},o.Utils.options=function(t){if(n.isPlainObject(t))return t;var e=t?t.indexOf("{"):-1,i={};if(-1!=e)try{i=o.Utils.str2json(t.substr(e))}catch(r){}return i},o.Utils.animate=function(t,e){var i=n.Deferred();return t=o.$(t),e=e,t.css("display","none").addClass(e).one(o.support.animation.end,function(){t.removeClass(e),i.resolve()}).width(),t.css("display",""),i.promise()},o.Utils.uid=function(t){return(t||"id")+(new Date).getTime()+"RAND"+Math.ceil(1e5*Math.random())},o.Utils.template=function(t,n){for(var e,o,i,r,s=t.replace(/\n/g,"\\n").replace(/\{\{\{\s*(.+?)\s*\}\}\}/g,"{{!$1}}").split(/(\{\{\s*(.+?)\s*\}\})/g),a=0,u=[],c=0;a/g, '>');}"].join("\n")),n?r(n):r},o.Utils.events={},o.Utils.events.click=o.support.touch?"tap":"click",t.UIkit=o,o.fn=function(t,e){var i=arguments,r=t.match(/^([a-z\-]+)(?:\.([a-z]+))?/i),s=r[1],a=r[2];return o[s]?this.each(function(){var t=n(this),r=t.data(s);r||t.data(s,r=o[s](this,a?void 0:e)),a&&r[a].apply(r,Array.prototype.slice.call(i,1))}):(n.error("UIkit component ["+s+"] does not exist."),this)},n.UIkit=o,n.fn.uk=o.fn,o.langdirection="rtl"==o.$html.attr("dir")?"right":"left",o.components={},o.component=function(t,e){var i=function(e,r){var s=this;return this.UIkit=o,this.element=e?o.$(e):null,this.options=n.extend(!0,{},this.defaults,r),this.plugins={},this.element&&this.element.data(t,this),this.init(),(this.options.plugins.length?this.options.plugins:Object.keys(i.plugins)).forEach(function(t){i.plugins[t].init&&(i.plugins[t].init(s),s.plugins[t]=!0)}),this.trigger("init.uk.component",[t,this]),this};return i.plugins={},n.extend(!0,i.prototype,{defaults:{plugins:[]},boot:function(){},init:function(){},on:function(t,n,e){return o.$(this.element||this).on(t,n,e)},one:function(t,n,e){return o.$(this.element||this).one(t,n,e)},off:function(t){return o.$(this.element||this).off(t)},trigger:function(t,n){return o.$(this.element||this).trigger(t,n)},find:function(t){return o.$(this.element?this.element:[]).find(t)},proxy:function(t,n){var e=this;n.split(" ").forEach(function(n){e[n]||(e[n]=function(){return t[n].apply(t,arguments)})})},mixin:function(t,n){var e=this;n.split(" ").forEach(function(n){e[n]||(e[n]=t[n].bind(e))})},option:function(){return 1==arguments.length?this.options[arguments[0]]||void 0:(2==arguments.length&&(this.options[arguments[0]]=arguments[1]),void 0)}},e),this.components[t]=i,this[t]=function(){var e,i;if(arguments.length)switch(arguments.length){case 1:"string"==typeof arguments[0]||arguments[0].nodeType||arguments[0]instanceof jQuery?e=n(arguments[0]):i=arguments[0];break;case 2:e=n(arguments[0]),i=arguments[1]}return e&&e.data(t)?e.data(t):new o.components[t](e,i)},o.domready&&o.component.boot(t),i},o.plugin=function(t,n,e){this.components[t].plugins[n]=e},o.component.boot=function(t){o.components[t].prototype&&o.components[t].prototype.boot&&!o.components[t].booted&&(o.components[t].prototype.boot.apply(o,[]),o.components[t].booted=!0)},o.component.bootComponents=function(){for(var t in o.components)o.component.boot(t)},o.domObservers=[],o.domready=!1,o.ready=function(t){o.domObservers.push(t),o.domready&&t(document)},o.on=function(t,n,e){return t&&t.indexOf("ready.uk.dom")>-1&&o.domready&&n.apply(o.$doc),o.$doc.on(t,n,e)},o.one=function(t,n,e){return t&&t.indexOf("ready.uk.dom")>-1&&o.domready?(n.apply(o.$doc),o.$doc):o.$doc.one(t,n,e)},o.trigger=function(t,n){return o.$doc.trigger(t,n)},o.domObserve=function(t,n){o.support.mutationobserver&&(n=n||function(){},o.$(t).each(function(){var t=this,e=o.$(t);if(!e.data("observer"))try{var i=new o.support.mutationobserver(o.Utils.debounce(function(){n.apply(t,[]),e.trigger("changed.uk.dom")},50));i.observe(t,{childList:!0,subtree:!0}),e.data("observer",i)}catch(r){}}))},o.init=function(t){t=t||document,o.domObservers.forEach(function(n){n(t)})},o.on("domready.uk.dom",function(){o.init(),o.domready&&o.Utils.checkDisplay()}),n(function(){o.$body=o.$("body"),o.ready(function(){o.domObserve("[data-uk-observe]")}),o.on("changed.uk.dom",function(t){o.init(t.target),o.Utils.checkDisplay(t.target)}),o.trigger("beforeready.uk.dom"),o.component.bootComponents(),setInterval(function(){var t,n={x:window.pageXOffset,y:window.pageYOffset},e=function(){(n.x!=window.pageXOffset||n.y!=window.pageYOffset)&&(t={x:0,y:0},window.pageXOffset!=n.x&&(t.x=window.pageXOffset>n.x?1:-1),window.pageYOffset!=n.y&&(t.y=window.pageYOffset>n.y?1:-1),n={dir:t,x:window.pageXOffset,y:window.pageYOffset},o.$doc.trigger("scrolling.uk.document",[n]))};return o.support.touch&&o.$html.on("touchmove touchend MSPointerMove MSPointerUp pointermove pointerup",e),(n.x||n.y)&&e(),e}(),15),o.trigger("domready.uk.dom"),o.support.touch&&navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&o.$win.on("load orientationchange resize",o.Utils.debounce(function(){var t=function(){return n(".uk-height-viewport").css("height",window.innerHeight),t};return t()}(),100)),o.trigger("afterready.uk.dom"),o.domready=!0}),o.$html.addClass(o.support.touch?"uk-touch":"uk-notouch"),o.support.touch){var r,s=!1,a="uk-hover",u=".uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover";o.$html.on("touchstart MSPointerDown pointerdown",u,function(){s&&n("."+a).removeClass(a),s=n(this).addClass(a)}).on("touchend MSPointerUp pointerup",function(t){r=n(t.target).parents(u),s&&s.not(r).removeClass(a)})}return o}); \ No newline at end of file diff --git a/media/uikit/js/core/dropdown.js b/media/uikit/js/core/dropdown.js deleted file mode 100644 index bb93184..0000000 --- a/media/uikit/js/core/dropdown.js +++ /dev/null @@ -1,296 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -(function(UI) { - - "use strict"; - - var active = false, hoverIdle; - - UI.component('dropdown', { - - defaults: { - 'mode' : 'hover', - 'remaintime' : 800, - 'justify' : false, - 'boundary' : UI.$win, - 'delay' : 0, - 'hoverDelayIdle' : 250 - }, - - remainIdle: false, - - boot: function() { - - var triggerevent = UI.support.touch ? "click" : "mouseenter"; - - // init code - UI.$html.on(triggerevent+".dropdown.uikit", "[data-uk-dropdown]", function(e) { - - var ele = UI.$(this); - - if (!ele.data("dropdown")) { - - var dropdown = UI.dropdown(ele, UI.Utils.options(ele.attr("data-uk-dropdown"))); - - if (triggerevent=="click" || (triggerevent=="mouseenter" && dropdown.options.mode=="hover")) { - dropdown.element.trigger(triggerevent); - } - - if (dropdown.element.find('.uk-dropdown').length) { - e.preventDefault(); - } - } - }); - }, - - init: function() { - - var $this = this; - - this.dropdown = this.find('.uk-dropdown'); - - this.centered = this.dropdown.hasClass('uk-dropdown-center'); - this.justified = this.options.justify ? UI.$(this.options.justify) : false; - - this.boundary = UI.$(this.options.boundary); - this.flipped = this.dropdown.hasClass('uk-dropdown-flip'); - - if (!this.boundary.length) { - this.boundary = UI.$win; - } - - // Init ARIA - this.element.attr('aria-haspopup', 'true'); - this.element.attr('aria-expanded', this.element.hasClass("uk-open")); - - if (this.options.mode == "click" || UI.support.touch) { - - this.on("click.uikit.dropdown", function(e) { - - var $target = UI.$(e.target); - - if (!$target.parents(".uk-dropdown").length) { - - if ($target.is("a[href='#']") || $target.parent().is("a[href='#']") || ($this.dropdown.length && !$this.dropdown.is(":visible")) ){ - e.preventDefault(); - } - - $target.blur(); - } - - if (!$this.element.hasClass('uk-open')) { - - $this.show(); - - } else { - - if ($target.is("a:not(.js-uk-prevent)") || $target.is(".uk-dropdown-close") || !$this.dropdown.find(e.target).length) { - $this.hide(); - } - } - }); - - } else { - - this.on("mouseenter", function(e) { - - if ($this.remainIdle) { - clearTimeout($this.remainIdle); - } - - if (hoverIdle) { - clearTimeout(hoverIdle); - } - - if (active && active == $this) { - return; - } - - // pseudo manuAim - if (active && active != $this) { - - hoverIdle = setTimeout(function() { - hoverIdle = setTimeout($this.show.bind($this), $this.options.delay); - }, $this.options.hoverDelayIdle); - - } else { - - hoverIdle = setTimeout($this.show.bind($this), $this.options.delay); - } - - }).on("mouseleave", function() { - - if (hoverIdle) { - clearTimeout(hoverIdle); - } - - $this.remainIdle = setTimeout(function() { - if (active && active == $this) $this.hide(); - }, $this.options.remaintime); - - }).on("click", function(e){ - - var $target = UI.$(e.target); - - if ($this.remainIdle) { - clearTimeout($this.remainIdle); - } - - if ($target.is("a[href='#']") || $target.parent().is("a[href='#']")){ - e.preventDefault(); - } - - $this.show(); - }); - } - }, - - show: function(){ - - UI.$html.off("click.outer.dropdown"); - - if (active && active != this) { - active.hide(); - } - - if (hoverIdle) { - clearTimeout(hoverIdle); - } - - this.checkDimensions(); - this.element.addClass('uk-open'); - - // Update ARIA - this.element.attr('aria-expanded', 'true'); - - this.trigger('show.uk.dropdown', [this]); - - UI.Utils.checkDisplay(this.dropdown, true); - active = this; - - this.registerOuterClick(); - }, - - hide: function() { - this.element.removeClass('uk-open'); - - if (this.remainIdle) { - clearTimeout(this.remainIdle); - } - - this.remainIdle = false; - - // Update ARIA - this.element.attr('aria-expanded', 'false'); - - this.trigger('hide.uk.dropdown', [this]); - - if (active == this) active = false; - }, - - registerOuterClick: function(){ - - var $this = this; - - UI.$html.off("click.outer.dropdown"); - - setTimeout(function() { - - UI.$html.on("click.outer.dropdown", function(e) { - - if (hoverIdle) { - clearTimeout(hoverIdle); - } - - var $target = UI.$(e.target); - - if (active == $this && ($target.is("a:not(.js-uk-prevent)") || $target.is(".uk-dropdown-close") || !$this.dropdown.find(e.target).length)) { - $this.hide(); - UI.$html.off("click.outer.dropdown"); - } - }); - }, 10); - }, - - checkDimensions: function() { - - if (!this.dropdown.length) return; - - if (this.justified && this.justified.length) { - this.dropdown.css("min-width", ""); - } - - var $this = this, - dropdown = this.dropdown.css("margin-" + UI.langdirection, ""), - offset = dropdown.show().offset(), - width = dropdown.outerWidth(), - boundarywidth = this.boundary.width(), - boundaryoffset = this.boundary.offset() ? this.boundary.offset().left:0; - - // centered dropdown - if (this.centered) { - dropdown.css("margin-" + UI.langdirection, (parseFloat(width) / 2 - dropdown.parent().width() / 2) * -1); - offset = dropdown.offset(); - - // reset dropdown - if ((width + offset.left) > boundarywidth || offset.left < 0) { - dropdown.css("margin-" + UI.langdirection, ""); - offset = dropdown.offset(); - } - } - - // justify dropdown - if (this.justified && this.justified.length) { - - var jwidth = this.justified.outerWidth(); - - dropdown.css("min-width", jwidth); - - if (UI.langdirection == 'right') { - - var right1 = boundarywidth - (this.justified.offset().left + jwidth), - right2 = boundarywidth - (dropdown.offset().left + dropdown.outerWidth()); - - dropdown.css("margin-right", right1 - right2); - - } else { - dropdown.css("margin-left", this.justified.offset().left - offset.left); - } - - offset = dropdown.offset(); - - } - - if ((width + (offset.left-boundaryoffset)) > boundarywidth) { - dropdown.addClass('uk-dropdown-flip'); - offset = dropdown.offset(); - } - - if ((offset.left-boundaryoffset) < 0) { - - dropdown.addClass("uk-dropdown-stack"); - - if (dropdown.hasClass('uk-dropdown-flip')) { - - if (!this.flipped) { - dropdown.removeClass('uk-dropdown-flip'); - offset = dropdown.offset(); - dropdown.addClass('uk-dropdown-flip'); - } - - setTimeout(function(){ - - if ((dropdown.offset().left-boundaryoffset) < 0 || !$this.flipped && (dropdown.outerWidth() + (offset.left-boundaryoffset)) < boundarywidth) { - dropdown.removeClass('uk-dropdown-flip'); - } - }, 0); - } - - this.trigger('stack.uk.dropdown', [this]); - } - - dropdown.css("display", ""); - } - - }); - -})(UIkit); diff --git a/media/uikit/js/core/dropdown.min.js b/media/uikit/js/core/dropdown.min.js deleted file mode 100644 index 4a72cc3..0000000 --- a/media/uikit/js/core/dropdown.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";var e,i=!1;t.component("dropdown",{defaults:{mode:"hover",remaintime:800,justify:!1,boundary:t.$win,delay:0,hoverDelayIdle:250},remainIdle:!1,boot:function(){var e=t.support.touch?"click":"mouseenter";t.$html.on(e+".dropdown.uikit","[data-uk-dropdown]",function(i){var o=t.$(this);if(!o.data("dropdown")){var s=t.dropdown(o,t.Utils.options(o.attr("data-uk-dropdown")));("click"==e||"mouseenter"==e&&"hover"==s.options.mode)&&s.element.trigger(e),s.element.find(".uk-dropdown").length&&i.preventDefault()}})},init:function(){var o=this;this.dropdown=this.find(".uk-dropdown"),this.centered=this.dropdown.hasClass("uk-dropdown-center"),this.justified=this.options.justify?t.$(this.options.justify):!1,this.boundary=t.$(this.options.boundary),this.flipped=this.dropdown.hasClass("uk-dropdown-flip"),this.boundary.length||(this.boundary=t.$win),this.element.attr("aria-haspopup","true"),this.element.attr("aria-expanded",this.element.hasClass("uk-open")),"click"==this.options.mode||t.support.touch?this.on("click.uikit.dropdown",function(e){var i=t.$(e.target);i.parents(".uk-dropdown").length||((i.is("a[href='#']")||i.parent().is("a[href='#']")||o.dropdown.length&&!o.dropdown.is(":visible"))&&e.preventDefault(),i.blur()),o.element.hasClass("uk-open")?(i.is("a:not(.js-uk-prevent)")||i.is(".uk-dropdown-close")||!o.dropdown.find(e.target).length)&&o.hide():o.show()}):this.on("mouseenter",function(){o.remainIdle&&clearTimeout(o.remainIdle),e&&clearTimeout(e),i&&i==o||(e=i&&i!=o?setTimeout(function(){e=setTimeout(o.show.bind(o),o.options.delay)},o.options.hoverDelayIdle):setTimeout(o.show.bind(o),o.options.delay))}).on("mouseleave",function(){e&&clearTimeout(e),o.remainIdle=setTimeout(function(){i&&i==o&&o.hide()},o.options.remaintime)}).on("click",function(e){var i=t.$(e.target);o.remainIdle&&clearTimeout(o.remainIdle),(i.is("a[href='#']")||i.parent().is("a[href='#']"))&&e.preventDefault(),o.show()})},show:function(){t.$html.off("click.outer.dropdown"),i&&i!=this&&i.hide(),e&&clearTimeout(e),this.checkDimensions(),this.element.addClass("uk-open"),this.element.attr("aria-expanded","true"),this.trigger("show.uk.dropdown",[this]),t.Utils.checkDisplay(this.dropdown,!0),i=this,this.registerOuterClick()},hide:function(){this.element.removeClass("uk-open"),this.remainIdle&&clearTimeout(this.remainIdle),this.remainIdle=!1,this.element.attr("aria-expanded","false"),this.trigger("hide.uk.dropdown",[this]),i==this&&(i=!1)},registerOuterClick:function(){var o=this;t.$html.off("click.outer.dropdown"),setTimeout(function(){t.$html.on("click.outer.dropdown",function(s){e&&clearTimeout(e);var n=t.$(s.target);i!=o||!n.is("a:not(.js-uk-prevent)")&&!n.is(".uk-dropdown-close")&&o.dropdown.find(s.target).length||(o.hide(),t.$html.off("click.outer.dropdown"))})},10)},checkDimensions:function(){if(this.dropdown.length){this.justified&&this.justified.length&&this.dropdown.css("min-width","");var e=this,i=this.dropdown.css("margin-"+t.langdirection,""),o=i.show().offset(),s=i.outerWidth(),n=this.boundary.width(),d=this.boundary.offset()?this.boundary.offset().left:0;if(this.centered&&(i.css("margin-"+t.langdirection,-1*(parseFloat(s)/2-i.parent().width()/2)),o=i.offset(),(s+o.left>n||o.left<0)&&(i.css("margin-"+t.langdirection,""),o=i.offset())),this.justified&&this.justified.length){var r=this.justified.outerWidth();if(i.css("min-width",r),"right"==t.langdirection){var a=n-(this.justified.offset().left+r),h=n-(i.offset().left+i.outerWidth());i.css("margin-right",a-h)}else i.css("margin-left",this.justified.offset().left-o.left);o=i.offset()}s+(o.left-d)>n&&(i.addClass("uk-dropdown-flip"),o=i.offset()),o.left-d<0&&(i.addClass("uk-dropdown-stack"),i.hasClass("uk-dropdown-flip")&&(this.flipped||(i.removeClass("uk-dropdown-flip"),o=i.offset(),i.addClass("uk-dropdown-flip")),setTimeout(function(){(i.offset().left-d<0||!e.flipped&&i.outerWidth()+(o.left-d)=100;return n&&!this.options.ignorestacked?this.revert():t.Utils.matchHeights(this.elements,this.options),this}},revert:function(){return this.elements.css("min-height",""),this}}),t.component("gridMargin",{defaults:{cls:"uk-grid-margin"},boot:function(){t.ready(function(i){t.$("[data-uk-grid-margin]",i).each(function(){var i,n=t.$(this);n.data("gridMargin")||(i=t.gridMargin(n,t.Utils.options(n.attr("data-uk-grid-margin"))))})})},init:function(){t.stackMargin(this.element,this.options)}})}(UIkit); \ No newline at end of file diff --git a/media/uikit/js/core/modal.min.js b/media/uikit/js/core/modal.min.js deleted file mode 100644 index 9242953..0000000 --- a/media/uikit/js/core/modal.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";function i(i,o){return o?("object"==typeof i?(i=i instanceof jQuery?i:t.$(i),i.parent().length&&(o.persist=i,o.persist.data("modalPersistParent",i.parent()))):i="string"==typeof i||"number"==typeof i?t.$("
              ").html(i):t.$("
              ").html("UIkit.modal Error: Unsupported data type: "+typeof i),i.appendTo(o.element.find(".uk-modal-dialog")),o):void 0}var o,e=!1,n=0,s=t.$html;t.component("modal",{defaults:{keyboard:!0,bgclose:!0,minScrollHeight:150,center:!1,modal:!0},scrollable:!1,transition:!1,init:function(){if(o||(o=t.$("body")),this.element.length){var i=this;this.paddingdir="padding-"+("left"==t.langdirection?"right":"left"),this.dialog=this.find(".uk-modal-dialog"),this.active=!1,this.element.attr("aria-hidden",this.element.hasClass("uk-open")),this.on("click",".uk-modal-close",function(t){t.preventDefault(),i.hide()}).on("click",function(o){var e=t.$(o.target);e[0]==i.element[0]&&i.options.bgclose&&i.hide()})}},toggle:function(){return this[this.isActive()?"hide":"show"]()},show:function(){if(this.element.length){if(!this.isActive())return this.options.modal&&e&&e.hide(!0),this.element.removeClass("uk-open").show(),this.resize(),this.options.modal&&(e=this),this.active=!0,n++,this.element.addClass("uk-open"),s.addClass("uk-modal-page").height(),this.element.attr("aria-hidden","false"),this.element.trigger("show.uk.modal"),t.Utils.checkDisplay(this.dialog,!0),this}},hide:function(i){if(!i&&t.support.transition){var o=this;this.one(t.support.transition.end,function(){o._hide()}).removeClass("uk-open")}else this._hide();return this},resize:function(){var t=o.width();if(this.scrollbarwidth=window.innerWidth-t,o.css(this.paddingdir,this.scrollbarwidth),this.element.css("overflow-y",this.scrollbarwidth?"scroll":"auto"),!this.updateScrollable()&&this.options.center){var i=this.dialog.outerHeight(),e=parseInt(this.dialog.css("margin-top"),10)+parseInt(this.dialog.css("margin-bottom"),10);i+ei?20:i)-o;return t.css("height",n
              ',t.modal.alert=function(i,o){o=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},o);var e=t.modal.dialog(['
              '+String(i)+"
              ",'"].join(""),o);e.on("show.uk.modal",function(){setTimeout(function(){e.element.find("button:first").focus()},50)}),e.show()},t.modal.confirm=function(i,o,e){o=t.$.isFunction(o)?o:function(){},e=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},e);var n=t.modal.dialog(['
              '+String(i)+"
              ",'"].join(""),e);n.element.find(".js-modal-confirm").on("click",function(){o(),n.hide()}),n.on("show.uk.modal",function(){setTimeout(function(){n.element.find("button:first").focus()},50)}),n.show()},t.modal.prompt=function(i,o,e,n){e=t.$.isFunction(e)?e:function(){},n=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},n);var s=t.modal.dialog([i?'
              '+String(i)+"
              ":"",'

              ','"].join(""),n),a=s.element.find("input[type='text']").val(o||"").on("keyup",function(t){13==t.keyCode&&s.element.find(".js-modal-ok").trigger("click")});s.element.find(".js-modal-ok").on("click",function(){e(a.val())!==!1&&s.hide()}),s.on("show.uk.modal",function(){setTimeout(function(){a.focus()},50)}),s.show()},t.modal.blockUI=function(i,o){var e=t.modal.dialog(['
              '+String(i||'
              ...
              ')+"
              "].join(""),t.$.extend({bgclose:!1,keyboard:!1,modal:!1},o));return e.content=e.element.find(".uk-modal-content:first"),e.show(),e},t.modal.labels={Ok:"Ok",Cancel:"Cancel"}}(UIkit); \ No newline at end of file diff --git a/media/uikit/js/core/nav.min.js b/media/uikit/js/core/nav.min.js deleted file mode 100644 index e5dfc88..0000000 --- a/media/uikit/js/core/nav.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(i){"use strict";function t(t){var s=i.$(t),a="auto";if(s.is(":visible"))a=s.outerHeight();else{var e={position:s.css("position"),visibility:s.css("visibility"),display:s.css("display")};a=s.css({position:"absolute",visibility:"hidden",display:"block"}).outerHeight(),s.css(e)}return a}i.component("nav",{defaults:{toggle:">li.uk-parent > a[href='#']",lists:">li.uk-parent > ul",multiple:!1},boot:function(){i.ready(function(t){i.$("[data-uk-nav]",t).each(function(){var t=i.$(this);if(!t.data("nav")){i.nav(t,i.Utils.options(t.attr("data-uk-nav")))}})})},init:function(){var t=this;this.on("click.uikit.nav",this.options.toggle,function(s){s.preventDefault();var a=i.$(this);t.open(a.parent()[0]==t.element[0]?a:a.parent("li"))}),this.find(this.options.lists).each(function(){var s=i.$(this),a=s.parent(),e=a.hasClass("uk-active");s.wrap('
              '),a.data("list-container",s.parent()[e?"removeClass":"addClass"]("uk-hidden")),a.attr("aria-expanded",a.hasClass("uk-open")),e&&t.open(a,!0)})},open:function(s,a){var e=this,n=this.element,o=i.$(s),l=o.data("list-container");this.options.multiple||n.children(".uk-open").not(s).each(function(){var t=i.$(this);t.data("list-container")&&t.data("list-container").stop().animate({height:0},function(){i.$(this).parent().removeClass("uk-open").end().addClass("uk-hidden")})}),o.toggleClass("uk-open"),o.attr("aria-expanded",o.hasClass("uk-open")),l&&(o.hasClass("uk-open")&&l.removeClass("uk-hidden"),a?(l.stop().height(o.hasClass("uk-open")?"auto":0),o.hasClass("uk-open")||l.addClass("uk-hidden"),this.trigger("display.uk.check")):l.stop().animate({height:o.hasClass("uk-open")?t(l.find("ul:first")):0},function(){o.hasClass("uk-open")?l.css("height",""):l.addClass("uk-hidden"),e.trigger("display.uk.check")}))}})}(UIkit); \ No newline at end of file diff --git a/media/uikit/js/core/offcanvas.js b/media/uikit/js/core/offcanvas.js deleted file mode 100644 index 68de197..0000000 --- a/media/uikit/js/core/offcanvas.js +++ /dev/null @@ -1,178 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -(function(UI) { - - "use strict"; - - var scrollpos = {x: window.scrollX, y: window.scrollY}, - $win = UI.$win, - $doc = UI.$doc, - $html = UI.$html, - Offcanvas = { - - show: function(element) { - - element = UI.$(element); - - if (!element.length) return; - - var $body = UI.$('body'), - bar = element.find(".uk-offcanvas-bar:first"), - rtl = (UI.langdirection == "right"), - flip = bar.hasClass("uk-offcanvas-bar-flip") ? -1:1, - dir = flip * (rtl ? -1 : 1); - - scrollpos = {x: window.pageXOffset, y: window.pageYOffset}; - - element.addClass("uk-active"); - - $body.css({"width": window.innerWidth, "height": window.innerHeight}).addClass("uk-offcanvas-page"); - $body.css((rtl ? "margin-right" : "margin-left"), (rtl ? -1 : 1) * (bar.outerWidth() * dir)).width(); // .width() - force redraw - - $html.css('margin-top', scrollpos.y * -1); - - bar.addClass("uk-offcanvas-bar-show"); - - this._initElement(element); - - bar.trigger('show.uk.offcanvas', [element, bar]); - - // Update ARIA - element.attr('aria-hidden', 'false'); - }, - - hide: function(force) { - - var $body = UI.$('body'), - panel = UI.$(".uk-offcanvas.uk-active"), - rtl = (UI.langdirection == "right"), - bar = panel.find(".uk-offcanvas-bar:first"), - finalize = function() { - $body.removeClass("uk-offcanvas-page").css({"width": "", "height": "", "margin-left": "", "margin-right": ""}); - panel.removeClass("uk-active"); - - bar.removeClass("uk-offcanvas-bar-show"); - $html.css('margin-top', ''); - window.scrollTo(scrollpos.x, scrollpos.y); - bar.trigger('hide.uk.offcanvas', [panel, bar]); - - // Update ARIA - panel.attr('aria-hidden', 'true'); - }; - - if (!panel.length) return; - - if (UI.support.transition && !force) { - - $body.one(UI.support.transition.end, function() { - finalize(); - }).css((rtl ? "margin-right" : "margin-left"), ""); - - setTimeout(function(){ - bar.removeClass("uk-offcanvas-bar-show"); - }, 0); - - } else { - finalize(); - } - }, - - _initElement: function(element) { - - if (element.data("OffcanvasInit")) return; - - element.on("click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas", function(e) { - - var target = UI.$(e.target); - - if (!e.type.match(/swipe/)) { - - if (!target.hasClass("uk-offcanvas-close")) { - if (target.hasClass("uk-offcanvas-bar")) return; - if (target.parents(".uk-offcanvas-bar:first").length) return; - } - } - - e.stopImmediatePropagation(); - Offcanvas.hide(); - }); - - element.on("click", "a[href^='#']", function(e){ - - var link = UI.$(this), - href = link.attr("href"); - - if (href == "#") { - return; - } - - UI.$doc.one('hide.uk.offcanvas', function() { - - var target; - - try { - target = UI.$(href); - } catch (e){ - target = "" - } - - if (!target.length) { - target = UI.$('[name="'+href.replace('#','')+'"]'); - } - - if (target.length && link.attr('data-uk-smooth-scroll') && UI.Utils.scrollToElement) { - UI.Utils.scrollToElement(target, UI.Utils.options(link.attr('data-uk-smooth-scroll') || '{}')); - } else { - window.location.href = href; - } - }); - - Offcanvas.hide(); - }); - - element.data("OffcanvasInit", true); - } - }; - - UI.component('offcanvasTrigger', { - - boot: function() { - - // init code - $html.on("click.offcanvas.uikit", "[data-uk-offcanvas]", function(e) { - - e.preventDefault(); - - var ele = UI.$(this); - - if (!ele.data("offcanvasTrigger")) { - var obj = UI.offcanvasTrigger(ele, UI.Utils.options(ele.attr("data-uk-offcanvas"))); - ele.trigger("click"); - } - }); - - $html.on('keydown.uk.offcanvas', function(e) { - - if (e.keyCode === 27) { // ESC - Offcanvas.hide(); - } - }); - }, - - init: function() { - - var $this = this; - - this.options = UI.$.extend({ - "target": $this.element.is("a") ? $this.element.attr("href") : false - }, this.options); - - this.on("click", function(e) { - e.preventDefault(); - Offcanvas.show($this.options.target); - }); - } - }); - - UI.offcanvas = Offcanvas; - -})(UIkit); diff --git a/media/uikit/js/core/offcanvas.min.js b/media/uikit/js/core/offcanvas.min.js deleted file mode 100644 index 480906e..0000000 --- a/media/uikit/js/core/offcanvas.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(a){"use strict";var t={x:window.scrollX,y:window.scrollY},n=(a.$win,a.$doc,a.$html),i={show:function(i){if(i=a.$(i),i.length){var o=a.$("body"),s=i.find(".uk-offcanvas-bar:first"),e="right"==a.langdirection,f=s.hasClass("uk-offcanvas-bar-flip")?-1:1,r=f*(e?-1:1);t={x:window.pageXOffset,y:window.pageYOffset},i.addClass("uk-active"),o.css({width:window.innerWidth,height:window.innerHeight}).addClass("uk-offcanvas-page"),o.css(e?"margin-right":"margin-left",(e?-1:1)*s.outerWidth()*r).width(),n.css("margin-top",-1*t.y),s.addClass("uk-offcanvas-bar-show"),this._initElement(i),s.trigger("show.uk.offcanvas",[i,s]),i.attr("aria-hidden","false")}},hide:function(i){var o=a.$("body"),s=a.$(".uk-offcanvas.uk-active"),e="right"==a.langdirection,f=s.find(".uk-offcanvas-bar:first"),r=function(){o.removeClass("uk-offcanvas-page").css({width:"",height:"","margin-left":"","margin-right":""}),s.removeClass("uk-active"),f.removeClass("uk-offcanvas-bar-show"),n.css("margin-top",""),window.scrollTo(t.x,t.y),f.trigger("hide.uk.offcanvas",[s,f]),s.attr("aria-hidden","true")};s.length&&(a.support.transition&&!i?(o.one(a.support.transition.end,function(){r()}).css(e?"margin-right":"margin-left",""),setTimeout(function(){f.removeClass("uk-offcanvas-bar-show")},0)):r())},_initElement:function(t){t.data("OffcanvasInit")||(t.on("click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas",function(t){var n=a.$(t.target);if(!t.type.match(/swipe/)&&!n.hasClass("uk-offcanvas-close")){if(n.hasClass("uk-offcanvas-bar"))return;if(n.parents(".uk-offcanvas-bar:first").length)return}t.stopImmediatePropagation(),i.hide()}),t.on("click","a[href^='#']",function(){var t=a.$(this),n=t.attr("href");"#"!=n&&(a.$doc.one("hide.uk.offcanvas",function(){var i;try{i=a.$(n)}catch(o){i=""}i.length||(i=a.$('[name="'+n.replace("#","")+'"]')),i.length&&t.attr("data-uk-smooth-scroll")&&a.Utils.scrollToElement?a.Utils.scrollToElement(i,a.Utils.options(t.attr("data-uk-smooth-scroll")||"{}")):window.location.href=n}),i.hide())}),t.data("OffcanvasInit",!0))}};a.component("offcanvasTrigger",{boot:function(){n.on("click.offcanvas.uikit","[data-uk-offcanvas]",function(t){t.preventDefault();var n=a.$(this);if(!n.data("offcanvasTrigger")){{a.offcanvasTrigger(n,a.Utils.options(n.attr("data-uk-offcanvas")))}n.trigger("click")}}),n.on("keydown.uk.offcanvas",function(a){27===a.keyCode&&i.hide()})},init:function(){var t=this;this.options=a.$.extend({target:t.element.is("a")?t.element.attr("href"):!1},this.options),this.on("click",function(a){a.preventDefault(),i.show(t.options.target)})}}),a.offcanvas=i}(UIkit); \ No newline at end of file diff --git a/media/uikit/js/core/scrollspy.min.js b/media/uikit/js/core/scrollspy.min.js deleted file mode 100644 index ade6890..0000000 --- a/media/uikit/js/core/scrollspy.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";var s=t.$win,o=t.$doc,i=[],e=function(){for(var t=0;t=p)return o[t]}();if(!f)return;c.options.closest?(e.closest(r).removeClass(a),l=e.filter("a[href='#"+f.attr("id")+"']").closest(r).addClass(a)):l=e.removeClass(a).filter("a[href='#"+f.attr("id")+"']").addClass(a),c.element.trigger("inview.uk.scrollspynav",[f,l])}};this.options.smoothscroll&&t.smoothScroll&&e.each(function(){t.smoothScroll(this,c.options.smoothscroll)}),p(),this.element.data("scrollspynav",this),this.check=p,l.push(this)}})}(UIkit); \ No newline at end of file diff --git a/media/uikit/js/core/switcher.min.js b/media/uikit/js/core/switcher.min.js deleted file mode 100644 index d06a3a0..0000000 --- a/media/uikit/js/core/switcher.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";function i(i,n,e){var a,s=t.$.Deferred(),o=i,r=i;return e[0]===n[0]?(s.resolve(),s.promise()):("object"==typeof i&&(o=i[0],r=i[1]||i[0]),a=function(){n&&n.hide().removeClass("uk-active "+r+" uk-animation-reverse"),e.addClass(o).one(t.support.animation.end,function(){e.removeClass(""+o).css({opacity:"",display:""}),s.resolve(),n&&n.css({opacity:"",display:""})}.bind(this)).show()},e.css("animation-duration",this.options.duration+"ms"),n&&n.length?(n.css("animation-duration",this.options.duration+"ms"),n.css("display","none").addClass(r+" uk-animation-reverse").one(t.support.animation.end,function(){a()}.bind(this)).css("display","")):(e.addClass("uk-active"),a()),s.promise())}var n;t.component("switcher",{defaults:{connect:!1,toggle:">*",active:0,animation:!1,duration:200},animating:!1,boot:function(){t.ready(function(i){t.$("[data-uk-switcher]",i).each(function(){var i=t.$(this);if(!i.data("switcher")){t.switcher(i,t.Utils.options(i.attr("data-uk-switcher")))}})})},init:function(){var i=this;if(this.on("click.uikit.switcher",this.options.toggle,function(t){t.preventDefault(),i.show(this)}),this.options.connect){this.connect=t.$(this.options.connect),this.connect.find(".uk-active").removeClass(".uk-active"),this.connect.length&&(this.connect.children().attr("aria-hidden","true"),this.connect.on("click","[data-uk-switcher-item]",function(n){n.preventDefault();var e=t.$(this).attr("data-uk-switcher-item");if(i.index!=e)switch(e){case"next":case"previous":i.show(i.index+("next"==e?1:-1));break;default:i.show(parseInt(e,10))}}).on("swipeRight swipeLeft",function(t){t.preventDefault(),window.getSelection().toString()||i.show(i.index+("swipeLeft"==t.type?1:-1))}));var n=this.find(this.options.toggle),e=n.filter(".uk-active");if(e.length)this.show(e,!1);else{if(this.options.active===!1)return;e=n.eq(this.options.active),this.show(e.length?e:n.eq(0),!1)}n.not(e).attr("aria-expanded","false"),e.attr("aria-expanded","true"),this.on("changed.uk.dom",function(){i.connect=t.$(i.options.connect)})}},show:function(e,a){if(!this.animating){if(isNaN(e))e=t.$(e);else{var s=this.find(this.options.toggle);e=0>e?s.length-1:e,e=s.eq(s[e]?e:0)}var o=this,s=this.find(this.options.toggle),r=t.$(e),c=n[this.options.animation]||function(t,e){if(!o.options.animation)return n.none.apply(o);var a=o.options.animation.split(",");return 1==a.length&&(a[1]=a[0]),a[0]=a[0].trim(),a[1]=a[1].trim(),i.apply(o,[a,t,e])};a!==!1&&t.support.animation||(c=n.none),r.hasClass("uk-disabled")||(s.attr("aria-expanded","false"),r.attr("aria-expanded","true"),s.filter(".uk-active").removeClass("uk-active"),r.addClass("uk-active"),this.options.connect&&this.connect.length&&(this.index=this.find(this.options.toggle).index(r),-1==this.index&&(this.index=0),this.connect.each(function(){var i=t.$(this),n=t.$(i.children()),e=t.$(n.filter(".uk-active")),a=t.$(n.eq(o.index));o.animating=!0,c.apply(o,[e,a]).then(function(){e.removeClass("uk-active"),a.addClass("uk-active"),e.attr("aria-hidden","true"),a.attr("aria-hidden","false"),t.Utils.checkDisplay(a,!0),o.animating=!1})})),this.trigger("show.uk.switcher",[r]))}}}),n={none:function(){var i=t.$.Deferred();return i.resolve(),i.promise()},fade:function(t,n){return i.apply(this,["uk-animation-fade",t,n])},"slide-bottom":function(t,n){return i.apply(this,["uk-animation-slide-bottom",t,n])},"slide-top":function(t,n){return i.apply(this,["uk-animation-slide-top",t,n])},"slide-vertical":function(t,n){var e=["uk-animation-slide-top","uk-animation-slide-bottom"];return t&&t.index()>n.index()&&e.reverse(),i.apply(this,[e,t,n])},"slide-left":function(t,n){return i.apply(this,["uk-animation-slide-left",t,n])},"slide-right":function(t,n){return i.apply(this,["uk-animation-slide-right",t,n])},"slide-horizontal":function(t,n){var e=["uk-animation-slide-right","uk-animation-slide-left"];return t&&t.index()>n.index()&&e.reverse(),i.apply(this,[e,t,n])},scale:function(t,n){return i.apply(this,["uk-animation-scale-up",t,n])}},t.switcher.animations=n}(UIkit); \ No newline at end of file diff --git a/media/uikit/js/core/tab.min.js b/media/uikit/js/core/tab.min.js deleted file mode 100644 index 3447bc6..0000000 --- a/media/uikit/js/core/tab.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";t.component("tab",{defaults:{target:">li:not(.uk-tab-responsive, .uk-disabled)",connect:!1,active:0,animation:!1,duration:200},boot:function(){t.ready(function(i){t.$("[data-uk-tab]",i).each(function(){var i=t.$(this);if(!i.data("tab")){t.tab(i,t.Utils.options(i.attr("data-uk-tab")))}})})},init:function(){var i=this;this.current=!1,this.on("click.uikit.tab",this.options.target,function(e){if(e.preventDefault(),!i.switcher||!i.switcher.animating){var s=i.find(i.options.target).not(this);s.removeClass("uk-active").blur(),i.trigger("change.uk.tab",[t.$(this).addClass("uk-active"),i.current]),i.current=t.$(this),i.options.connect||(s.attr("aria-expanded","false"),t.$(this).attr("aria-expanded","true"))}}),this.options.connect&&(this.connect=t.$(this.options.connect)),this.responsivetab=t.$('
            • ').append('
                '),this.responsivetab.dropdown=this.responsivetab.find(".uk-dropdown"),this.responsivetab.lst=this.responsivetab.dropdown.find("ul"),this.responsivetab.caption=this.responsivetab.find("a:first"),this.element.hasClass("uk-tab-bottom")&&this.responsivetab.dropdown.addClass("uk-dropdown-up"),this.responsivetab.lst.on("click.uikit.tab","a",function(e){e.preventDefault(),e.stopPropagation();var s=t.$(this);i.element.children("li:not(.uk-tab-responsive)").eq(s.data("index")).trigger("click")}),this.on("show.uk.switcher change.uk.tab",function(t,e){i.responsivetab.caption.html(e.text())}),this.element.append(this.responsivetab),this.options.connect&&(this.switcher=t.switcher(this.element,{toggle:">li:not(.uk-tab-responsive)",connect:this.options.connect,active:this.options.active,animation:this.options.animation,duration:this.options.duration})),t.dropdown(this.responsivetab,{mode:"click"}),i.trigger("change.uk.tab",[this.element.find(this.options.target).not(".uk-tab-responsive").filter(".uk-active")]),this.check(),t.$win.on("resize orientationchange",t.Utils.debounce(function(){i.element.is(":visible")&&i.check()},100)),this.on("display.uk.check",function(){i.element.is(":visible")&&i.check()})},check:function(){var i=this.element.children("li:not(.uk-tab-responsive)").removeClass("uk-hidden");if(!i.length)return this.responsivetab.addClass("uk-hidden"),void 0;var e,s,n,a=i.eq(0).offset().top+Math.ceil(i.eq(0).height()/2),o=!1;if(this.responsivetab.lst.empty(),i.each(function(){t.$(this).offset().top>a&&(o=!0)}),o)for(var r=0;r=Math.abs(n-o)?e-t>0?"Left":"Right":n-o>0?"Up":"Down"}function n(){p=null,g.last&&(g.el.trigger("longTap"),g={})}function o(){p&&clearTimeout(p),p=null}function i(){a&&clearTimeout(a),l&&clearTimeout(l),u&&clearTimeout(u),p&&clearTimeout(p),a=l=u=p=null,g={}}function r(e){return e.pointerType==e.MSPOINTER_TYPE_TOUCH&&e.isPrimary}if(!e.fn.swipeLeft){var a,l,u,p,c,g={},s=750;e(function(){var y,w,v,f=0,M=0;"MSGesture"in window&&(c=new MSGesture,c.target=document.body),e(document).on("MSGestureEnd gestureend",function(e){var t=e.originalEvent.velocityX>1?"Right":e.originalEvent.velocityX<-1?"Left":e.originalEvent.velocityY>1?"Down":e.originalEvent.velocityY<-1?"Up":null;t&&(g.el.trigger("swipe"),g.el.trigger("swipe"+t))}).on("touchstart MSPointerDown pointerdown",function(t){("MSPointerDown"!=t.type||r(t.originalEvent))&&(v="MSPointerDown"==t.type||"pointerdown"==t.type?t:t.originalEvent.touches[0],y=Date.now(),w=y-(g.last||y),g.el=e("tagName"in v.target?v.target:v.target.parentNode),a&&clearTimeout(a),g.x1=v.pageX,g.y1=v.pageY,w>0&&250>=w&&(g.isDoubleTap=!0),g.last=y,p=setTimeout(n,s),!c||"MSPointerDown"!=t.type&&"pointerdown"!=t.type&&"touchstart"!=t.type||c.addPointer(t.originalEvent.pointerId))}).on("touchmove MSPointerMove pointermove",function(e){("MSPointerMove"!=e.type||r(e.originalEvent))&&(v="MSPointerMove"==e.type||"pointermove"==e.type?e:e.originalEvent.touches[0],o(),g.x2=v.pageX,g.y2=v.pageY,f+=Math.abs(g.x1-g.x2),M+=Math.abs(g.y1-g.y2))}).on("touchend MSPointerUp pointerup",function(n){("MSPointerUp"!=n.type||r(n.originalEvent))&&(o(),g.x2&&Math.abs(g.x1-g.x2)>30||g.y2&&Math.abs(g.y1-g.y2)>30?u=setTimeout(function(){g.el.trigger("swipe"),g.el.trigger("swipe"+t(g.x1,g.x2,g.y1,g.y2)),g={}},0):"last"in g&&(isNaN(f)||30>f&&30>M?l=setTimeout(function(){var t=e.Event("tap");t.cancelTouch=i,g.el.trigger(t),g.isDoubleTap?(g.el.trigger("doubleTap"),g={}):a=setTimeout(function(){a=null,g.el.trigger("singleTap"),g={}},250)},0):g={},f=M=0))}).on("touchcancel MSPointerCancel",i),e(window).on("scroll",i)}),["swipe","swipeLeft","swipeRight","swipeUp","swipeDown","doubleTap","tap","singleTap","longTap"].forEach(function(t){e.fn[t]=function(n){return e(this).on(t,n)}})}}(jQuery); \ No newline at end of file diff --git a/media/uikit/js/core/utility.js b/media/uikit/js/core/utility.js deleted file mode 100644 index 0d423a6..0000000 --- a/media/uikit/js/core/utility.js +++ /dev/null @@ -1,243 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -(function(UI) { - - "use strict"; - - var stacks = []; - - UI.component('stackMargin', { - - defaults: { - 'cls': 'uk-margin-small-top' - }, - - boot: function() { - - // init code - UI.ready(function(context) { - - UI.$("[data-uk-margin]", context).each(function() { - - var ele = UI.$(this), obj; - - if (!ele.data("stackMargin")) { - obj = UI.stackMargin(ele, UI.Utils.options(ele.attr("data-uk-margin"))); - } - }); - }); - }, - - init: function() { - - var $this = this; - - this.columns = this.element.children(); - - if (!this.columns.length) return; - - UI.$win.on('resize orientationchange', (function() { - - var fn = function() { - $this.process(); - }; - - UI.$(function() { - fn(); - UI.$win.on("load", fn); - }); - - return UI.Utils.debounce(fn, 20); - })()); - - UI.$html.on("changed.uk.dom", function(e) { - $this.columns = $this.element.children(); - $this.process(); - }); - - this.on("display.uk.check", function(e) { - $this.columns = $this.element.children(); - if (this.element.is(":visible")) this.process(); - }.bind(this)); - - stacks.push(this); - }, - - process: function() { - - var $this = this; - - UI.Utils.stackMargin(this.columns, this.options); - - return this; - }, - - revert: function() { - this.columns.removeClass(this.options.cls); - return this; - } - }); - - - // responsive element e.g. iframes - - (function(){ - - var elements = [], check = function(ele) { - - if (!ele.is(':visible')) return; - - var width = ele.parent().width(), - iwidth = ele.data('width'), - ratio = (width / iwidth), - height = Math.floor(ratio * ele.data('height')); - - ele.css({'height': (width < iwidth) ? height : ele.data('height')}); - }; - - UI.component('responsiveElement', { - - defaults: {}, - - boot: function() { - - // init code - UI.ready(function(context) { - - UI.$("iframe.uk-responsive-width, [data-uk-responsive]", context).each(function() { - - var ele = UI.$(this), obj; - - if (!ele.data("responsiveIframe")) { - obj = UI.responsiveElement(ele, {}); - } - }); - }); - }, - - init: function() { - - var ele = this.element; - - if (ele.attr('width') && ele.attr('height')) { - - ele.data({ - - 'width' : ele.attr('width'), - 'height': ele.attr('height') - - }).on('display.uk.check', function(){ - check(ele); - }); - - check(ele); - - elements.push(ele); - } - } - }); - - UI.$win.on('resize load', UI.Utils.debounce(function(){ - - elements.forEach(function(ele){ - check(ele); - }); - - }, 15)); - - })(); - - - - // helper - - UI.Utils.stackMargin = function(elements, options) { - - options = UI.$.extend({ - 'cls': 'uk-margin-small-top' - }, options); - - options.cls = options.cls; - - elements = UI.$(elements).removeClass(options.cls); - - var skip = false, - firstvisible = elements.filter(":visible:first"), - offset = firstvisible.length ? (firstvisible.position().top + firstvisible.outerHeight()) - 1 : false; // (-1): weird firefox bug when parent container is display:flex - - if (offset === false) return; - - elements.each(function() { - - var column = UI.$(this); - - if (column.is(":visible")) { - - if (skip) { - column.addClass(options.cls); - } else { - - if (column.position().top >= offset) { - skip = column.addClass(options.cls); - } - } - } - }); - }; - - UI.Utils.matchHeights = function(elements, options) { - - elements = UI.$(elements).css('min-height', ''); - options = UI.$.extend({ row : true }, options); - - var matchHeights = function(group){ - - if (group.length < 2) return; - - var max = 0; - - group.each(function() { - max = Math.max(max, UI.$(this).outerHeight()); - }).each(function() { - - var element = UI.$(this), - height = max - (element.css('box-sizing') == 'border-box' ? 0 : (element.outerHeight() - element.height())); - - element.css('min-height', height + 'px'); - }); - }; - - if (options.row) { - - elements.first().width(); // force redraw - - setTimeout(function(){ - - var lastoffset = false, group = []; - - elements.each(function() { - - var ele = UI.$(this), offset = ele.offset().top; - - if (offset != lastoffset && group.length) { - - matchHeights(UI.$(group)); - group = []; - offset = ele.offset().top; - } - - group.push(ele); - lastoffset = offset; - }); - - if (group.length) { - matchHeights(UI.$(group)); - } - - }, 0); - - } else { - matchHeights(elements); - } - }; - -})(UIkit); diff --git a/media/uikit/js/core/utility.min.js b/media/uikit/js/core/utility.min.js deleted file mode 100644 index 7089709..0000000 --- a/media/uikit/js/core/utility.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){"use strict";var i=[];t.component("stackMargin",{defaults:{cls:"uk-margin-small-top"},boot:function(){t.ready(function(i){t.$("[data-uk-margin]",i).each(function(){var i,n=t.$(this);n.data("stackMargin")||(i=t.stackMargin(n,t.Utils.options(n.attr("data-uk-margin"))))})})},init:function(){var n=this;this.columns=this.element.children(),this.columns.length&&(t.$win.on("resize orientationchange",function(){var i=function(){n.process()};return t.$(function(){i(),t.$win.on("load",i)}),t.Utils.debounce(i,20)}()),t.$html.on("changed.uk.dom",function(){n.columns=n.element.children(),n.process()}),this.on("display.uk.check",function(){n.columns=n.element.children(),this.element.is(":visible")&&this.process()}.bind(this)),i.push(this))},process:function(){return t.Utils.stackMargin(this.columns,this.options),this},revert:function(){return this.columns.removeClass(this.options.cls),this}}),function(){var i=[],n=function(t){if(t.is(":visible")){var i=t.parent().width(),n=t.data("width"),s=i/n,e=Math.floor(s*t.data("height"));t.css({height:n>i?e:t.data("height")})}};t.component("responsiveElement",{defaults:{},boot:function(){t.ready(function(i){t.$("iframe.uk-responsive-width, [data-uk-responsive]",i).each(function(){var i,n=t.$(this);n.data("responsiveIframe")||(i=t.responsiveElement(n,{}))})})},init:function(){var t=this.element;t.attr("width")&&t.attr("height")&&(t.data({width:t.attr("width"),height:t.attr("height")}).on("display.uk.check",function(){n(t)}),n(t),i.push(t))}}),t.$win.on("resize load",t.Utils.debounce(function(){i.forEach(function(t){n(t)})},15))}(),t.Utils.stackMargin=function(i,n){n=t.$.extend({cls:"uk-margin-small-top"},n),n.cls=n.cls,i=t.$(i).removeClass(n.cls);var s=!1,e=i.filter(":visible:first"),o=e.length?e.position().top+e.outerHeight()-1:!1;o!==!1&&i.each(function(){var i=t.$(this);i.is(":visible")&&(s?i.addClass(n.cls):i.position().top>=o&&(s=i.addClass(n.cls)))})},t.Utils.matchHeights=function(i,n){i=t.$(i).css("min-height",""),n=t.$.extend({row:!0},n);var s=function(i){if(!(i.length<2)){var n=0;i.each(function(){n=Math.max(n,t.$(this).outerHeight())}).each(function(){var i=t.$(this),s=n-("border-box"==i.css("box-sizing")?0:i.outerHeight()-i.height());i.css("min-height",s+"px")})}};n.row?(i.first().width(),setTimeout(function(){var n=!1,e=[];i.each(function(){var i=t.$(this),o=i.offset().top;o!=n&&e.length&&(s(t.$(e)),e=[],o=i.offset().top),e.push(i),n=o}),e.length&&s(t.$(e))},0)):s(i)}}(UIkit); \ No newline at end of file diff --git a/media/uikit/js/uikit.min.js b/media/uikit/js/uikit.min.js deleted file mode 100644 index 1702ac2..0000000 --- a/media/uikit/js/uikit.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! UIkit 2.21.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -!function(t){if("function"==typeof define&&define.amd&&define("uikit",function(){var i=window.UIkit||t(window,window.jQuery,window.document);return i.load=function(t,e,n,o){var s,a=t.split(","),r=[],l=(o.config&&o.config.uikit&&o.config.uikit.base?o.config.uikit.base:"").replace(/\/+$/g,"");if(!l)throw new Error("Please define base path to UIkit in the requirejs config.");for(s=0;s0||t.navigator.pointerEnabled&&t.navigator.maxTouchPoints>0||!1,n.support.mutationobserver=t.MutationObserver||t.WebKitMutationObserver||null,n.Utils={},n.Utils.isFullscreen=function(){return document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.fullscreenElement||!1},n.Utils.str2json=function(t,i){try{return i?JSON.parse(t.replace(/([\$\w]+)\s*:/g,function(t,i){return'"'+i+'":'}).replace(/'([^']+)'/g,function(t,i){return'"'+i+'"'})):new Function("","var json = "+t+"; return JSON.parse(JSON.stringify(json));")()}catch(e){return!1}},n.Utils.debounce=function(t,i,e){var n;return function(){var o=this,s=arguments,a=function(){n=null,e||t.apply(o,s)},r=e&&!n;clearTimeout(n),n=setTimeout(a,i),r&&t.apply(o,s)}},n.Utils.removeCssRules=function(t){var i,e,n,o,s,a,r,l,c,u;t&&setTimeout(function(){try{for(u=document.styleSheets,o=0,r=u.length;r>o;o++){for(n=u[o],e=[],n.cssRules=n.cssRules,i=s=0,l=n.cssRules.length;l>s;i=++s)n.cssRules[i].type===CSSRule.STYLE_RULE&&t.test(n.cssRules[i].selectorText)&&e.unshift(i);for(a=0,c=e.length;c>a;a++)n.deleteRule(e[a])}}catch(h){}},0)},n.Utils.isInView=function(t,e){var o=i(t);if(!o.is(":visible"))return!1;var s=n.$win.scrollLeft(),a=n.$win.scrollTop(),r=o.offset(),l=r.left,c=r.top;return e=i.extend({topoffset:0,leftoffset:0},e),c+o.height()>=a&&c-e.topoffset<=a+n.$win.height()&&l+o.width()>=s&&l-e.leftoffset<=s+n.$win.width()?!0:!1},n.Utils.checkDisplay=function(t,e){var o=n.$("[data-uk-margin], [data-uk-grid-match], [data-uk-grid-margin], [data-uk-check-display]",t||document);return t&&!o.length&&(o=i(t)),o.trigger("display.uk.check"),e&&("string"!=typeof e&&(e='[class*="uk-animation-"]'),o.find(e).each(function(){var t=n.$(this),i=t.attr("class"),e=i.match(/uk\-animation\-(.+)/);t.removeClass(e[0]).width(),t.addClass(e[0])})),o},n.Utils.options=function(t){if(i.isPlainObject(t))return t;var e=t?t.indexOf("{"):-1,o={};if(-1!=e)try{o=n.Utils.str2json(t.substr(e))}catch(s){}return o},n.Utils.animate=function(t,e){var o=i.Deferred();return t=n.$(t),e=e,t.css("display","none").addClass(e).one(n.support.animation.end,function(){t.removeClass(e),o.resolve()}).width(),t.css("display",""),o.promise()},n.Utils.uid=function(t){return(t||"id")+(new Date).getTime()+"RAND"+Math.ceil(1e5*Math.random())},n.Utils.template=function(t,i){for(var e,n,o,s,a=t.replace(/\n/g,"\\n").replace(/\{\{\{\s*(.+?)\s*\}\}\}/g,"{{!$1}}").split(/(\{\{\s*(.+?)\s*\}\})/g),r=0,l=[],c=0;r/g, '>');}"].join("\n")),i?s(i):s},n.Utils.events={},n.Utils.events.click=n.support.touch?"tap":"click",t.UIkit=n,n.fn=function(t,e){var o=arguments,s=t.match(/^([a-z\-]+)(?:\.([a-z]+))?/i),a=s[1],r=s[2];return n[a]?this.each(function(){var t=i(this),s=t.data(a);s||t.data(a,s=n[a](this,r?void 0:e)),r&&s[r].apply(s,Array.prototype.slice.call(o,1))}):(i.error("UIkit component ["+a+"] does not exist."),this)},i.UIkit=n,i.fn.uk=n.fn,n.langdirection="rtl"==n.$html.attr("dir")?"right":"left",n.components={},n.component=function(t,e){var o=function(e,s){var a=this;return this.UIkit=n,this.element=e?n.$(e):null,this.options=i.extend(!0,{},this.defaults,s),this.plugins={},this.element&&this.element.data(t,this),this.init(),(this.options.plugins.length?this.options.plugins:Object.keys(o.plugins)).forEach(function(t){o.plugins[t].init&&(o.plugins[t].init(a),a.plugins[t]=!0)}),this.trigger("init.uk.component",[t,this]),this};return o.plugins={},i.extend(!0,o.prototype,{defaults:{plugins:[]},boot:function(){},init:function(){},on:function(t,i,e){return n.$(this.element||this).on(t,i,e)},one:function(t,i,e){return n.$(this.element||this).one(t,i,e)},off:function(t){return n.$(this.element||this).off(t)},trigger:function(t,i){return n.$(this.element||this).trigger(t,i)},find:function(t){return n.$(this.element?this.element:[]).find(t)},proxy:function(t,i){var e=this;i.split(" ").forEach(function(i){e[i]||(e[i]=function(){return t[i].apply(t,arguments)})})},mixin:function(t,i){var e=this;i.split(" ").forEach(function(i){e[i]||(e[i]=t[i].bind(e))})},option:function(){return 1==arguments.length?this.options[arguments[0]]||void 0:(2==arguments.length&&(this.options[arguments[0]]=arguments[1]),void 0)}},e),this.components[t]=o,this[t]=function(){var e,o;if(arguments.length)switch(arguments.length){case 1:"string"==typeof arguments[0]||arguments[0].nodeType||arguments[0]instanceof jQuery?e=i(arguments[0]):o=arguments[0];break;case 2:e=i(arguments[0]),o=arguments[1]}return e&&e.data(t)?e.data(t):new n.components[t](e,o)},n.domready&&n.component.boot(t),o},n.plugin=function(t,i,e){this.components[t].plugins[i]=e},n.component.boot=function(t){n.components[t].prototype&&n.components[t].prototype.boot&&!n.components[t].booted&&(n.components[t].prototype.boot.apply(n,[]),n.components[t].booted=!0)},n.component.bootComponents=function(){for(var t in n.components)n.component.boot(t)},n.domObservers=[],n.domready=!1,n.ready=function(t){n.domObservers.push(t),n.domready&&t(document)},n.on=function(t,i,e){return t&&t.indexOf("ready.uk.dom")>-1&&n.domready&&i.apply(n.$doc),n.$doc.on(t,i,e)},n.one=function(t,i,e){return t&&t.indexOf("ready.uk.dom")>-1&&n.domready?(i.apply(n.$doc),n.$doc):n.$doc.one(t,i,e)},n.trigger=function(t,i){return n.$doc.trigger(t,i)},n.domObserve=function(t,i){n.support.mutationobserver&&(i=i||function(){},n.$(t).each(function(){var t=this,e=n.$(t);if(!e.data("observer"))try{var o=new n.support.mutationobserver(n.Utils.debounce(function(){i.apply(t,[]),e.trigger("changed.uk.dom")},50));o.observe(t,{childList:!0,subtree:!0}),e.data("observer",o)}catch(s){}}))},n.init=function(t){t=t||document,n.domObservers.forEach(function(i){i(t)})},n.on("domready.uk.dom",function(){n.init(),n.domready&&n.Utils.checkDisplay()}),i(function(){n.$body=n.$("body"),n.ready(function(){n.domObserve("[data-uk-observe]")}),n.on("changed.uk.dom",function(t){n.init(t.target),n.Utils.checkDisplay(t.target)}),n.trigger("beforeready.uk.dom"),n.component.bootComponents(),setInterval(function(){var t,i={x:window.pageXOffset,y:window.pageYOffset},e=function(){(i.x!=window.pageXOffset||i.y!=window.pageYOffset)&&(t={x:0,y:0},window.pageXOffset!=i.x&&(t.x=window.pageXOffset>i.x?1:-1),window.pageYOffset!=i.y&&(t.y=window.pageYOffset>i.y?1:-1),i={dir:t,x:window.pageXOffset,y:window.pageYOffset},n.$doc.trigger("scrolling.uk.document",[i]))};return n.support.touch&&n.$html.on("touchmove touchend MSPointerMove MSPointerUp pointermove pointerup",e),(i.x||i.y)&&e(),e}(),15),n.trigger("domready.uk.dom"),n.support.touch&&navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&n.$win.on("load orientationchange resize",n.Utils.debounce(function(){var t=function(){return i(".uk-height-viewport").css("height",window.innerHeight),t};return t()}(),100)),n.trigger("afterready.uk.dom"),n.domready=!0}),n.$html.addClass(n.support.touch?"uk-touch":"uk-notouch"),n.support.touch){var s,a=!1,r="uk-hover",l=".uk-overlay, .uk-overlay-hover, .uk-overlay-toggle, .uk-animation-hover, .uk-has-hover";n.$html.on("touchstart MSPointerDown pointerdown",l,function(){a&&i("."+r).removeClass(r),a=i(this).addClass(r)}).on("touchend MSPointerUp pointerup",function(t){s=i(t.target).parents(l),a&&a.not(s).removeClass(r)})}return n}),function(t){function i(t,i,e,n){return Math.abs(t-i)>=Math.abs(e-n)?t-i>0?"Left":"Right":e-n>0?"Up":"Down"}function e(){c=null,h.last&&(h.el.trigger("longTap"),h={})}function n(){c&&clearTimeout(c),c=null}function o(){a&&clearTimeout(a),r&&clearTimeout(r),l&&clearTimeout(l),c&&clearTimeout(c),a=r=l=c=null,h={}}function s(t){return t.pointerType==t.MSPOINTER_TYPE_TOUCH&&t.isPrimary}if(!t.fn.swipeLeft){var a,r,l,c,u,h={},d=750;t(function(){var f,p,m,g=0,v=0;"MSGesture"in window&&(u=new MSGesture,u.target=document.body),t(document).on("MSGestureEnd gestureend",function(t){var i=t.originalEvent.velocityX>1?"Right":t.originalEvent.velocityX<-1?"Left":t.originalEvent.velocityY>1?"Down":t.originalEvent.velocityY<-1?"Up":null;i&&(h.el.trigger("swipe"),h.el.trigger("swipe"+i))}).on("touchstart MSPointerDown pointerdown",function(i){("MSPointerDown"!=i.type||s(i.originalEvent))&&(m="MSPointerDown"==i.type||"pointerdown"==i.type?i:i.originalEvent.touches[0],f=Date.now(),p=f-(h.last||f),h.el=t("tagName"in m.target?m.target:m.target.parentNode),a&&clearTimeout(a),h.x1=m.pageX,h.y1=m.pageY,p>0&&250>=p&&(h.isDoubleTap=!0),h.last=f,c=setTimeout(e,d),!u||"MSPointerDown"!=i.type&&"pointerdown"!=i.type&&"touchstart"!=i.type||u.addPointer(i.originalEvent.pointerId))}).on("touchmove MSPointerMove pointermove",function(t){("MSPointerMove"!=t.type||s(t.originalEvent))&&(m="MSPointerMove"==t.type||"pointermove"==t.type?t:t.originalEvent.touches[0],n(),h.x2=m.pageX,h.y2=m.pageY,g+=Math.abs(h.x1-h.x2),v+=Math.abs(h.y1-h.y2))}).on("touchend MSPointerUp pointerup",function(e){("MSPointerUp"!=e.type||s(e.originalEvent))&&(n(),h.x2&&Math.abs(h.x1-h.x2)>30||h.y2&&Math.abs(h.y1-h.y2)>30?l=setTimeout(function(){h.el.trigger("swipe"),h.el.trigger("swipe"+i(h.x1,h.x2,h.y1,h.y2)),h={}},0):"last"in h&&(isNaN(g)||30>g&&30>v?r=setTimeout(function(){var i=t.Event("tap");i.cancelTouch=o,h.el.trigger(i),h.isDoubleTap?(h.el.trigger("doubleTap"),h={}):a=setTimeout(function(){a=null,h.el.trigger("singleTap"),h={}},250)},0):h={},g=v=0))}).on("touchcancel MSPointerCancel",o),t(window).on("scroll",o)}),["swipe","swipeLeft","swipeRight","swipeUp","swipeDown","doubleTap","tap","singleTap","longTap"].forEach(function(i){t.fn[i]=function(e){return t(this).on(i,e)}})}}(jQuery),function(t){"use strict";var i=[];t.component("stackMargin",{defaults:{cls:"uk-margin-small-top"},boot:function(){t.ready(function(i){t.$("[data-uk-margin]",i).each(function(){var i,e=t.$(this);e.data("stackMargin")||(i=t.stackMargin(e,t.Utils.options(e.attr("data-uk-margin"))))})})},init:function(){var e=this;this.columns=this.element.children(),this.columns.length&&(t.$win.on("resize orientationchange",function(){var i=function(){e.process()};return t.$(function(){i(),t.$win.on("load",i)}),t.Utils.debounce(i,20)}()),t.$html.on("changed.uk.dom",function(){e.columns=e.element.children(),e.process()}),this.on("display.uk.check",function(){e.columns=e.element.children(),this.element.is(":visible")&&this.process()}.bind(this)),i.push(this))},process:function(){return t.Utils.stackMargin(this.columns,this.options),this},revert:function(){return this.columns.removeClass(this.options.cls),this}}),function(){var i=[],e=function(t){if(t.is(":visible")){var i=t.parent().width(),e=t.data("width"),n=i/e,o=Math.floor(n*t.data("height"));t.css({height:e>i?o:t.data("height")})}};t.component("responsiveElement",{defaults:{},boot:function(){t.ready(function(i){t.$("iframe.uk-responsive-width, [data-uk-responsive]",i).each(function(){var i,e=t.$(this);e.data("responsiveIframe")||(i=t.responsiveElement(e,{}))})})},init:function(){var t=this.element;t.attr("width")&&t.attr("height")&&(t.data({width:t.attr("width"),height:t.attr("height")}).on("display.uk.check",function(){e(t)}),e(t),i.push(t))}}),t.$win.on("resize load",t.Utils.debounce(function(){i.forEach(function(t){e(t)})},15))}(),t.Utils.stackMargin=function(i,e){e=t.$.extend({cls:"uk-margin-small-top"},e),e.cls=e.cls,i=t.$(i).removeClass(e.cls);var n=!1,o=i.filter(":visible:first"),s=o.length?o.position().top+o.outerHeight()-1:!1;s!==!1&&i.each(function(){var i=t.$(this);i.is(":visible")&&(n?i.addClass(e.cls):i.position().top>=s&&(n=i.addClass(e.cls)))})},t.Utils.matchHeights=function(i,e){i=t.$(i).css("min-height",""),e=t.$.extend({row:!0},e);var n=function(i){if(!(i.length<2)){var e=0;i.each(function(){e=Math.max(e,t.$(this).outerHeight())}).each(function(){var i=t.$(this),n=e-("border-box"==i.css("box-sizing")?0:i.outerHeight()-i.height());i.css("min-height",n+"px")})}};e.row?(i.first().width(),setTimeout(function(){var e=!1,o=[];i.each(function(){var i=t.$(this),s=i.offset().top;s!=e&&o.length&&(n(t.$(o)),o=[],s=i.offset().top),o.push(i),e=s}),o.length&&n(t.$(o))},0)):n(i)}}(UIkit),function(t){"use strict";function i(i,e){e=t.$.extend({duration:1e3,transition:"easeOutExpo",offset:0,complete:function(){}},e);var n=i.offset().top-e.offset,o=t.$doc.height(),s=window.innerHeight;n+s>o&&(n=o-s),t.$("html,body").stop().animate({scrollTop:n},e.duration,e.transition).promise().done(e.complete)}t.component("smoothScroll",{boot:function(){t.$html.on("click.smooth-scroll.uikit","[data-uk-smooth-scroll]",function(){var i=t.$(this);if(!i.data("smoothScroll")){{t.smoothScroll(i,t.Utils.options(i.attr("data-uk-smooth-scroll")))}i.trigger("click")}return!1})},init:function(){var e=this;this.on("click",function(n){n.preventDefault(),i(t.$(this.hash).length?t.$(this.hash):t.$("body"),e.options)})}}),t.Utils.scrollToElement=i,t.$.easing.easeOutExpo||(t.$.easing.easeOutExpo=function(t,i,e,n,o){return i==o?e+n:n*(-Math.pow(2,-10*i/o)+1)+e})}(UIkit),function(t){"use strict";var i=t.$win,e=t.$doc,n=[],o=function(){for(var t=0;t=u)return e[t]}();if(!h)return;c.options.closest?(o.closest(l).removeClass(r),s=o.filter("a[href='#"+h.attr("id")+"']").closest(l).addClass(r)):s=o.removeClass(r).filter("a[href='#"+h.attr("id")+"']").addClass(r),c.element.trigger("inview.uk.scrollspynav",[h,s])}};this.options.smoothscroll&&t.smoothScroll&&o.each(function(){t.smoothScroll(this,c.options.smoothscroll)}),u(),this.element.data("scrollspynav",this),this.check=u,s.push(this)}})}(UIkit),function(t){"use strict";var i=[];t.component("toggle",{defaults:{target:!1,cls:"uk-hidden",animation:!1,duration:200},boot:function(){t.ready(function(e){t.$("[data-uk-toggle]",e).each(function(){var i=t.$(this);if(!i.data("toggle")){t.toggle(i,t.Utils.options(i.attr("data-uk-toggle")))}}),setTimeout(function(){i.forEach(function(t){t.getToggles()})},0)})},init:function(){var t=this;this.aria=-1!==this.options.cls.indexOf("uk-hidden"),this.getToggles(),this.on("click",function(i){t.element.is('a[href="#"]')&&i.preventDefault(),t.toggle()}),i.push(this)},toggle:function(){if(this.totoggle.length){if(this.options.animation&&t.support.animation){var i=this,e=this.options.animation.split(",");1==e.length&&(e[1]=e[0]),e[0]=e[0].trim(),e[1]=e[1].trim(),this.totoggle.css("animation-duration",this.options.duration+"ms"),this.totoggle.hasClass(this.options.cls)?(this.totoggle.toggleClass(this.options.cls),this.totoggle.each(function(){t.Utils.animate(this,e[0]).then(function(){t.$(this).css("animation-duration",""),t.Utils.checkDisplay(this)})})):this.totoggle.each(function(){t.Utils.animate(this,e[1]+" uk-animation-reverse").then(function(){t.$(this).toggleClass(i.options.cls).css("animation-duration",""),t.Utils.checkDisplay(this)}.bind(this))})}else this.totoggle.toggleClass(this.options.cls),t.Utils.checkDisplay(this.totoggle);this.updateAria()}},getToggles:function(){this.totoggle=this.options.target?t.$(this.options.target):[],this.updateAria()},updateAria:function(){this.aria&&this.totoggle.length&&this.totoggle.each(function(){t.$(this).attr("aria-hidden",t.$(this).hasClass("uk-hidden"))})}})}(UIkit),function(t){"use strict";t.component("alert",{defaults:{fade:!0,duration:200,trigger:".uk-alert-close"},boot:function(){t.$html.on("click.alert.uikit","[data-uk-alert]",function(i){var e=t.$(this);if(!e.data("alert")){var n=t.alert(e,t.Utils.options(e.attr("data-uk-alert")));t.$(i.target).is(n.options.trigger)&&(i.preventDefault(),n.close())}})},init:function(){var t=this;this.on("click",this.options.trigger,function(i){i.preventDefault(),t.close()})},close:function(){var t=this.trigger("close.uk.alert"),i=function(){this.trigger("closed.uk.alert").remove()}.bind(this);this.options.fade?t.css("overflow","hidden").css("max-height",t.height()).animate({height:0,opacity:0,"padding-top":0,"padding-bottom":0,"margin-top":0,"margin-bottom":0},this.options.duration,i):i()}})}(UIkit),function(t){"use strict";t.component("buttonRadio",{defaults:{target:".uk-button"},boot:function(){t.$html.on("click.buttonradio.uikit","[data-uk-button-radio]",function(i){var e=t.$(this);if(!e.data("buttonRadio")){var n=t.buttonRadio(e,t.Utils.options(e.attr("data-uk-button-radio"))),o=t.$(i.target);o.is(n.options.target)&&o.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter(".uk-active").attr("aria-checked","true"),this.on("click",this.options.target,function(e){var n=t.$(this);n.is('a[href="#"]')&&e.preventDefault(),i.find(i.options.target).not(n).removeClass("uk-active").blur(),n.addClass("uk-active"),i.find(i.options.target).not(n).attr("aria-checked","false"),n.attr("aria-checked","true"),i.trigger("change.uk.button",[n])})},getSelected:function(){return this.find(".uk-active")}}),t.component("buttonCheckbox",{defaults:{target:".uk-button"},boot:function(){t.$html.on("click.buttoncheckbox.uikit","[data-uk-button-checkbox]",function(i){var e=t.$(this);if(!e.data("buttonCheckbox")){var n=t.buttonCheckbox(e,t.Utils.options(e.attr("data-uk-button-checkbox"))),o=t.$(i.target);o.is(n.options.target)&&o.trigger("click")}})},init:function(){var i=this;this.find(i.options.target).attr("aria-checked","false").filter(".uk-active").attr("aria-checked","true"),this.on("click",this.options.target,function(e){var n=t.$(this);n.is('a[href="#"]')&&e.preventDefault(),n.toggleClass("uk-active").blur(),n.attr("aria-checked",n.hasClass("uk-active")),i.trigger("change.uk.button",[n])})},getSelected:function(){return this.find(".uk-active")}}),t.component("button",{defaults:{},boot:function(){t.$html.on("click.button.uikit","[data-uk-button]",function(){var i=t.$(this);if(!i.data("button")){{t.button(i,t.Utils.options(i.attr("data-uk-button")))}i.trigger("click")}})},init:function(){var t=this;this.element.attr("aria-pressed",this.element.hasClass("uk-active")),this.on("click",function(i){t.element.is('a[href="#"]')&&i.preventDefault(),t.toggle(),t.trigger("change.uk.button",[t.element.blur().hasClass("uk-active")])})},toggle:function(){this.element.toggleClass("uk-active"),this.element.attr("aria-pressed",this.element.hasClass("uk-active"))}})}(UIkit),function(t){"use strict";var i,e=!1;t.component("dropdown",{defaults:{mode:"hover",remaintime:800,justify:!1,boundary:t.$win,delay:0,hoverDelayIdle:250},remainIdle:!1,boot:function(){var i=t.support.touch?"click":"mouseenter";t.$html.on(i+".dropdown.uikit","[data-uk-dropdown]",function(e){var n=t.$(this);if(!n.data("dropdown")){var o=t.dropdown(n,t.Utils.options(n.attr("data-uk-dropdown")));("click"==i||"mouseenter"==i&&"hover"==o.options.mode)&&o.element.trigger(i),o.element.find(".uk-dropdown").length&&e.preventDefault()}})},init:function(){var n=this;this.dropdown=this.find(".uk-dropdown"),this.centered=this.dropdown.hasClass("uk-dropdown-center"),this.justified=this.options.justify?t.$(this.options.justify):!1,this.boundary=t.$(this.options.boundary),this.flipped=this.dropdown.hasClass("uk-dropdown-flip"),this.boundary.length||(this.boundary=t.$win),this.element.attr("aria-haspopup","true"),this.element.attr("aria-expanded",this.element.hasClass("uk-open")),"click"==this.options.mode||t.support.touch?this.on("click.uikit.dropdown",function(i){var e=t.$(i.target);e.parents(".uk-dropdown").length||((e.is("a[href='#']")||e.parent().is("a[href='#']")||n.dropdown.length&&!n.dropdown.is(":visible"))&&i.preventDefault(),e.blur()),n.element.hasClass("uk-open")?(e.is("a:not(.js-uk-prevent)")||e.is(".uk-dropdown-close")||!n.dropdown.find(i.target).length)&&n.hide():n.show()}):this.on("mouseenter",function(){n.remainIdle&&clearTimeout(n.remainIdle),i&&clearTimeout(i),e&&e==n||(i=e&&e!=n?setTimeout(function(){i=setTimeout(n.show.bind(n),n.options.delay)},n.options.hoverDelayIdle):setTimeout(n.show.bind(n),n.options.delay))}).on("mouseleave",function(){i&&clearTimeout(i),n.remainIdle=setTimeout(function(){e&&e==n&&n.hide()},n.options.remaintime)}).on("click",function(i){var e=t.$(i.target);n.remainIdle&&clearTimeout(n.remainIdle),(e.is("a[href='#']")||e.parent().is("a[href='#']"))&&i.preventDefault(),n.show()})},show:function(){t.$html.off("click.outer.dropdown"),e&&e!=this&&e.hide(),i&&clearTimeout(i),this.checkDimensions(),this.element.addClass("uk-open"),this.element.attr("aria-expanded","true"),this.trigger("show.uk.dropdown",[this]),t.Utils.checkDisplay(this.dropdown,!0),e=this,this.registerOuterClick()},hide:function(){this.element.removeClass("uk-open"),this.remainIdle&&clearTimeout(this.remainIdle),this.remainIdle=!1,this.element.attr("aria-expanded","false"),this.trigger("hide.uk.dropdown",[this]),e==this&&(e=!1)},registerOuterClick:function(){var n=this;t.$html.off("click.outer.dropdown"),setTimeout(function(){t.$html.on("click.outer.dropdown",function(o){i&&clearTimeout(i);var s=t.$(o.target);e!=n||!s.is("a:not(.js-uk-prevent)")&&!s.is(".uk-dropdown-close")&&n.dropdown.find(o.target).length||(n.hide(),t.$html.off("click.outer.dropdown"))})},10)},checkDimensions:function(){if(this.dropdown.length){this.justified&&this.justified.length&&this.dropdown.css("min-width","");var i=this,e=this.dropdown.css("margin-"+t.langdirection,""),n=e.show().offset(),o=e.outerWidth(),s=this.boundary.width(),a=this.boundary.offset()?this.boundary.offset().left:0;if(this.centered&&(e.css("margin-"+t.langdirection,-1*(parseFloat(o)/2-e.parent().width()/2)),n=e.offset(),(o+n.left>s||n.left<0)&&(e.css("margin-"+t.langdirection,""),n=e.offset())),this.justified&&this.justified.length){var r=this.justified.outerWidth();if(e.css("min-width",r),"right"==t.langdirection){var l=s-(this.justified.offset().left+r),c=s-(e.offset().left+e.outerWidth());e.css("margin-right",l-c)}else e.css("margin-left",this.justified.offset().left-n.left);n=e.offset()}o+(n.left-a)>s&&(e.addClass("uk-dropdown-flip"),n=e.offset()),n.left-a<0&&(e.addClass("uk-dropdown-stack"),e.hasClass("uk-dropdown-flip")&&(this.flipped||(e.removeClass("uk-dropdown-flip"),n=e.offset(),e.addClass("uk-dropdown-flip")),setTimeout(function(){(e.offset().left-a<0||!i.flipped&&e.outerWidth()+(n.left-a)=100;return e&&!this.options.ignorestacked?this.revert():t.Utils.matchHeights(this.elements,this.options),this}},revert:function(){return this.elements.css("min-height",""),this}}),t.component("gridMargin",{defaults:{cls:"uk-grid-margin"},boot:function(){t.ready(function(i){t.$("[data-uk-grid-margin]",i).each(function(){var i,e=t.$(this);e.data("gridMargin")||(i=t.gridMargin(e,t.Utils.options(e.attr("data-uk-grid-margin"))))})})},init:function(){t.stackMargin(this.element,this.options)}})}(UIkit),function(t){"use strict";function i(i,e){return e?("object"==typeof i?(i=i instanceof jQuery?i:t.$(i),i.parent().length&&(e.persist=i,e.persist.data("modalPersistParent",i.parent()))):i="string"==typeof i||"number"==typeof i?t.$("
                ").html(i):t.$("
                ").html("UIkit.modal Error: Unsupported data type: "+typeof i),i.appendTo(e.element.find(".uk-modal-dialog")),e):void 0}var e,n=!1,o=0,s=t.$html;t.component("modal",{defaults:{keyboard:!0,bgclose:!0,minScrollHeight:150,center:!1,modal:!0},scrollable:!1,transition:!1,init:function(){if(e||(e=t.$("body")),this.element.length){var i=this;this.paddingdir="padding-"+("left"==t.langdirection?"right":"left"),this.dialog=this.find(".uk-modal-dialog"),this.active=!1,this.element.attr("aria-hidden",this.element.hasClass("uk-open")),this.on("click",".uk-modal-close",function(t){t.preventDefault(),i.hide()}).on("click",function(e){var n=t.$(e.target);n[0]==i.element[0]&&i.options.bgclose&&i.hide()})}},toggle:function(){return this[this.isActive()?"hide":"show"]()},show:function(){if(this.element.length){if(!this.isActive())return this.options.modal&&n&&n.hide(!0),this.element.removeClass("uk-open").show(),this.resize(),this.options.modal&&(n=this),this.active=!0,o++,this.element.addClass("uk-open"),s.addClass("uk-modal-page").height(),this.element.attr("aria-hidden","false"),this.element.trigger("show.uk.modal"),t.Utils.checkDisplay(this.dialog,!0),this}},hide:function(i){if(!i&&t.support.transition){var e=this;this.one(t.support.transition.end,function(){e._hide()}).removeClass("uk-open")}else this._hide();return this},resize:function(){var t=e.width();if(this.scrollbarwidth=window.innerWidth-t,e.css(this.paddingdir,this.scrollbarwidth),this.element.css("overflow-y",this.scrollbarwidth?"scroll":"auto"),!this.updateScrollable()&&this.options.center){var i=this.dialog.outerHeight(),n=parseInt(this.dialog.css("margin-top"),10)+parseInt(this.dialog.css("margin-bottom"),10);i+ni?20:i)-e;return t.css("height",o
                ',t.modal.alert=function(i,e){e=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},e);var n=t.modal.dialog(['
                '+String(i)+"
                ",'"].join(""),e);n.on("show.uk.modal",function(){setTimeout(function(){n.element.find("button:first").focus()},50)}),n.show()},t.modal.confirm=function(i,e,n){e=t.$.isFunction(e)?e:function(){},n=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},n);var o=t.modal.dialog(['
                '+String(i)+"
                ",'"].join(""),n);o.element.find(".js-modal-confirm").on("click",function(){e(),o.hide()}),o.on("show.uk.modal",function(){setTimeout(function(){o.element.find("button:first").focus()},50)}),o.show()},t.modal.prompt=function(i,e,n,o){n=t.$.isFunction(n)?n:function(){},o=t.$.extend(!0,{bgclose:!1,keyboard:!1,modal:!1,labels:t.modal.labels},o);var s=t.modal.dialog([i?'
                '+String(i)+"
                ":"",'

                ','"].join(""),o),a=s.element.find("input[type='text']").val(e||"").on("keyup",function(t){13==t.keyCode&&s.element.find(".js-modal-ok").trigger("click")});s.element.find(".js-modal-ok").on("click",function(){n(a.val())!==!1&&s.hide()}),s.on("show.uk.modal",function(){setTimeout(function(){a.focus()},50)}),s.show()},t.modal.blockUI=function(i,e){var n=t.modal.dialog(['
                '+String(i||'
                ...
                ')+"
                "].join(""),t.$.extend({bgclose:!1,keyboard:!1,modal:!1},e));return n.content=n.element.find(".uk-modal-content:first"),n.show(),n},t.modal.labels={Ok:"Ok",Cancel:"Cancel"}}(UIkit),function(t){"use strict";function i(i){var e=t.$(i),n="auto";if(e.is(":visible"))n=e.outerHeight();else{var o={position:e.css("position"),visibility:e.css("visibility"),display:e.css("display")};n=e.css({position:"absolute",visibility:"hidden",display:"block"}).outerHeight(),e.css(o)}return n}t.component("nav",{defaults:{toggle:">li.uk-parent > a[href='#']",lists:">li.uk-parent > ul",multiple:!1},boot:function(){t.ready(function(i){t.$("[data-uk-nav]",i).each(function(){var i=t.$(this);if(!i.data("nav")){t.nav(i,t.Utils.options(i.attr("data-uk-nav")))}})})},init:function(){var i=this;this.on("click.uikit.nav",this.options.toggle,function(e){e.preventDefault();var n=t.$(this);i.open(n.parent()[0]==i.element[0]?n:n.parent("li"))}),this.find(this.options.lists).each(function(){var e=t.$(this),n=e.parent(),o=n.hasClass("uk-active");e.wrap('
                '),n.data("list-container",e.parent()[o?"removeClass":"addClass"]("uk-hidden")),n.attr("aria-expanded",n.hasClass("uk-open")),o&&i.open(n,!0)})},open:function(e,n){var o=this,s=this.element,a=t.$(e),r=a.data("list-container");this.options.multiple||s.children(".uk-open").not(e).each(function(){var i=t.$(this);i.data("list-container")&&i.data("list-container").stop().animate({height:0},function(){t.$(this).parent().removeClass("uk-open").end().addClass("uk-hidden")})}),a.toggleClass("uk-open"),a.attr("aria-expanded",a.hasClass("uk-open")),r&&(a.hasClass("uk-open")&&r.removeClass("uk-hidden"),n?(r.stop().height(a.hasClass("uk-open")?"auto":0),a.hasClass("uk-open")||r.addClass("uk-hidden"),this.trigger("display.uk.check")):r.stop().animate({height:a.hasClass("uk-open")?i(r.find("ul:first")):0},function(){a.hasClass("uk-open")?r.css("height",""):r.addClass("uk-hidden"),o.trigger("display.uk.check")}))}})}(UIkit),function(t){"use strict";var i={x:window.scrollX,y:window.scrollY},e=(t.$win,t.$doc,t.$html),n={show:function(n){if(n=t.$(n),n.length){var o=t.$("body"),s=n.find(".uk-offcanvas-bar:first"),a="right"==t.langdirection,r=s.hasClass("uk-offcanvas-bar-flip")?-1:1,l=r*(a?-1:1);i={x:window.pageXOffset,y:window.pageYOffset},n.addClass("uk-active"),o.css({width:window.innerWidth,height:window.innerHeight}).addClass("uk-offcanvas-page"),o.css(a?"margin-right":"margin-left",(a?-1:1)*s.outerWidth()*l).width(),e.css("margin-top",-1*i.y),s.addClass("uk-offcanvas-bar-show"),this._initElement(n),s.trigger("show.uk.offcanvas",[n,s]),n.attr("aria-hidden","false")}},hide:function(n){var o=t.$("body"),s=t.$(".uk-offcanvas.uk-active"),a="right"==t.langdirection,r=s.find(".uk-offcanvas-bar:first"),l=function(){o.removeClass("uk-offcanvas-page").css({width:"",height:"","margin-left":"","margin-right":""}),s.removeClass("uk-active"),r.removeClass("uk-offcanvas-bar-show"),e.css("margin-top",""),window.scrollTo(i.x,i.y),r.trigger("hide.uk.offcanvas",[s,r]),s.attr("aria-hidden","true")};s.length&&(t.support.transition&&!n?(o.one(t.support.transition.end,function(){l()}).css(a?"margin-right":"margin-left",""),setTimeout(function(){r.removeClass("uk-offcanvas-bar-show")},0)):l())},_initElement:function(i){i.data("OffcanvasInit")||(i.on("click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas",function(i){var e=t.$(i.target);if(!i.type.match(/swipe/)&&!e.hasClass("uk-offcanvas-close")){if(e.hasClass("uk-offcanvas-bar"))return;if(e.parents(".uk-offcanvas-bar:first").length)return}i.stopImmediatePropagation(),n.hide()}),i.on("click","a[href^='#']",function(){var i=t.$(this),e=i.attr("href");"#"!=e&&(t.$doc.one("hide.uk.offcanvas",function(){var n;try{n=t.$(e)}catch(o){n=""}n.length||(n=t.$('[name="'+e.replace("#","")+'"]')),n.length&&i.attr("data-uk-smooth-scroll")&&t.Utils.scrollToElement?t.Utils.scrollToElement(n,t.Utils.options(i.attr("data-uk-smooth-scroll")||"{}")):window.location.href=e}),n.hide())}),i.data("OffcanvasInit",!0))}};t.component("offcanvasTrigger",{boot:function(){e.on("click.offcanvas.uikit","[data-uk-offcanvas]",function(i){i.preventDefault();var e=t.$(this);if(!e.data("offcanvasTrigger")){{t.offcanvasTrigger(e,t.Utils.options(e.attr("data-uk-offcanvas")))}e.trigger("click")}}),e.on("keydown.uk.offcanvas",function(t){27===t.keyCode&&n.hide()})},init:function(){var i=this;this.options=t.$.extend({target:i.element.is("a")?i.element.attr("href"):!1},this.options),this.on("click",function(t){t.preventDefault(),n.show(i.options.target)})}}),t.offcanvas=n}(UIkit),function(t){"use strict";function i(i,e,n){var o,s=t.$.Deferred(),a=i,r=i;return n[0]===e[0]?(s.resolve(),s.promise()):("object"==typeof i&&(a=i[0],r=i[1]||i[0]),o=function(){e&&e.hide().removeClass("uk-active "+r+" uk-animation-reverse"),n.addClass(a).one(t.support.animation.end,function(){n.removeClass(""+a).css({opacity:"",display:""}),s.resolve(),e&&e.css({opacity:"",display:""})}.bind(this)).show()},n.css("animation-duration",this.options.duration+"ms"),e&&e.length?(e.css("animation-duration",this.options.duration+"ms"),e.css("display","none").addClass(r+" uk-animation-reverse").one(t.support.animation.end,function(){o()}.bind(this)).css("display","")):(n.addClass("uk-active"),o()),s.promise())}var e;t.component("switcher",{defaults:{connect:!1,toggle:">*",active:0,animation:!1,duration:200},animating:!1,boot:function(){t.ready(function(i){t.$("[data-uk-switcher]",i).each(function(){var i=t.$(this);if(!i.data("switcher")){t.switcher(i,t.Utils.options(i.attr("data-uk-switcher")))}})})},init:function(){var i=this;if(this.on("click.uikit.switcher",this.options.toggle,function(t){t.preventDefault(),i.show(this)}),this.options.connect){this.connect=t.$(this.options.connect),this.connect.find(".uk-active").removeClass(".uk-active"),this.connect.length&&(this.connect.children().attr("aria-hidden","true"),this.connect.on("click","[data-uk-switcher-item]",function(e){e.preventDefault();var n=t.$(this).attr("data-uk-switcher-item");if(i.index!=n)switch(n){case"next":case"previous":i.show(i.index+("next"==n?1:-1));break;default:i.show(parseInt(n,10))}}).on("swipeRight swipeLeft",function(t){t.preventDefault(),window.getSelection().toString()||i.show(i.index+("swipeLeft"==t.type?1:-1))}));var e=this.find(this.options.toggle),n=e.filter(".uk-active");if(n.length)this.show(n,!1);else{if(this.options.active===!1)return;n=e.eq(this.options.active),this.show(n.length?n:e.eq(0),!1)}e.not(n).attr("aria-expanded","false"),n.attr("aria-expanded","true"),this.on("changed.uk.dom",function(){i.connect=t.$(i.options.connect)})}},show:function(n,o){if(!this.animating){if(isNaN(n))n=t.$(n);else{var s=this.find(this.options.toggle);n=0>n?s.length-1:n,n=s.eq(s[n]?n:0)}var a=this,s=this.find(this.options.toggle),r=t.$(n),l=e[this.options.animation]||function(t,n){if(!a.options.animation)return e.none.apply(a);var o=a.options.animation.split(",");return 1==o.length&&(o[1]=o[0]),o[0]=o[0].trim(),o[1]=o[1].trim(),i.apply(a,[o,t,n])};o!==!1&&t.support.animation||(l=e.none),r.hasClass("uk-disabled")||(s.attr("aria-expanded","false"),r.attr("aria-expanded","true"),s.filter(".uk-active").removeClass("uk-active"),r.addClass("uk-active"),this.options.connect&&this.connect.length&&(this.index=this.find(this.options.toggle).index(r),-1==this.index&&(this.index=0),this.connect.each(function(){var i=t.$(this),e=t.$(i.children()),n=t.$(e.filter(".uk-active")),o=t.$(e.eq(a.index));a.animating=!0,l.apply(a,[n,o]).then(function(){n.removeClass("uk-active"),o.addClass("uk-active"),n.attr("aria-hidden","true"),o.attr("aria-hidden","false"),t.Utils.checkDisplay(o,!0),a.animating=!1})})),this.trigger("show.uk.switcher",[r]))}}}),e={none:function(){var i=t.$.Deferred();return i.resolve(),i.promise()},fade:function(t,e){return i.apply(this,["uk-animation-fade",t,e])},"slide-bottom":function(t,e){return i.apply(this,["uk-animation-slide-bottom",t,e])},"slide-top":function(t,e){return i.apply(this,["uk-animation-slide-top",t,e])},"slide-vertical":function(t,e){var n=["uk-animation-slide-top","uk-animation-slide-bottom"];return t&&t.index()>e.index()&&n.reverse(),i.apply(this,[n,t,e])},"slide-left":function(t,e){return i.apply(this,["uk-animation-slide-left",t,e])},"slide-right":function(t,e){return i.apply(this,["uk-animation-slide-right",t,e])},"slide-horizontal":function(t,e){var n=["uk-animation-slide-right","uk-animation-slide-left"];return t&&t.index()>e.index()&&n.reverse(),i.apply(this,[n,t,e])},scale:function(t,e){return i.apply(this,["uk-animation-scale-up",t,e])}},t.switcher.animations=e}(UIkit),function(t){"use strict";t.component("tab",{defaults:{target:">li:not(.uk-tab-responsive, .uk-disabled)",connect:!1,active:0,animation:!1,duration:200},boot:function(){t.ready(function(i){t.$("[data-uk-tab]",i).each(function(){var i=t.$(this);if(!i.data("tab")){t.tab(i,t.Utils.options(i.attr("data-uk-tab")))}})})},init:function(){var i=this;this.current=!1,this.on("click.uikit.tab",this.options.target,function(e){if(e.preventDefault(),!i.switcher||!i.switcher.animating){var n=i.find(i.options.target).not(this);n.removeClass("uk-active").blur(),i.trigger("change.uk.tab",[t.$(this).addClass("uk-active"),i.current]),i.current=t.$(this),i.options.connect||(n.attr("aria-expanded","false"),t.$(this).attr("aria-expanded","true"))}}),this.options.connect&&(this.connect=t.$(this.options.connect)),this.responsivetab=t.$('
              • ').append('
                  '),this.responsivetab.dropdown=this.responsivetab.find(".uk-dropdown"),this.responsivetab.lst=this.responsivetab.dropdown.find("ul"),this.responsivetab.caption=this.responsivetab.find("a:first"),this.element.hasClass("uk-tab-bottom")&&this.responsivetab.dropdown.addClass("uk-dropdown-up"),this.responsivetab.lst.on("click.uikit.tab","a",function(e){e.preventDefault(),e.stopPropagation();var n=t.$(this);i.element.children("li:not(.uk-tab-responsive)").eq(n.data("index")).trigger("click")}),this.on("show.uk.switcher change.uk.tab",function(t,e){i.responsivetab.caption.html(e.text())}),this.element.append(this.responsivetab),this.options.connect&&(this.switcher=t.switcher(this.element,{toggle:">li:not(.uk-tab-responsive)",connect:this.options.connect,active:this.options.active,animation:this.options.animation,duration:this.options.duration})),t.dropdown(this.responsivetab,{mode:"click"}),i.trigger("change.uk.tab",[this.element.find(this.options.target).not(".uk-tab-responsive").filter(".uk-active")]),this.check(),t.$win.on("resize orientationchange",t.Utils.debounce(function(){i.element.is(":visible")&&i.check()},100)),this.on("display.uk.check",function(){i.element.is(":visible")&&i.check()})},check:function(){var i=this.element.children("li:not(.uk-tab-responsive)").removeClass("uk-hidden");if(!i.length)return this.responsivetab.addClass("uk-hidden"),void 0;var e,n,o,s=i.eq(0).offset().top+Math.ceil(i.eq(0).height()/2),a=!1;if(this.responsivetab.lst.empty(),i.each(function(){t.$(this).offset().top>s&&(a=!0)}),a)for(var r=0;r-1?"&":"?","enablejsapi=1&api=1"].join(""))}},check:function(){this.element.css({width:"",height:""}),this.dimension={w:this.element.width(),h:this.element.height()},this.element.attr("width")&&!isNaN(this.element.attr("width"))&&(this.dimension.w=this.element.attr("width")),this.element.attr("height")&&!isNaN(this.element.attr("height"))&&(this.dimension.h=this.element.attr("height")),this.ratio=this.dimension.w/this.dimension.h;var t,i,e=this.parent.width(),n=this.parent.height();e/this.ratioselect($db->quoteName('type_id')); $query->from($db->quoteName('#__content_types')); - // Where Clinic alias is found - $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.clinic') ); + // Where Facility alias is found + $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.facility') ); $db->setQuery($query); // Execute query to see if alias is found $db->execute(); - $clinic_found = $db->getNumRows(); + $facility_found = $db->getNumRows(); // Now check if there were any rows - if ($clinic_found) + if ($facility_found) { - // Since there are load the needed clinic type ids - $clinic_ids = $db->loadColumn(); - // Remove Clinic from the content type table - $clinic_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.clinic') ); + // Since there are load the needed facility type ids + $facility_ids = $db->loadColumn(); + // Remove Facility from the content type table + $facility_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.facility') ); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__content_types')); - $query->where($clinic_condition); + $query->where($facility_condition); $db->setQuery($query); - // Execute the query to remove Clinic items - $clinic_done = $db->execute(); - if ($clinic_done); + // Execute the query to remove Facility items + $facility_done = $db->execute(); + if ($facility_done); { - // If succesfully remove Clinic add queued success message. - $app->enqueueMessage(JText::_('The (com_supportgroups.clinic) type alias was removed from the #__content_type table')); + // If succesfully remove Facility add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.facility) type alias was removed from the #__content_type table')); } - // Remove Clinic items from the contentitem tag map table - $clinic_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.clinic') ); + // Remove Facility items from the contentitem tag map table + $facility_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.facility') ); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__contentitem_tag_map')); - $query->where($clinic_condition); + $query->where($facility_condition); $db->setQuery($query); - // Execute the query to remove Clinic items - $clinic_done = $db->execute(); - if ($clinic_done); + // Execute the query to remove Facility items + $facility_done = $db->execute(); + if ($facility_done); { - // If succesfully remove Clinic add queued success message. - $app->enqueueMessage(JText::_('The (com_supportgroups.clinic) type alias was removed from the #__contentitem_tag_map table')); + // If succesfully remove Facility add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.facility) type alias was removed from the #__contentitem_tag_map table')); } - // Remove Clinic items from the ucm content table - $clinic_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_supportgroups.clinic') ); + // Remove Facility items from the ucm content table + $facility_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_supportgroups.facility') ); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__ucm_content')); - $query->where($clinic_condition); + $query->where($facility_condition); $db->setQuery($query); - // Execute the query to remove Clinic items - $clinic_done = $db->execute(); - if ($clinic_done); + // Execute the query to remove Facility items + $facility_done = $db->execute(); + if ($facility_done); { - // If succesfully remove Clinic add queued success message. - $app->enqueueMessage(JText::_('The (com_supportgroups.clinic) type alias was removed from the #__ucm_content table')); + // If succesfully remove Facility add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.facility) type alias was removed from the #__ucm_content table')); } - // Make sure that all the Clinic items are cleared from DB - foreach ($clinic_ids as $clinic_id) + // Make sure that all the Facility items are cleared from DB + foreach ($facility_ids as $facility_id) { - // Remove Clinic items from the ucm base table - $clinic_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $clinic_id); + // Remove Facility items from the ucm base table + $facility_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $facility_id); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__ucm_base')); - $query->where($clinic_condition); + $query->where($facility_condition); $db->setQuery($query); - // Execute the query to remove Clinic items + // Execute the query to remove Facility items $db->execute(); - // Remove Clinic items from the ucm history table - $clinic_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $clinic_id); + // Remove Facility items from the ucm history table + $facility_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $facility_id); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__ucm_history')); - $query->where($clinic_condition); + $query->where($facility_condition); $db->setQuery($query); - // Execute the query to remove Clinic items + // Execute the query to remove Facility items $db->execute(); } } @@ -322,83 +321,427 @@ class com_supportgroupsInstallerScript // Select id from content type table $query->select($db->quoteName('type_id')); $query->from($db->quoteName('#__content_types')); - // Where Location alias is found - $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.location') ); + // Where Facility_type alias is found + $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.facility_type') ); $db->setQuery($query); // Execute query to see if alias is found $db->execute(); - $location_found = $db->getNumRows(); + $facility_type_found = $db->getNumRows(); // Now check if there were any rows - if ($location_found) + if ($facility_type_found) { - // Since there are load the needed location type ids - $location_ids = $db->loadColumn(); - // Remove Location from the content type table - $location_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.location') ); + // Since there are load the needed facility_type type ids + $facility_type_ids = $db->loadColumn(); + // Remove Facility_type from the content type table + $facility_type_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.facility_type') ); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__content_types')); - $query->where($location_condition); + $query->where($facility_type_condition); $db->setQuery($query); - // Execute the query to remove Location items - $location_done = $db->execute(); - if ($location_done); + // Execute the query to remove Facility_type items + $facility_type_done = $db->execute(); + if ($facility_type_done); { - // If succesfully remove Location add queued success message. - $app->enqueueMessage(JText::_('The (com_supportgroups.location) type alias was removed from the #__content_type table')); + // If succesfully remove Facility_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.facility_type) type alias was removed from the #__content_type table')); } - // Remove Location items from the contentitem tag map table - $location_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.location') ); + // Remove Facility_type items from the contentitem tag map table + $facility_type_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.facility_type') ); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__contentitem_tag_map')); - $query->where($location_condition); + $query->where($facility_type_condition); $db->setQuery($query); - // Execute the query to remove Location items - $location_done = $db->execute(); - if ($location_done); + // Execute the query to remove Facility_type items + $facility_type_done = $db->execute(); + if ($facility_type_done); { - // If succesfully remove Location add queued success message. - $app->enqueueMessage(JText::_('The (com_supportgroups.location) type alias was removed from the #__contentitem_tag_map table')); + // If succesfully remove Facility_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.facility_type) type alias was removed from the #__contentitem_tag_map table')); } - // Remove Location items from the ucm content table - $location_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_supportgroups.location') ); + // Remove Facility_type items from the ucm content table + $facility_type_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_supportgroups.facility_type') ); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__ucm_content')); - $query->where($location_condition); + $query->where($facility_type_condition); $db->setQuery($query); - // Execute the query to remove Location items - $location_done = $db->execute(); - if ($location_done); + // Execute the query to remove Facility_type items + $facility_type_done = $db->execute(); + if ($facility_type_done); { - // If succesfully remove Location add queued success message. - $app->enqueueMessage(JText::_('The (com_supportgroups.location) type alias was removed from the #__ucm_content table')); + // If succesfully remove Facility_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.facility_type) type alias was removed from the #__ucm_content table')); } - // Make sure that all the Location items are cleared from DB - foreach ($location_ids as $location_id) + // Make sure that all the Facility_type items are cleared from DB + foreach ($facility_type_ids as $facility_type_id) { - // Remove Location items from the ucm base table - $location_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $location_id); + // Remove Facility_type items from the ucm base table + $facility_type_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $facility_type_id); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__ucm_base')); - $query->where($location_condition); + $query->where($facility_type_condition); $db->setQuery($query); - // Execute the query to remove Location items + // Execute the query to remove Facility_type items $db->execute(); - // Remove Location items from the ucm history table - $location_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $location_id); + // Remove Facility_type items from the ucm history table + $facility_type_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $facility_type_id); // Create a new query object. $query = $db->getQuery(true); $query->delete($db->quoteName('#__ucm_history')); - $query->where($location_condition); + $query->where($facility_type_condition); $db->setQuery($query); - // Execute the query to remove Location items + // Execute the query to remove Facility_type items + $db->execute(); + } + } + + // Create a new query object. + $query = $db->getQuery(true); + // Select id from content type table + $query->select($db->quoteName('type_id')); + $query->from($db->quoteName('#__content_types')); + // Where Additional_info alias is found + $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.additional_info') ); + $db->setQuery($query); + // Execute query to see if alias is found + $db->execute(); + $additional_info_found = $db->getNumRows(); + // Now check if there were any rows + if ($additional_info_found) + { + // Since there are load the needed additional_info type ids + $additional_info_ids = $db->loadColumn(); + // Remove Additional_info from the content type table + $additional_info_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.additional_info') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__content_types')); + $query->where($additional_info_condition); + $db->setQuery($query); + // Execute the query to remove Additional_info items + $additional_info_done = $db->execute(); + if ($additional_info_done); + { + // If succesfully remove Additional_info add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.additional_info) type alias was removed from the #__content_type table')); + } + + // Remove Additional_info items from the contentitem tag map table + $additional_info_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.additional_info') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__contentitem_tag_map')); + $query->where($additional_info_condition); + $db->setQuery($query); + // Execute the query to remove Additional_info items + $additional_info_done = $db->execute(); + if ($additional_info_done); + { + // If succesfully remove Additional_info add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.additional_info) type alias was removed from the #__contentitem_tag_map table')); + } + + // Remove Additional_info items from the ucm content table + $additional_info_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_supportgroups.additional_info') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_content')); + $query->where($additional_info_condition); + $db->setQuery($query); + // Execute the query to remove Additional_info items + $additional_info_done = $db->execute(); + if ($additional_info_done); + { + // If succesfully remove Additional_info add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.additional_info) type alias was removed from the #__ucm_content table')); + } + + // Make sure that all the Additional_info items are cleared from DB + foreach ($additional_info_ids as $additional_info_id) + { + // Remove Additional_info items from the ucm base table + $additional_info_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $additional_info_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_base')); + $query->where($additional_info_condition); + $db->setQuery($query); + // Execute the query to remove Additional_info items + $db->execute(); + + // Remove Additional_info items from the ucm history table + $additional_info_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $additional_info_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_history')); + $query->where($additional_info_condition); + $db->setQuery($query); + // Execute the query to remove Additional_info items + $db->execute(); + } + } + + // Create a new query object. + $query = $db->getQuery(true); + // Select id from content type table + $query->select($db->quoteName('type_id')); + $query->from($db->quoteName('#__content_types')); + // Where Info_type alias is found + $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.info_type') ); + $db->setQuery($query); + // Execute query to see if alias is found + $db->execute(); + $info_type_found = $db->getNumRows(); + // Now check if there were any rows + if ($info_type_found) + { + // Since there are load the needed info_type type ids + $info_type_ids = $db->loadColumn(); + // Remove Info_type from the content type table + $info_type_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.info_type') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__content_types')); + $query->where($info_type_condition); + $db->setQuery($query); + // Execute the query to remove Info_type items + $info_type_done = $db->execute(); + if ($info_type_done); + { + // If succesfully remove Info_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.info_type) type alias was removed from the #__content_type table')); + } + + // Remove Info_type items from the contentitem tag map table + $info_type_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.info_type') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__contentitem_tag_map')); + $query->where($info_type_condition); + $db->setQuery($query); + // Execute the query to remove Info_type items + $info_type_done = $db->execute(); + if ($info_type_done); + { + // If succesfully remove Info_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.info_type) type alias was removed from the #__contentitem_tag_map table')); + } + + // Remove Info_type items from the ucm content table + $info_type_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_supportgroups.info_type') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_content')); + $query->where($info_type_condition); + $db->setQuery($query); + // Execute the query to remove Info_type items + $info_type_done = $db->execute(); + if ($info_type_done); + { + // If succesfully remove Info_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.info_type) type alias was removed from the #__ucm_content table')); + } + + // Make sure that all the Info_type items are cleared from DB + foreach ($info_type_ids as $info_type_id) + { + // Remove Info_type items from the ucm base table + $info_type_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $info_type_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_base')); + $query->where($info_type_condition); + $db->setQuery($query); + // Execute the query to remove Info_type items + $db->execute(); + + // Remove Info_type items from the ucm history table + $info_type_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $info_type_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_history')); + $query->where($info_type_condition); + $db->setQuery($query); + // Execute the query to remove Info_type items + $db->execute(); + } + } + + // Create a new query object. + $query = $db->getQuery(true); + // Select id from content type table + $query->select($db->quoteName('type_id')); + $query->from($db->quoteName('#__content_types')); + // Where Area alias is found + $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.area') ); + $db->setQuery($query); + // Execute query to see if alias is found + $db->execute(); + $area_found = $db->getNumRows(); + // Now check if there were any rows + if ($area_found) + { + // Since there are load the needed area type ids + $area_ids = $db->loadColumn(); + // Remove Area from the content type table + $area_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.area') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__content_types')); + $query->where($area_condition); + $db->setQuery($query); + // Execute the query to remove Area items + $area_done = $db->execute(); + if ($area_done); + { + // If succesfully remove Area add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.area) type alias was removed from the #__content_type table')); + } + + // Remove Area items from the contentitem tag map table + $area_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.area') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__contentitem_tag_map')); + $query->where($area_condition); + $db->setQuery($query); + // Execute the query to remove Area items + $area_done = $db->execute(); + if ($area_done); + { + // If succesfully remove Area add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.area) type alias was removed from the #__contentitem_tag_map table')); + } + + // Remove Area items from the ucm content table + $area_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_supportgroups.area') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_content')); + $query->where($area_condition); + $db->setQuery($query); + // Execute the query to remove Area items + $area_done = $db->execute(); + if ($area_done); + { + // If succesfully remove Area add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.area) type alias was removed from the #__ucm_content table')); + } + + // Make sure that all the Area items are cleared from DB + foreach ($area_ids as $area_id) + { + // Remove Area items from the ucm base table + $area_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $area_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_base')); + $query->where($area_condition); + $db->setQuery($query); + // Execute the query to remove Area items + $db->execute(); + + // Remove Area items from the ucm history table + $area_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $area_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_history')); + $query->where($area_condition); + $db->setQuery($query); + // Execute the query to remove Area items + $db->execute(); + } + } + + // Create a new query object. + $query = $db->getQuery(true); + // Select id from content type table + $query->select($db->quoteName('type_id')); + $query->from($db->quoteName('#__content_types')); + // Where Area_type alias is found + $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.area_type') ); + $db->setQuery($query); + // Execute query to see if alias is found + $db->execute(); + $area_type_found = $db->getNumRows(); + // Now check if there were any rows + if ($area_type_found) + { + // Since there are load the needed area_type type ids + $area_type_ids = $db->loadColumn(); + // Remove Area_type from the content type table + $area_type_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.area_type') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__content_types')); + $query->where($area_type_condition); + $db->setQuery($query); + // Execute the query to remove Area_type items + $area_type_done = $db->execute(); + if ($area_type_done); + { + // If succesfully remove Area_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.area_type) type alias was removed from the #__content_type table')); + } + + // Remove Area_type items from the contentitem tag map table + $area_type_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_supportgroups.area_type') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__contentitem_tag_map')); + $query->where($area_type_condition); + $db->setQuery($query); + // Execute the query to remove Area_type items + $area_type_done = $db->execute(); + if ($area_type_done); + { + // If succesfully remove Area_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.area_type) type alias was removed from the #__contentitem_tag_map table')); + } + + // Remove Area_type items from the ucm content table + $area_type_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_supportgroups.area_type') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_content')); + $query->where($area_type_condition); + $db->setQuery($query); + // Execute the query to remove Area_type items + $area_type_done = $db->execute(); + if ($area_type_done); + { + // If succesfully remove Area_type add queued success message. + $app->enqueueMessage(JText::_('The (com_supportgroups.area_type) type alias was removed from the #__ucm_content table')); + } + + // Make sure that all the Area_type items are cleared from DB + foreach ($area_type_ids as $area_type_id) + { + // Remove Area_type items from the ucm base table + $area_type_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $area_type_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_base')); + $query->where($area_type_condition); + $db->setQuery($query); + // Execute the query to remove Area_type items + $db->execute(); + + // Remove Area_type items from the ucm history table + $area_type_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $area_type_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_history')); + $query->where($area_type_condition); + $db->setQuery($query); + // Execute the query to remove Area_type items $db->execute(); } } @@ -768,7 +1111,7 @@ class com_supportgroupsInstallerScript // little notice as after service, in case of bad experience with component. echo '

                  Did something go wrong? Are you disappointed?

                  -

                  Please let me know at llewellyn@vdm.io. +

                  Please let me know at joomla@vdm.io.
                  We at Vast Development Method are committed to building extensions that performs proficiently! You can help us, really!
                  Send me your thoughts on improvements that is needed, trust me, I will be very grateful!
                  Visit us at http://www.vdm.io today!

                  '; @@ -791,18 +1134,28 @@ class com_supportgroupsInstallerScript */ function preflight($type, $parent) { + // get application + $app = JFactory::getApplication(); + // is redundant ...hmmm if ($type == 'uninstall') - { + { return true; } - - $app = JFactory::getApplication(); + // the default for both install and update $jversion = new JVersion(); - if (!$jversion->isCompatible('3.4.1')) + if (!$jversion->isCompatible('3.6.0')) { - $app->enqueueMessage('Please upgrade to at least Joomla! 3.4.1 before continuing!', 'error'); + $app->enqueueMessage('Please upgrade to at least Joomla! 3.6.0 before continuing!', 'error'); return false; } + // do any updates needed + if ($type == 'update') + { + } + // do any install needed + if ($type == 'install') + { + } } /** @@ -812,6 +1165,8 @@ class com_supportgroupsInstallerScript */ function postflight($type, $parent) { + // get application + $app = JFactory::getApplication(); // set the default component settings if ($type == 'install') { @@ -824,9 +1179,9 @@ class com_supportgroupsInstallerScript $support_group->type_title = 'Supportgroups Support_group'; $support_group->type_alias = 'com_supportgroups.support_group'; $support_group->table = '{"special": {"dbtable": "#__supportgroups_support_group","key": "id","type": "Support_group","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $support_group->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","phone":"phone","location":"location","clinic":"clinic","male":"male","female":"female","female_art":"female_art","male_art":"male_art","female_children":"female_children","male_children":"male_children","area":"area"}}'; + $support_group->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "details","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","phone":"phone","area":"area","facility":"facility","male":"male","female":"female","marker":"marker","alias":"alias","details":"details","female_art":"female_art","female_children":"female_children","male_art":"male_art","male_children":"male_children","info":"info"}}'; $support_group->router = 'SupportgroupsHelperRoute::getSupport_groupRoute'; - $support_group->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/support_group.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","area"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","location","clinic","male","female","female_art","male_art","female_children","male_children"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "location","targetTable": "#__supportgroups_location","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "clinic","targetTable": "#__supportgroups_clinic","targetColumn": "id","displayColumn": "name"}]}'; + $support_group->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/support_group.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","marker"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","area","facility","male","female","female_art","female_children","male_art","male_children"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "area","targetTable": "#__supportgroups_area","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "facility","targetTable": "#__supportgroups_facility","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "info","targetTable": "#__supportgroups_additional_info","targetColumn": "id","displayColumn": "name"}]}'; // Set the object into the content types table. $support_group_Inserted = $db->insertObject('#__content_types', $support_group); @@ -843,36 +1198,84 @@ class com_supportgroupsInstallerScript // Set the object into the content types table. $payment_Inserted = $db->insertObject('#__content_types', $payment); - // Create the clinic content type object. - $clinic = new stdClass(); - $clinic->type_title = 'Supportgroups Clinic'; - $clinic->type_alias = 'com_supportgroups.clinic'; - $clinic->table = '{"special": {"dbtable": "#__supportgroups_clinic","key": "id","type": "Clinic","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $clinic->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","phone":"phone","area":"area"}}'; - $clinic->router = 'SupportgroupsHelperRoute::getClinicRoute'; - $clinic->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/clinic.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","area"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; + // Create the facility content type object. + $facility = new stdClass(); + $facility->type_title = 'Supportgroups Facility'; + $facility->type_alias = 'com_supportgroups.facility'; + $facility->table = '{"special": {"dbtable": "#__supportgroups_facility","key": "id","type": "Facility","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $facility->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "details","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","facility_type":"facility_type","phone":"phone","details":"details","marker":"marker","alias":"alias"}}'; + $facility->router = 'SupportgroupsHelperRoute::getFacilityRoute'; + $facility->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/facility.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","marker"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","facility_type"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "facility_type","targetTable": "#__supportgroups_facility_type","targetColumn": "id","displayColumn": "name"}]}'; // Set the object into the content types table. - $clinic_Inserted = $db->insertObject('#__content_types', $clinic); + $facility_Inserted = $db->insertObject('#__content_types', $facility); - // Create the location content type object. - $location = new stdClass(); - $location->type_title = 'Supportgroups Location'; - $location->type_alias = 'com_supportgroups.location'; - $location->table = '{"special": {"dbtable": "#__supportgroups_location","key": "id","type": "Location","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $location->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","region":"region","area":"area"}}'; - $location->router = 'SupportgroupsHelperRoute::getLocationRoute'; - $location->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/location.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","area"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","region"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "region","targetTable": "#__supportgroups_region","targetColumn": "id","displayColumn": "name"}]}'; + // Create the facility_type content type object. + $facility_type = new stdClass(); + $facility_type->type_title = 'Supportgroups Facility_type'; + $facility_type->type_alias = 'com_supportgroups.facility_type'; + $facility_type->table = '{"special": {"dbtable": "#__supportgroups_facility_type","key": "id","type": "Facility_type","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $facility_type->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","alias":"alias"}}'; + $facility_type->router = 'SupportgroupsHelperRoute::getFacility_typeRoute'; + $facility_type->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/facility_type.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; // Set the object into the content types table. - $location_Inserted = $db->insertObject('#__content_types', $location); + $facility_type_Inserted = $db->insertObject('#__content_types', $facility_type); + + // Create the additional_info content type object. + $additional_info = new stdClass(); + $additional_info->type_title = 'Supportgroups Additional_info'; + $additional_info->type_alias = 'com_supportgroups.additional_info'; + $additional_info->table = '{"special": {"dbtable": "#__supportgroups_additional_info","key": "id","type": "Additional_info","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $additional_info->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "details","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","info_type":"info_type","details":"details","alias":"alias"}}'; + $additional_info->router = 'SupportgroupsHelperRoute::getAdditional_infoRoute'; + $additional_info->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/additional_info.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","info_type"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "info_type","targetTable": "#__supportgroups_info_type","targetColumn": "id","displayColumn": "name"}]}'; + + // Set the object into the content types table. + $additional_info_Inserted = $db->insertObject('#__content_types', $additional_info); + + // Create the info_type content type object. + $info_type = new stdClass(); + $info_type->type_title = 'Supportgroups Info_type'; + $info_type->type_alias = 'com_supportgroups.info_type'; + $info_type->table = '{"special": {"dbtable": "#__supportgroups_info_type","key": "id","type": "Info_type","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $info_type->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","alias":"alias"}}'; + $info_type->router = 'SupportgroupsHelperRoute::getInfo_typeRoute'; + $info_type->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/info_type.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; + + // Set the object into the content types table. + $info_type_Inserted = $db->insertObject('#__content_types', $info_type); + + // Create the area content type object. + $area = new stdClass(); + $area->type_title = 'Supportgroups Area'; + $area->type_alias = 'com_supportgroups.area'; + $area->table = '{"special": {"dbtable": "#__supportgroups_area","key": "id","type": "Area","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $area->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "details","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","area_type":"area_type","region":"region","details":"details","color":"color","alias":"alias"}}'; + $area->router = 'SupportgroupsHelperRoute::getAreaRoute'; + $area->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/area.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","area_type","region"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "area_type","targetTable": "#__supportgroups_area_type","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "region","targetTable": "#__supportgroups_region","targetColumn": "id","displayColumn": "name"}]}'; + + // Set the object into the content types table. + $area_Inserted = $db->insertObject('#__content_types', $area); + + // Create the area_type content type object. + $area_type = new stdClass(); + $area_type->type_title = 'Supportgroups Area_type'; + $area_type->type_alias = 'com_supportgroups.area_type'; + $area_type->table = '{"special": {"dbtable": "#__supportgroups_area_type","key": "id","type": "Area_type","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $area_type->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","alias":"alias"}}'; + $area_type->router = 'SupportgroupsHelperRoute::getArea_typeRoute'; + $area_type->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/area_type.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; + + // Set the object into the content types table. + $area_type_Inserted = $db->insertObject('#__content_types', $area_type); // Create the region content type object. $region = new stdClass(); $region->type_title = 'Supportgroups Region'; $region->type_alias = 'com_supportgroups.region'; $region->table = '{"special": {"dbtable": "#__supportgroups_region","key": "id","type": "Region","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $region->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","country":"country"}}'; + $region->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","country":"country","alias":"alias"}}'; $region->router = 'SupportgroupsHelperRoute::getRegionRoute'; $region->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/region.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","country"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "country","targetTable": "#__supportgroups_country","targetColumn": "id","displayColumn": "name"}]}'; @@ -896,7 +1299,7 @@ class com_supportgroupsInstallerScript $currency->type_title = 'Supportgroups Currency'; $currency->type_alias = 'com_supportgroups.currency'; $currency->table = '{"special": {"dbtable": "#__supportgroups_currency","key": "id","type": "Currency","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $currency->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","codethree":"codethree","numericcode":"numericcode","symbol":"symbol","alias":"alias","positivestyle":"positivestyle","thousands":"thousands","decimalsymbol":"decimalsymbol","decimalplace":"decimalplace","negativestyle":"negativestyle"}}'; + $currency->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","codethree":"codethree","numericcode":"numericcode","symbol":"symbol","alias":"alias","negativestyle":"negativestyle","positivestyle":"positivestyle","decimalsymbol":"decimalsymbol","decimalplace":"decimalplace","thousands":"thousands"}}'; $currency->router = 'SupportgroupsHelperRoute::getCurrencyRoute'; $currency->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/currency.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","numericcode","decimalplace"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; @@ -908,9 +1311,9 @@ class com_supportgroupsInstallerScript $help_document->type_title = 'Supportgroups Help_document'; $help_document->type_alias = 'com_supportgroups.help_document'; $help_document->table = '{"special": {"dbtable": "#__supportgroups_help_document","key": "id","type": "Help_document","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $help_document->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "title","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "content","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"title":"title","type":"type","groups":"groups","location":"location","admin_view":"admin_view","site_view":"site_view","target":"target","content":"content","alias":"alias","article":"article","url":"url","not_required":"not_required"}}'; + $help_document->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "title","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "content","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"title":"title","type":"type","groups":"groups","location":"location","admin_view":"admin_view","site_view":"site_view","not_required":"not_required","content":"content","article":"article","url":"url","target":"target","alias":"alias"}}'; $help_document->router = 'SupportgroupsHelperRoute::getHelp_documentRoute'; - $help_document->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/help_document.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","not_required"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","type","location","target","article","not_required"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "article","targetTable": "#__content","targetColumn": "id","displayColumn": "title"}]}'; + $help_document->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/help_document.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","not_required"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","type","location","not_required","article","target"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "article","targetTable": "#__content","targetColumn": "id","displayColumn": "title"}]}'; // Set the object into the content types table. $help_document_Inserted = $db->insertObject('#__content_types', $help_document); @@ -918,22 +1321,20 @@ class com_supportgroupsInstallerScript // Install the global extenstion params. $query = $db->getQuery(true); - // Field to update. $fields = array( - $db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"llewellyn@vdm.io","check_in":"-1 day","save_history":"1","history_limit":"10","uikit_load":"1","uikit_min":"","uikit_style":""}'), + $db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","maptype":"ROADMAP","maxzoom":"6","gotozoom":"8","cluster":"0","cluster_at":"300","clustergridsize":"100","clustermaxzoom":"7","set_browser_storage":"1","storage_time_to_live":"global","check_in":"-1 day","save_history":"1","history_limit":"10","uikit_load":"1","uikit_min":"","uikit_style":""}'), ); - // Condition. $conditions = array( $db->quoteName('element') . ' = ' . $db->quote('com_supportgroups') ); - $query->update($db->quoteName('#__extensions'))->set($fields)->where($conditions); $db->setQuery($query); $allDone = $db->execute(); + echo ' - + '; } // do any updates needed @@ -948,9 +1349,9 @@ class com_supportgroupsInstallerScript $support_group->type_title = 'Supportgroups Support_group'; $support_group->type_alias = 'com_supportgroups.support_group'; $support_group->table = '{"special": {"dbtable": "#__supportgroups_support_group","key": "id","type": "Support_group","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $support_group->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","phone":"phone","location":"location","clinic":"clinic","male":"male","female":"female","female_art":"female_art","male_art":"male_art","female_children":"female_children","male_children":"male_children","area":"area"}}'; + $support_group->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "details","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","phone":"phone","area":"area","facility":"facility","male":"male","female":"female","marker":"marker","alias":"alias","details":"details","female_art":"female_art","female_children":"female_children","male_art":"male_art","male_children":"male_children","info":"info"}}'; $support_group->router = 'SupportgroupsHelperRoute::getSupport_groupRoute'; - $support_group->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/support_group.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","area"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","location","clinic","male","female","female_art","male_art","female_children","male_children"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "location","targetTable": "#__supportgroups_location","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "clinic","targetTable": "#__supportgroups_clinic","targetColumn": "id","displayColumn": "name"}]}'; + $support_group->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/support_group.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","marker"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","area","facility","male","female","female_art","female_children","male_art","male_children"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "area","targetTable": "#__supportgroups_area","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "facility","targetTable": "#__supportgroups_facility","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "info","targetTable": "#__supportgroups_additional_info","targetColumn": "id","displayColumn": "name"}]}'; // Check if support_group type is already in content_type DB. $support_group_id = null; @@ -1001,62 +1402,178 @@ class com_supportgroupsInstallerScript $payment_Inserted = $db->insertObject('#__content_types', $payment); } - // Create the clinic content type object. - $clinic = new stdClass(); - $clinic->type_title = 'Supportgroups Clinic'; - $clinic->type_alias = 'com_supportgroups.clinic'; - $clinic->table = '{"special": {"dbtable": "#__supportgroups_clinic","key": "id","type": "Clinic","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $clinic->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","phone":"phone","area":"area"}}'; - $clinic->router = 'SupportgroupsHelperRoute::getClinicRoute'; - $clinic->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/clinic.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","area"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; + // Create the facility content type object. + $facility = new stdClass(); + $facility->type_title = 'Supportgroups Facility'; + $facility->type_alias = 'com_supportgroups.facility'; + $facility->table = '{"special": {"dbtable": "#__supportgroups_facility","key": "id","type": "Facility","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $facility->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "details","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","facility_type":"facility_type","phone":"phone","details":"details","marker":"marker","alias":"alias"}}'; + $facility->router = 'SupportgroupsHelperRoute::getFacilityRoute'; + $facility->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/facility.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","marker"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","facility_type"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "facility_type","targetTable": "#__supportgroups_facility_type","targetColumn": "id","displayColumn": "name"}]}'; - // Check if clinic type is already in content_type DB. - $clinic_id = null; + // Check if facility type is already in content_type DB. + $facility_id = null; $query = $db->getQuery(true); $query->select($db->quoteName(array('type_id'))); $query->from($db->quoteName('#__content_types')); - $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($clinic->type_alias)); + $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($facility->type_alias)); $db->setQuery($query); $db->execute(); // Set the object into the content types table. if ($db->getNumRows()) { - $clinic->type_id = $db->loadResult(); - $clinic_Updated = $db->updateObject('#__content_types', $clinic, 'type_id'); + $facility->type_id = $db->loadResult(); + $facility_Updated = $db->updateObject('#__content_types', $facility, 'type_id'); } else { - $clinic_Inserted = $db->insertObject('#__content_types', $clinic); + $facility_Inserted = $db->insertObject('#__content_types', $facility); } - // Create the location content type object. - $location = new stdClass(); - $location->type_title = 'Supportgroups Location'; - $location->type_alias = 'com_supportgroups.location'; - $location->table = '{"special": {"dbtable": "#__supportgroups_location","key": "id","type": "Location","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $location->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","region":"region","area":"area"}}'; - $location->router = 'SupportgroupsHelperRoute::getLocationRoute'; - $location->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/location.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","area"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","region"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "region","targetTable": "#__supportgroups_region","targetColumn": "id","displayColumn": "name"}]}'; + // Create the facility_type content type object. + $facility_type = new stdClass(); + $facility_type->type_title = 'Supportgroups Facility_type'; + $facility_type->type_alias = 'com_supportgroups.facility_type'; + $facility_type->table = '{"special": {"dbtable": "#__supportgroups_facility_type","key": "id","type": "Facility_type","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $facility_type->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","alias":"alias"}}'; + $facility_type->router = 'SupportgroupsHelperRoute::getFacility_typeRoute'; + $facility_type->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/facility_type.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; - // Check if location type is already in content_type DB. - $location_id = null; + // Check if facility_type type is already in content_type DB. + $facility_type_id = null; $query = $db->getQuery(true); $query->select($db->quoteName(array('type_id'))); $query->from($db->quoteName('#__content_types')); - $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($location->type_alias)); + $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($facility_type->type_alias)); $db->setQuery($query); $db->execute(); // Set the object into the content types table. if ($db->getNumRows()) { - $location->type_id = $db->loadResult(); - $location_Updated = $db->updateObject('#__content_types', $location, 'type_id'); + $facility_type->type_id = $db->loadResult(); + $facility_type_Updated = $db->updateObject('#__content_types', $facility_type, 'type_id'); } else { - $location_Inserted = $db->insertObject('#__content_types', $location); + $facility_type_Inserted = $db->insertObject('#__content_types', $facility_type); + } + + // Create the additional_info content type object. + $additional_info = new stdClass(); + $additional_info->type_title = 'Supportgroups Additional_info'; + $additional_info->type_alias = 'com_supportgroups.additional_info'; + $additional_info->table = '{"special": {"dbtable": "#__supportgroups_additional_info","key": "id","type": "Additional_info","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $additional_info->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "details","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","info_type":"info_type","details":"details","alias":"alias"}}'; + $additional_info->router = 'SupportgroupsHelperRoute::getAdditional_infoRoute'; + $additional_info->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/additional_info.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","info_type"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "info_type","targetTable": "#__supportgroups_info_type","targetColumn": "id","displayColumn": "name"}]}'; + + // Check if additional_info type is already in content_type DB. + $additional_info_id = null; + $query = $db->getQuery(true); + $query->select($db->quoteName(array('type_id'))); + $query->from($db->quoteName('#__content_types')); + $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($additional_info->type_alias)); + $db->setQuery($query); + $db->execute(); + + // Set the object into the content types table. + if ($db->getNumRows()) + { + $additional_info->type_id = $db->loadResult(); + $additional_info_Updated = $db->updateObject('#__content_types', $additional_info, 'type_id'); + } + else + { + $additional_info_Inserted = $db->insertObject('#__content_types', $additional_info); + } + + // Create the info_type content type object. + $info_type = new stdClass(); + $info_type->type_title = 'Supportgroups Info_type'; + $info_type->type_alias = 'com_supportgroups.info_type'; + $info_type->table = '{"special": {"dbtable": "#__supportgroups_info_type","key": "id","type": "Info_type","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $info_type->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","alias":"alias"}}'; + $info_type->router = 'SupportgroupsHelperRoute::getInfo_typeRoute'; + $info_type->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/info_type.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; + + // Check if info_type type is already in content_type DB. + $info_type_id = null; + $query = $db->getQuery(true); + $query->select($db->quoteName(array('type_id'))); + $query->from($db->quoteName('#__content_types')); + $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($info_type->type_alias)); + $db->setQuery($query); + $db->execute(); + + // Set the object into the content types table. + if ($db->getNumRows()) + { + $info_type->type_id = $db->loadResult(); + $info_type_Updated = $db->updateObject('#__content_types', $info_type, 'type_id'); + } + else + { + $info_type_Inserted = $db->insertObject('#__content_types', $info_type); + } + + // Create the area content type object. + $area = new stdClass(); + $area->type_title = 'Supportgroups Area'; + $area->type_alias = 'com_supportgroups.area'; + $area->table = '{"special": {"dbtable": "#__supportgroups_area","key": "id","type": "Area","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $area->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "details","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","area_type":"area_type","region":"region","details":"details","color":"color","alias":"alias"}}'; + $area->router = 'SupportgroupsHelperRoute::getAreaRoute'; + $area->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/area.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","area_type","region"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "area_type","targetTable": "#__supportgroups_area_type","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "region","targetTable": "#__supportgroups_region","targetColumn": "id","displayColumn": "name"}]}'; + + // Check if area type is already in content_type DB. + $area_id = null; + $query = $db->getQuery(true); + $query->select($db->quoteName(array('type_id'))); + $query->from($db->quoteName('#__content_types')); + $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($area->type_alias)); + $db->setQuery($query); + $db->execute(); + + // Set the object into the content types table. + if ($db->getNumRows()) + { + $area->type_id = $db->loadResult(); + $area_Updated = $db->updateObject('#__content_types', $area, 'type_id'); + } + else + { + $area_Inserted = $db->insertObject('#__content_types', $area); + } + + // Create the area_type content type object. + $area_type = new stdClass(); + $area_type->type_title = 'Supportgroups Area_type'; + $area_type->type_alias = 'com_supportgroups.area_type'; + $area_type->table = '{"special": {"dbtable": "#__supportgroups_area_type","key": "id","type": "Area_type","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $area_type->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","alias":"alias"}}'; + $area_type->router = 'SupportgroupsHelperRoute::getArea_typeRoute'; + $area_type->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/area_type.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; + + // Check if area_type type is already in content_type DB. + $area_type_id = null; + $query = $db->getQuery(true); + $query->select($db->quoteName(array('type_id'))); + $query->from($db->quoteName('#__content_types')); + $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($area_type->type_alias)); + $db->setQuery($query); + $db->execute(); + + // Set the object into the content types table. + if ($db->getNumRows()) + { + $area_type->type_id = $db->loadResult(); + $area_type_Updated = $db->updateObject('#__content_types', $area_type, 'type_id'); + } + else + { + $area_type_Inserted = $db->insertObject('#__content_types', $area_type); } // Create the region content type object. @@ -1064,7 +1581,7 @@ class com_supportgroupsInstallerScript $region->type_title = 'Supportgroups Region'; $region->type_alias = 'com_supportgroups.region'; $region->table = '{"special": {"dbtable": "#__supportgroups_region","key": "id","type": "Region","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $region->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","country":"country"}}'; + $region->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","country":"country","alias":"alias"}}'; $region->router = 'SupportgroupsHelperRoute::getRegionRoute'; $region->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/region.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","country"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "country","targetTable": "#__supportgroups_country","targetColumn": "id","displayColumn": "name"}]}'; @@ -1122,7 +1639,7 @@ class com_supportgroupsInstallerScript $currency->type_title = 'Supportgroups Currency'; $currency->type_alias = 'com_supportgroups.currency'; $currency->table = '{"special": {"dbtable": "#__supportgroups_currency","key": "id","type": "Currency","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $currency->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","codethree":"codethree","numericcode":"numericcode","symbol":"symbol","alias":"alias","positivestyle":"positivestyle","thousands":"thousands","decimalsymbol":"decimalsymbol","decimalplace":"decimalplace","negativestyle":"negativestyle"}}'; + $currency->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","codethree":"codethree","numericcode":"numericcode","symbol":"symbol","alias":"alias","negativestyle":"negativestyle","positivestyle":"positivestyle","decimalsymbol":"decimalsymbol","decimalplace":"decimalplace","thousands":"thousands"}}'; $currency->router = 'SupportgroupsHelperRoute::getCurrencyRoute'; $currency->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/currency.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","numericcode","decimalplace"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; @@ -1151,9 +1668,9 @@ class com_supportgroupsInstallerScript $help_document->type_title = 'Supportgroups Help_document'; $help_document->type_alias = 'com_supportgroups.help_document'; $help_document->table = '{"special": {"dbtable": "#__supportgroups_help_document","key": "id","type": "Help_document","prefix": "supportgroupsTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; - $help_document->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "title","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "content","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"title":"title","type":"type","groups":"groups","location":"location","admin_view":"admin_view","site_view":"site_view","target":"target","content":"content","alias":"alias","article":"article","url":"url","not_required":"not_required"}}'; + $help_document->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "title","core_state": "published","core_alias": "alias","core_created_time": "created","core_modified_time": "modified","core_body": "content","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"title":"title","type":"type","groups":"groups","location":"location","admin_view":"admin_view","site_view":"site_view","not_required":"not_required","content":"content","article":"article","url":"url","target":"target","alias":"alias"}}'; $help_document->router = 'SupportgroupsHelperRoute::getHelp_documentRoute'; - $help_document->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/help_document.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","not_required"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","type","location","target","article","not_required"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "article","targetTable": "#__content","targetColumn": "id","displayColumn": "title"}]}'; + $help_document->content_history_options = '{"formFile": "administrator/components/com_supportgroups/models/forms/help_document.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","not_required"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","type","location","not_required","article","target"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "article","targetTable": "#__content","targetColumn": "id","displayColumn": "title"}]}'; // Check if help_document type is already in content_type DB. $help_document_id = null; @@ -1177,9 +1694,9 @@ class com_supportgroupsInstallerScript echo ' - + -

                  Upgrade to Version 1.0.3 Was Successful! Let us know if anything is not working as expected.

                  '; +

                  Upgrade to Version 1.0.8 Was Successful! Let us know if anything is not working as expected.

                  '; } } } diff --git a/admin/assets/css/clinic.css b/site/assets/css/map.css similarity index 91% rename from admin/assets/css/clinic.css rename to site/assets/css/map.css index 096cab9..0c0e815 100644 --- a/admin/assets/css/clinic.css +++ b/site/assets/css/map.css @@ -9,11 +9,11 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 - @created 24th February, 2016 + @version @update number 366 of this MVC + @build 5th July, 2016 + @created 10th March, 2016 @package Support Groups - @subpackage clinic.css + @subpackage map.css @author Llewellyn van der Merwe @copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html diff --git a/site/assets/css/site.css b/site/assets/css/site.css index 56301b6..bc9e4a5 100644 --- a/site/assets/css/site.css +++ b/site/assets/css/site.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage site.css diff --git a/site/assets/css/supportgroups.css b/site/assets/css/supportgroups.css new file mode 100644 index 0000000..cc7ed75 --- /dev/null +++ b/site/assets/css/supportgroups.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 390 of this MVC + @build 1st April, 2017 + @created 10th March, 2016 + @package Support Groups + @subpackage supportgroups.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/site/assets/js/site.js b/site/assets/js/site.js index e69de29..a2bb2d1 100644 --- a/site/assets/js/site.js +++ b/site/assets/js/site.js @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version 1.0.8 + @build 5th May, 2018 + @created 24th February, 2016 + @package Support Groups + @subpackage site.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* JS Document */ diff --git a/site/controller.php b/site/controller.php index 4b39b2d..eca2fca 100644 --- a/site/controller.php +++ b/site/controller.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage controller.php @@ -35,22 +35,34 @@ jimport('joomla.application.component.controller'); class SupportgroupsController extends JControllerLegacy { /** - * display task + * Method to display a view. + * + * @param boolean $cachable If true, the view output will be cached. + * @param boolean $urlparams An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}. + * + * @return JController This object to support chaining. * - * @return void */ - function display($cachable = false, $urlparams = false) + function display($cachable = false, $urlparams = false) { // set default view if not set - $view = $this->input->getCmd('view', '###SITE_DEFAULT_VIEW###'); + $view = $this->input->getCmd('view', 'supportgroups'); + $this->input->set('view', $view); $isEdit = $this->checkEditView($view); $layout = $this->input->get('layout', null, 'WORD'); - $id = $this->input->getInt('id'); - $cachable = true; + $id = $this->input->getInt('id'); + // $cachable = true; (TODO) working on a fix [gh-238](https://github.com/vdm-io/Joomla-Component-Builder/issues/238) + + // insure that the view is not cashable if edit view or if user is logged in + $user = JFactory::getUser(); + if ($user->get('id') || $isEdit) + { + $cachable = false; + } // Check for edit form. - if($isEdit) - { + if($isEdit) + { if ($layout == 'edit' && !$this->checkEditId('com_supportgroups.edit.'.$view, $id)) { // Somehow the person just went to the form - we don't allow that. @@ -67,35 +79,59 @@ class SupportgroupsController extends JControllerLegacy } elseif (SupportgroupsHelper::checkString($ref)) { - // redirect to ref $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view='.(string)$ref, false)); } else { // normal redirect back to the list default site view - $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=###SITE_DEFAULT_VIEW###', false)); + $this->setRedirect(JRoute::_('index.php?option=com_supportgroups&view=supportgroups', false)); } return false; } - } + } + + // we may need to make this more dynamic in the future. (TODO) + $safeurlparams = array( + 'catid' => 'INT', + 'id' => 'INT', + 'cid' => 'ARRAY', + 'year' => 'INT', + 'month' => 'INT', + 'limit' => 'UINT', + 'limitstart' => 'UINT', + 'showall' => 'INT', + 'return' => 'BASE64', + 'filter' => 'STRING', + 'filter_order' => 'CMD', + 'filter_order_Dir' => 'CMD', + 'filter-search' => 'STRING', + 'print' => 'BOOLEAN', + 'lang' => 'CMD', + 'Itemid' => 'INT'); - return parent::display($cachable, $urlparams); + // should these not merge? + if (SupportgroupsHelper::checkArray($urlparams)) + { + $safeurlparams = SupportgroupsHelper::mergeArrays(array($urlparams, $safeurlparams)); + } + + return parent::display($cachable, $safeurlparams); } protected function checkEditView($view) { - if (SupportgroupsHelper::checkString($view)) - { - $views = array( + if (SupportgroupsHelper::checkString($view)) + { + $views = array( - ); - // check if this is a edit view - if (in_array($view,$views)) - { - return true; - } - } + ); + // check if this is a edit view + if (in_array($view,$views)) + { + return true; + } + } return false; } } diff --git a/site/controllers/ajax.json.php b/site/controllers/ajax.json.php new file mode 100644 index 0000000..60b935b --- /dev/null +++ b/site/controllers/ajax.json.php @@ -0,0 +1,235 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controllerform library +jimport('joomla.application.component.controller'); + +/** + * Supportgroups Ajax Controller + */ +class SupportgroupsControllerAjax extends JControllerLegacy +{ + public function __construct($config) + { + parent::__construct($config); + // make sure all json stuff are set + JFactory::getDocument()->setMimeEncoding( 'application/json' ); + JResponse::setHeader('Content-Disposition','attachment;filename="getajax.json"'); + JResponse::setHeader("Access-Control-Allow-Origin", "*"); + // load the tasks + $this->registerTask('getItemData', 'ajax'); + $this->registerTask('getRows', 'ajax'); + $this->registerTask('getColumns', 'ajax'); + $this->registerTask('getTableTotals', 'ajax'); + } + + public function ajax() + { + $user = JFactory::getUser(); + $jinput = JFactory::getApplication()->input; + // Check Token! + $token = JSession::getFormToken(); + $call_token = $jinput->get('token', 0, 'ALNUM'); + if($token == $call_token) + { + $task = $this->getTask(); + switch($task) + { + case 'getItemData': + try + { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); + $idValue = $jinput->get('id', NULL, 'INT'); + $typeValue = $jinput->get('type', NULL, 'WORD'); + $requestViewValue = $jinput->get('requestView', NULL, 'WORD'); + $idValue = $jinput->get('id', NULL, 'INT'); + $typeValue = $jinput->get('type', NULL, 'WORD'); + $requestViewValue = $jinput->get('requestView', NULL, 'WORD'); + if($idValue && $typeValue && $requestViewValue && $idValue && $typeValue && $requestViewValue) + { + $result = $this->getModel('ajax')->getItemData($idValue, $typeValue, $requestViewValue, $idValue, $typeValue, $requestViewValue); + } + else + { + $result = false; + } + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback . "(".json_encode($result).");"; + } + elseif($returnRaw) + { + echo json_encode($result); + } + else + { + echo "(".json_encode($result).");"; + } + } + catch(Exception $e) + { + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback."(".json_encode($e).");"; + } + else + { + echo "(".json_encode($e).");"; + } + } + break; + case 'getRows': + try + { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); + $keyValue = $jinput->get('key', NULL, 'ALNUM'); + $pageValue = $jinput->get('page', NULL, 'WORD'); + if($keyValue && $pageValue) + { + $result = $this->getModel('ajax')->getRows($keyValue, $pageValue); + } + else + { + $result = false; + } + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback . "(".json_encode($result).");"; + } + elseif($returnRaw) + { + echo json_encode($result); + } + else + { + echo "(".json_encode($result).");"; + } + } + catch(Exception $e) + { + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback."(".json_encode($e).");"; + } + else + { + echo "(".json_encode($e).");"; + } + } + break; + case 'getColumns': + try + { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); + $pageValue = $jinput->get('page', NULL, 'WORD'); + if($pageValue) + { + $result = $this->getModel('ajax')->getColumns($pageValue); + } + else + { + $result = false; + } + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback . "(".json_encode($result).");"; + } + elseif($returnRaw) + { + echo json_encode($result); + } + else + { + echo "(".json_encode($result).");"; + } + } + catch(Exception $e) + { + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback."(".json_encode($e).");"; + } + else + { + echo "(".json_encode($e).");"; + } + } + break; + case 'getTableTotals': + try + { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); + $idValue = $jinput->get('id', NULL, 'INT'); + if($idValue) + { + $result = $this->getModel('ajax')->getTableTotals($idValue); + } + else + { + $result = false; + } + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback . "(".json_encode($result).");"; + } + elseif($returnRaw) + { + echo json_encode($result); + } + else + { + echo "(".json_encode($result).");"; + } + } + catch(Exception $e) + { + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback."(".json_encode($e).");"; + } + else + { + echo "(".json_encode($e).");"; + } + } + break; + } + } + else + { + if($callback = $jinput->get('callback', null, 'CMD')) + { + echo $callback."(".json_encode(false).");"; + } + else + { + echo "(".json_encode(false).");"; + } + } + } +} diff --git a/site/controllers/help.php b/site/controllers/help.php index 76ceceb..74c2339 100644 --- a/site/controllers/help.php +++ b/site/controllers/help.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage help.php @@ -48,7 +48,8 @@ class SupportgroupsControllerHelp extends JControllerLegacy // Check Token! $token = JSession::getFormToken(); $call_token = $jinput->get('token', 0, 'ALNUM'); - if($token == $call_token){ + if($token == $call_token) + { $task = $this->getTask(); switch($task){ case 'getText': @@ -64,25 +65,25 @@ class SupportgroupsControllerHelp extends JControllerLegacy $result = ''; } echo $result; - // stop execution gracefully - jexit(); + // stop execution gracefully + jexit(); } catch(Exception $e) { - // stop execution gracefully + // stop execution gracefully jexit(); } break; } } - else - { - // stop execution gracefully + else + { + // stop execution gracefully jexit(); } } - protected function getHelpDocumentText($id) + protected function getHelpDocumentText($id) { $db = JFactory::getDbo(); $query = $db->getQuery(true); diff --git a/site/helpers/category.php b/site/helpers/category.php new file mode 100644 index 0000000..3795c59 --- /dev/null +++ b/site/helpers/category.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +/** + * Supportgroups Component Category Tree + */ + diff --git a/site/helpers/headercheck.php b/site/helpers/headercheck.php index 6cc67ac..10d23dd 100644 --- a/site/helpers/headercheck.php +++ b/site/helpers/headercheck.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage headercheck.php @@ -26,7 +26,7 @@ // No direct access to this file defined('_JEXEC') or die('Restricted access'); -class HeaderCheck +class supportgroupsHeaderCheck { function js_loaded($script_name) { diff --git a/site/helpers/route.php b/site/helpers/route.php index f8d28b7..e12219b 100644 --- a/site/helpers/route.php +++ b/site/helpers/route.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage route.php @@ -35,7 +35,89 @@ jimport('joomla.application.categories'); **/ abstract class SupportgroupsHelperRoute { - protected static $lookup; + protected static $lookup; + + /** + * @param int The route of the Map + */ + public static function getMapRoute($id = 0, $catid = 0) + { + if ($id > 0) + { + // Initialize the needel array. + $needles = array( + 'map' => array((int) $id) + ); + // Create the link + $link = 'index.php?option=com_supportgroups&view=map&id='. $id; + } + else + { + // Initialize the needel array. + $needles = array(); + //Create the link but don't add the id. + $link = 'index.php?option=com_supportgroups&view=map'; + } + if ($catid > 1) + { + $categories = JCategories::getInstance('supportgroups.map'); + $category = $categories->get($catid); + if ($category) + { + $needles['category'] = array_reverse($category->getPath()); + $needles['categories'] = $needles['category']; + $link .= '&catid='.$catid; + } + } + + if ($item = self::_findItem($needles)) + { + $link .= '&Itemid='.$item; + } + + return $link; + } + + /** + * @param int The route of the Supportgroups + */ + public static function getSupportgroupsRoute($id = 0, $catid = 0) + { + if ($id > 0) + { + // Initialize the needel array. + $needles = array( + 'supportgroups' => array((int) $id) + ); + // Create the link + $link = 'index.php?option=com_supportgroups&view=supportgroups&id='. $id; + } + else + { + // Initialize the needel array. + $needles = array(); + //Create the link but don't add the id. + $link = 'index.php?option=com_supportgroups&view=supportgroups'; + } + if ($catid > 1) + { + $categories = JCategories::getInstance('supportgroups.supportgroups'); + $category = $categories->get($catid); + if ($category) + { + $needles['category'] = array_reverse($category->getPath()); + $needles['categories'] = $needles['category']; + $link .= '&catid='.$catid; + } + } + + if ($item = self::_findItem($needles)) + { + $link .= '&Itemid='.$item; + } + + return $link; + } /** * Get the URL route for supportgroups category from a category ID and language diff --git a/site/helpers/supportgroups.php b/site/helpers/supportgroups.php index eeb936e..7111e5c 100644 --- a/site/helpers/supportgroups.php +++ b/site/helpers/supportgroups.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage supportgroups.php @@ -30,43 +30,195 @@ defined('_JEXEC') or die('Restricted access'); * Supportgroups component helper */ abstract class SupportgroupsHelper -{###SITE_GLOBAL_EVENT_HELPER### ###SITE_CUSTOM_HELPER_SCRIPT### - - public static function jsonToString($value) +{ + + public static function setTotals(&$data,&$type,&$id) { - // check if string is JSON - $result = json_decode($value, true); - if (json_last_error() === JSON_ERROR_NONE) { - // is JSON - if (self::checkArray($result)) - { - $value = ''; - $counter = 0; - foreach ($result as $string) - { - if ($counter) - { - $value .= ", ".$string; - } - else - { - $value .= $string; - } - $counter++; - } - } - return json_decode($value); + list($path, $fileName, $fullPath) = self::getTotalsFilePath($type,$id); + // did we get a valid result set + if (self::checkArray($data)) + { + // now save for next time + return self::saveJson($data, $fullPath, $path); } - return $value; + return false; + } + + public static function getTotals(&$type,&$id) + { + list($path, $fileName, $fullPath) = self::getTotalsFilePath($type,$id); + // check if file exists + if (file_exists($fullPath) && (($jsonFile = @file_get_contents($fullPath)) !== FALSE)) + { + // great we are done return results as array + return json_decode($jsonFile,true); + } + // remove the old files + self::removeFile($path, $fileName); + return false; + } + + protected static function getTotalsFilePath(&$type,&$id) + { + $path[0] = JPATH_ADMINISTRATOR.'/components/com_supportgroups/helpers/totals'; + $path[1] = self::getFileKEY($type,$id); + // build full path to file + $path[2] = $path[0].'/'.$path[1].'.json'; + + return $path; + } + + protected static function getFileKEY(&$type,&$id) + { + // Get a db connection. + $db = JFactory::getDbo(); + // Create a new query object. + $query = $db->getQuery(true); + // Get from #__supportgroups_support_group as a + $query->select('MAX(a.modified)'); + $query->from($db->quoteName('#__supportgroups_support_group', 'a')); + $query->where('a.published = 1'); + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + return 'VDM_'.$type.'__'.md5($db->loadResult()).'__'.$id; + } + return 'VDM_'.$type.'__289d7b0527868d7f9a5f8c7b1c80d7a6__'.$id; + } + + /** + * Safes json to a file + * + * @input object/array/json $data Data to be stored + * @input string $fullPath Full path to file + * @input string $path Full path to folder + * + * @returns boolean on success + **/ + protected static function saveJson($data, $fullPath, $path = __DIR__) + { + // check if path exists + if (!file_exists($path)) + { + // if not the make the path + mkdir($path, 0755, true); + } + // check that the string is json + if (!self::checkJson($data)) + { + // json encode if not json + $data = json_encode($data); + } + // make sure this is a string + if (self::checkString($data)) + { + $fp = fopen($fullPath, 'w'); + fwrite($fp, $data); + fclose($fp); + return true; + } + return false; } + /** + * Remove file + * + * @param string $dir The path to folder to remove + * @param string $newFileName the new file name + * + * @return boolean True in all is removed + * + */ + protected static function removeFile($dir, $newFileName) + { + if (is_dir($dir)) + { + // build the old folder name + $oldFileName = explode('__',$newFileName); + // little fix to remove this item old file if found + $found = glob($dir.'/'.$oldFileName[0].'*'.$oldFileName[2].'.json'); + if (self::checkArray($found) && ($done = @array_map( "unlink",$found)) !== FALSE) + { + return true; + } + } + return false; + } + + public static function jsonToString($value, $sperator = ", ", $table = null, $id = 'id', $name = 'name') + { + // do some table foot work + $external = false; + if (strpos($table, '#__') !== false) + { + $external = true; + $table = str_replace('#__', '', $table); + } + // check if string is JSON + $result = json_decode($value, true); + if (json_last_error() === JSON_ERROR_NONE) + { + // is JSON + if (self::checkArray($result)) + { + if (self::checkString($table)) + { + $names = array(); + foreach ($result as $val) + { + if ($external) + { + if ($name = self::getVar(null, $val, $id, $name, '=', $table)) + { + $names[] = $name; + } + } + else + { + if ($name = self::getVar($table, $val, $id, $name)) + { + $names[] = $name; + } + } + } + if (self::checkArray($names)) + { + return (string) implode($sperator,$names); + } + } + return (string) implode($sperator,$result); + } + return (string) json_decode($value); + } + return $value; + } + /** * Load the Component xml manifest. **/ - public static function manifest() - { - $manifestUrl = JPATH_ADMINISTRATOR."/components/com_supportgroups/supportgroups.xml"; - return simplexml_load_file($manifestUrl); + public static function manifest() + { + $manifestUrl = JPATH_ADMINISTRATOR."/components/com_supportgroups/supportgroups.xml"; + return simplexml_load_file($manifestUrl); + } + + /** + * Joomla version object + **/ + protected static $JVersion; + + /** + * set/get Joomla version + **/ + public static function jVersion() + { + // check if set + if (!self::checkObject(self::$JVersion)) + { + self::$JVersion = new JVersion(); + } + return self::$JVersion; } /** @@ -81,9 +233,9 @@ abstract class SupportgroupsHelper // get all Contributors (max 20) $searchArray = range('0','20'); foreach($searchArray as $nr) - { + { if ((NULL !== $params->get("showContributor".$nr)) && ($params->get("showContributor".$nr) == 2 || $params->get("showContributor".$nr) == 3)) - { + { // set link based of selected option if($params->get("useContributor".$nr) == 1) { @@ -182,16 +334,47 @@ abstract class SupportgroupsHelper /** * Get any component's model **/ - public static function getModel($name, $path = JPATH_COMPONENT_SITE, $component = 'supportgroups') + public static function getModel($name, $path = JPATH_COMPONENT_SITE, $component = 'Supportgroups', $config = array()) { - // load some joomla helpers - JLoader::import('joomla.application.component.model'); + // fix the name + $name = self::safeString($name); + // full path + $fullPath = $path . '/models'; + // set prefix + $prefix = $component.'Model'; // load the model file - JLoader::import( $name, $path . '/models' ); - // return instance - return JModelLegacy::getInstance( $name, $component.'Model' ); + JModelLegacy::addIncludePath($fullPath, $prefix); + // get instance + $model = JModelLegacy::getInstance($name, $prefix, $config); + // if model not found (strange) + if ($model == false) + { + jimport('joomla.filesystem.file'); + // get file path + $filePath = $path.'/'.$name.'.php'; + $fullPath = $fullPath.'/'.$name.'.php'; + // check if it exists + if (JFile::exists($filePath)) + { + // get the file + require_once $filePath; + } + elseif (JFile::exists($fullPath)) + { + // get the file + require_once $fullPath; + } + // build class names + $modelClass = $prefix.$name; + if (class_exists($modelClass)) + { + // initialize the model + return new $modelClass($config); + } + } + return $model; } - + /** * Add to asset Table */ @@ -237,7 +420,7 @@ abstract class SupportgroupsHelper if (!$asset->check() || !$asset->store()) { - JError::raiseWarning(500, $asset->getError()); + JFactory::getApplication()->enqueueMessage($asset->getError(), 'warning'); return false; } else @@ -255,7 +438,7 @@ abstract class SupportgroupsHelper } return false; } - + /** * Gets the default asset Rules for a component/view. */ @@ -308,28 +491,141 @@ abstract class SupportgroupsHelper return JAccess::getAssetRules(0); } + /** + * xmlAppend + * + * @param SimpleXMLElement $xml The XML element reference in which to inject a comment + * @param mixed $node A SimpleXMLElement node to append to the XML element reference, or a stdClass object containing a comment attribute to be injected before the XML node and a fieldXML attribute containing a SimpleXMLElement + * + * @return null + * + */ + public static function xmlAppend(&$xml, $node) + { + if (!$node) + { + // element was not returned + return; + } + switch (get_class($node)) + { + case 'stdClass': + if (property_exists($node, 'comment')) + { + self::xmlComment($xml, $node->comment); + } + if (property_exists($node, 'fieldXML')) + { + self::xmlAppend($xml, $node->fieldXML); + } + break; + case 'SimpleXMLElement': + $domXML = dom_import_simplexml($xml); + $domNode = dom_import_simplexml($node); + $domXML->appendChild($domXML->ownerDocument->importNode($domNode, true)); + $xml = simplexml_import_dom($domXML); + break; + } + } + + /** + * xmlComment + * + * @param SimpleXMLElement $xml The XML element reference in which to inject a comment + * @param string $comment The comment to inject + * + * @return null + * + */ + public static function xmlComment(&$xml, $comment) + { + $domXML = dom_import_simplexml($xml); + $domComment = new DOMComment($comment); + $nodeTarget = $domXML->ownerDocument->importNode($domComment, true); + $domXML->appendChild($nodeTarget); + $xml = simplexml_import_dom($domXML); + } + + /** + * xmlAddAttributes + * + * @param SimpleXMLElement $xml The XML element reference in which to inject a comment + * @param array $attributes The attributes to apply to the XML element + * + * @return null + * + */ + public static function xmlAddAttributes(&$xml, $attributes = array()) + { + foreach ($attributes as $key => $value) + { + $xml->addAttribute($key, $value); + } + } + + /** + * xmlAddOptions + * + * @param SimpleXMLElement $xml The XML element reference in which to inject a comment + * @param array $options The options to apply to the XML element + * + * @return void + * + */ + public static function xmlAddOptions(&$xml, $options = array()) + { + foreach ($options as $key => $value) + { + $addOption = $xml->addChild('option'); + $addOption->addAttribute('value', $key); + $addOption[] = $value; + } + } + + /** + * Render Bool Button + * + * @param array $args All the args for the button + * 0) name + * 1) additional (options class) // not used at this time + * 2) default + * 3) yes (name) + * 4) no (name) + * + * @return string The input html of the button + * + */ public static function renderBoolButton() { $args = func_get_args(); + // check if there is additional button class + $additional = isset($args[1]) ? (string) $args[1] : ''; // not used at this time + // start the xml + $buttonXML = new SimpleXMLElement(''); + // button attributes + $buttonAttributes = array( + 'type' => 'radio', + 'name' => isset($args[0]) ? self::htmlEscape($args[0]) : 'bool_button', + 'label' => isset($args[0]) ? self::safeString(self::htmlEscape($args[0]), 'Ww') : 'Bool Button', // not seen anyway + 'class' => 'btn-group', + 'filter' => 'INT', + 'default' => isset($args[2]) ? (int) $args[2] : 0); + // load the haskey attributes + self::xmlAddAttributes($buttonXML, $buttonAttributes); + // set the button options + $buttonOptions = array( + '1' => isset($args[3]) ? self::htmlEscape($args[3]) : 'JYES', + '0' => isset($args[4]) ? self::htmlEscape($args[4]) : 'JNO'); + // load the button options + self::xmlAddOptions($buttonXML, $buttonOptions); // get the radio element $button = JFormHelper::loadFieldType('radio'); - // setup the properties - $name = self::htmlEscape($args[0]); - $additional = isset($args[1]) ? (string) $args[1] : ''; - $value = $args[2]; - $yes = isset($args[3]) ? self::htmlEscape($args[3]) : 'JYES'; - $no = isset($args[4]) ? self::htmlEscape($args[4]) : 'JNO'; - - // prepare the xml - $element = new SimpleXMLElement(''); - // run - $button->setup($element, $value); + $button->setup($buttonXML, $buttonAttributes['default']); return $button->input; - } /** @@ -434,6 +730,19 @@ abstract class SupportgroupsHelper return false; } + /** + * Get a variable + * + * @param string $table The table from which to get the variable + * @param string $where The value where + * @param string $whereString The target/field string where/name + * @param string $what The return field + * @param string $operator The operator between $whereString/field and $where/value + * @param string $main The component in which the table is found + * + * @return mix string/int/float + * + */ public static function getVar($table, $where = null, $whereString = 'user', $what = 'id', $operator = '=', $main = 'supportgroups') { if(!$where) @@ -444,9 +753,15 @@ abstract class SupportgroupsHelper $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); - - $query->select($db->quoteName(array($what))); - $query->from($db->quoteName('#__'.$main.'_'.$table)); + $query->select($db->quoteName(array($what))); + if (empty($table)) + { + $query->from($db->quoteName('#__'.$main)); + } + else + { + $query->from($db->quoteName('#__'.$main.'_'.$table)); + } if (is_numeric($where)) { $query->where($db->quoteName($whereString) . ' '.$operator.' '.(int) $where); @@ -468,6 +783,20 @@ abstract class SupportgroupsHelper return false; } + /** + * Get array of variables + * + * @param string $table The table from which to get the variables + * @param string $where The value where + * @param string $whereString The target/field string where/name + * @param string $what The return field + * @param string $operator The operator between $whereString/field and $where/value + * @param string $main The component in which the table is found + * @param bool $unique The switch to return a unique array + * + * @return array + * + */ public static function getVars($table, $where = null, $whereString = 'user', $what = 'id', $operator = 'IN', $main = 'supportgroups', $unique = true) { if(!$where) @@ -482,13 +811,25 @@ abstract class SupportgroupsHelper if (self::checkArray($where)) { + // prep main <-- why? well if $main='' is empty then $table can be categories or users + if (self::checkString($main)) + { + $main = '_'.ltrim($main, '_'); + } // Get a db connection. $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); $query->select($db->quoteName(array($what))); - $query->from($db->quoteName('#__'.$main.'_'.$table)); + if (empty($table)) + { + $query->from($db->quoteName('#__'.$main)); + } + else + { + $query->from($db->quoteName('#_'.$main.'_'.$table)); + } $query->where($db->quoteName($whereString) . ' '.$operator.' (' . implode(',',$where) . ')'); $db->setQuery($query); $db->execute(); @@ -503,35 +844,74 @@ abstract class SupportgroupsHelper } return false; } - + + public static function isPublished($id,$type) + { + if ($type == 'raw') + { + $type = 'item'; + } + $db = JFactory::getDbo(); + $query = $db->getQuery(true); + $query->select(array('a.published')); + $query->from('#__supportgroups_'.$type.' AS a'); + $query->where('a.id = '. (int) $id); + $query->where('a.published = 1'); + $db->setQuery($query); + $db->execute(); + $found = $db->getNumRows(); + if($found) + { + return true; + } + return false; + } + + public static function getGroupName($id) + { + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + $query->select(array('a.title')); + $query->from('#__usergroups AS a'); + $query->where('a.id = '. (int) $id); + $db->setQuery($query); + $db->execute(); + $found = $db->getNumRows(); + if($found) + { + return $db->loadResult(); + } + return $id; + } + /** * Get the actions permissions **/ - public static function getActions($view,&$record = null,$views = null) + public static function getActions($view,&$record = null,$views = null) { jimport('joomla.access.access'); $user = JFactory::getUser(); $result = new JObject; $view = self::safeString($view); - if (self::checkString($views)) - { + if (self::checkString($views)) + { $views = self::safeString($views); - } + } // get all actions from component $actions = JAccess::getActions('com_supportgroups', 'component'); - // set acctions only set in component settiongs - $componentActions = array('core.admin','core.manage','core.options','core.export'); + // set acctions only set in component settiongs + $componentActions = array('core.admin','core.manage','core.options','core.export'); // loop the actions and set the permissions foreach ($actions as $action) - { + { // set to use component default $fallback = true; if (self::checkObject($record) && isset($record->id) && $record->id > 0 && !in_array($action->name,$componentActions)) { // The record has been set. Check the record permissions. $permission = $user->authorise($action->name, 'com_supportgroups.'.$view.'.' . (int) $record->id); - if (!$permission && !is_null($permission)) + if (!$permission) // TODO removed && !is_null($permission) { if ($action->name == 'core.edit' || $action->name == $view.'.edit') { @@ -603,17 +983,17 @@ abstract class SupportgroupsHelper } elseif (self::checkString($views) && isset($record->catid) && $record->catid > 0) { - // make sure we use the core. action check for the categories - if (strpos($action->name,$view) !== false && strpos($action->name,'core.') === false ) { - $coreCheck = explode('.',$action->name); - $coreCheck[0] = 'core'; - $categoryCheck = implode('.',$coreCheck); - } - else - { - $categoryCheck = $action->name; - } - // The record has a category. Check the category permissions. + // make sure we use the core. action check for the categories + if (strpos($action->name,$view) !== false && strpos($action->name,'core.') === false ) { + $coreCheck = explode('.',$action->name); + $coreCheck[0] = 'core'; + $categoryCheck = implode('.',$coreCheck); + } + else + { + $categoryCheck = $action->name; + } + // The record has a category. Check the category permissions. $catpermission = $user->authorise($categoryCheck, 'com_supportgroups.'.$views.'.category.' . (int) $record->catid); if (!$catpermission && !is_null($catpermission)) { @@ -696,24 +1076,74 @@ abstract class SupportgroupsHelper return $result; } - public static function checkObject($object) + /** + * Check if have an json string + * + * @input string The json string to check + * + * @returns bool true on success + **/ + public static function checkJson($string) { - if (isset($object) && is_object($object) && count($object) > 0) + if (self::checkString($string)) { - return true; + json_decode($string); + return (json_last_error() === JSON_ERROR_NONE); } return false; } - public static function checkArray($array) + /** + * Check if have an object with a length + * + * @input object The object to check + * + * @returns bool true on success + **/ + public static function checkObject($object) + { + if (isset($object) && is_object($object)) + { + return count((array)$object) > 0; + } + return false; + } + + /** + * Check if have an array with a length + * + * @input array The array to check + * + * @returns bool true on success + **/ + public static function checkArray($array, $removeEmptyString = false) { if (isset($array) && is_array($array) && count($array) > 0) { + // also make sure the empty strings are removed + if ($removeEmptyString) + { + foreach ($array as $key => $string) + { + if (empty($string)) + { + unset($array[$key]); + } + } + return self::checkArray($array, false); + } return true; } return false; } + /** + * Check if have a string with a length + * + * @input string The string to check + * + * @returns bool true on success + **/ public static function checkString($string) { if (isset($string) && is_string($string) && strlen($string) > 0) @@ -723,6 +1153,38 @@ abstract class SupportgroupsHelper return false; } + /** + * Check if we are connected + * Thanks https://stackoverflow.com/a/4860432/1429677 + * + * @returns bool true on success + **/ + public static function isConnected() + { + // If example.com is down, then probably the whole internet is down, since IANA maintains the domain. Right? + $connected = @fsockopen("www.example.com", 80); + // website, port (try 80 or 443) + if ($connected) + { + //action when connected + $is_conn = true; + fclose($connected); + } + else + { + //action in connection failure + $is_conn = false; + } + return $is_conn; + } + + /** + * Merge an array of array's + * + * @input array The arrays you would like to merge + * + * @returns array on success + **/ public static function mergeArrays($arrays) { if(self::checkArray($arrays)) @@ -740,7 +1202,20 @@ abstract class SupportgroupsHelper return false; } + // typo sorry! public static function sorten($string, $length = 40, $addTip = true) + { + return self::shorten($string, $length, $addTip); + } + + /** + * Shorten a string + * + * @input string The you would like to shorten + * + * @returns string on success + **/ + public static function shorten($string, $length = 40, $addTip = true) { if (self::checkString($string)) { @@ -763,7 +1238,7 @@ abstract class SupportgroupsHelper $final = strlen($newString); if ($initial != $final && $addTip) { - $title = self::sorten($string, 400 , false); + $title = self::shorten($string, 400 , false); return ''.trim($newString).'...'; } elseif ($initial != $final && !$addTip) @@ -774,57 +1249,94 @@ abstract class SupportgroupsHelper return $string; } - public static function safeString($string, $type = 'L', $spacer = '_') + /** + * Making strings safe (various ways) + * + * @input string The you would like to make safe + * + * @returns string on success + **/ + public static function safeString($string, $type = 'L', $spacer = '_', $replaceNumbers = true) { - // remove all numbers and replace with english text version (works well only up to a thousand) - $string = self::replaceNumbers($string); - + if ($replaceNumbers === true) + { + // remove all numbers and replace with english text version (works well only up to millions) + $string = self::replaceNumbers($string); + } + // 0nly continue if we have a string if (self::checkString($string)) { + // create file name without the extention that is safe + if ($type === 'filename') + { + // make sure VDM is not in the string + $string = str_replace('VDM', 'vDm', $string); + // Remove anything which isn't a word, whitespace, number + // or any of the following caracters -_() + // If you don't need to handle multi-byte characters + // you can use preg_replace rather than mb_ereg_replace + // Thanks @Łukasz Rysiak! + // $string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string); + $string = preg_replace("([^\w\s\d\-_\(\)])", '', $string); + // http://stackoverflow.com/a/2021729/1429677 + return preg_replace('/\s+/', ' ', $string); + } // remove all other characters $string = trim($string); $string = preg_replace('/'.$spacer.'+/', ' ', $string); $string = preg_replace('/\s+/', ' ', $string); $string = preg_replace("/[^A-Za-z ]/", '', $string); - // return a string with all first letter of each word uppercase(no undersocre) - if ($type == 'W') - { - return ucwords(strtolower($string)); + // select final adaptations + if ($type === 'L' || $type === 'strtolower') + { + // replace white space with underscore + $string = preg_replace('/\s+/', $spacer, $string); + // default is to return lower + return strtolower($string); } - elseif ($type == 'w') - { - return strtolower($string); + elseif ($type === 'W') + { + // return a string with all first letter of each word uppercase(no undersocre) + return ucwords(strtolower($string)); } - elseif ($type == 'Ww') - { - return ucfirst(strtolower($string)); + elseif ($type === 'w' || $type === 'word') + { + // return a string with all lowercase(no undersocre) + return strtolower($string); } - elseif ($type == 'WW') - { - return strtoupper($string); + elseif ($type === 'Ww' || $type === 'Word') + { + // return a string with first letter of the first word uppercase and all the rest lowercase(no undersocre) + return ucfirst(strtolower($string)); } - elseif ($type == 'U') + elseif ($type === 'WW' || $type === 'WORD') + { + // return a string with all the uppercase(no undersocre) + return strtoupper($string); + } + elseif ($type === 'U' || $type === 'strtoupper') { // replace white space with underscore $string = preg_replace('/\s+/', $spacer, $string); // return all upper return strtoupper($string); } - elseif ($type == 'F') + elseif ($type === 'F' || $type === 'ucfirst') { // replace white space with underscore $string = preg_replace('/\s+/', $spacer, $string); // return with first caracter to upper return ucfirst(strtolower($string)); } - elseif ($type == 'L') + elseif ($type === 'cA' || $type === 'cAmel' || $type === 'camelcase') { - // replace white space with underscore - $string = preg_replace('/\s+/', $spacer, $string); - // default is to return lower - return strtolower($string); + // convert all words to first letter uppercase + $string = ucwords(strtolower($string)); + // remove white space + $string = preg_replace('/\s+/', '', $string); + // now return first letter lowercase + return lcfirst($string); } - // return string return $string; } @@ -832,15 +1344,15 @@ abstract class SupportgroupsHelper return ''; } - public static function htmlEscape($var, $charset = 'UTF-8', $sorten = false, $length = 40) + public static function htmlEscape($var, $charset = 'UTF-8', $shorten = false, $length = 40) { if (self::checkString($var)) { $filter = new JFilterInput(); $string = $filter->clean(html_entity_decode(htmlentities($var, ENT_COMPAT, $charset)), 'HTML'); - if ($sorten) + if ($shorten) { - return self::sorten($string,$length); + return self::shorten($string,$length); } return $string; } @@ -871,7 +1383,7 @@ abstract class SupportgroupsHelper // return the string with no numbers remaining. return $string; } - + /** * Convert an integer into an English word string * Thanks to Tom Nicholson @@ -954,7 +1466,7 @@ abstract class SupportgroupsHelper $w .= ' '; if($r < 100) { - $word .= 'and '; + $w .= 'and '; } $w .= self::numberToString($r); } diff --git a/site/language/en-GB/en-GB.com_supportgroups.ini b/site/language/en-GB/en-GB.com_supportgroups.ini index 327d72f..5a0c72f 100644 --- a/site/language/en-GB/en-GB.com_supportgroups.ini +++ b/site/language/en-GB/en-GB.com_supportgroups.ini @@ -1,5 +1,71 @@ COM_CONTENT_FIELD_MODIFIED_DESC="The last date this item was modified." COM_SUPPORTGROUPS="Support Groups" +COM_SUPPORTGROUPS_ALL_FACILITIES="All facilities" +COM_SUPPORTGROUPS_AN_ERROR_HAS_OCCURRED="An error has occurred" +COM_SUPPORTGROUPS_AREA="Area" +COM_SUPPORTGROUPS_AREAS="Areas" +COM_SUPPORTGROUPS_A_MODULE_POSITION="A Module Position" +COM_SUPPORTGROUPS_BACK="Back" +COM_SUPPORTGROUPS_BACK_TO_GROUP="Back to group" +COM_SUPPORTGROUPS_BACK_TO_START="Back to start" +COM_SUPPORTGROUPS_CLOSE="Close" +COM_SUPPORTGROUPS_COUNTRY="Country" +COM_SUPPORTGROUPS_CREATE_NEW_S="Create New %s" +COM_SUPPORTGROUPS_DETAILS="Details" +COM_SUPPORTGROUPS_EDIT_S="Edit %s" +COM_SUPPORTGROUPS_FACILITIES="Facilities" +COM_SUPPORTGROUPS_FACILITY="Facility" +COM_SUPPORTGROUPS_FEMALE="Female" +COM_SUPPORTGROUPS_FEMALES="Females" +COM_SUPPORTGROUPS_FEMALES_ART="Females ART" +COM_SUPPORTGROUPS_FEMALES_ON_ART="Females on ART" +COM_SUPPORTGROUPS_FEMALE_CHILDREN="Female Children" +COM_SUPPORTGROUPS_FEMALE_ON_ART="Female on ART" +COM_SUPPORTGROUPS_FROM_S="from %s" +COM_SUPPORTGROUPS_GLOBAL_TOTALS_OF_ALL_GROUPS="Global totals of all groups." +COM_SUPPORTGROUPS_GO_TO_GROUP_ON_MAP="Go To Group On Map" +COM_SUPPORTGROUPS_GO_TO_S_ON_MAP="Go to %s on map" +COM_SUPPORTGROUPS_GROUP="Group" +COM_SUPPORTGROUPS_GROUPS="Groups" +COM_SUPPORTGROUPS_LOADING="Loading" +COM_SUPPORTGROUPS_LOADING_DETAILS_ONE_MOMENT_PLEASE="Loading details, one moment please." +COM_SUPPORTGROUPS_MALE="Male" +COM_SUPPORTGROUPS_MALES="Males" +COM_SUPPORTGROUPS_MALES_ART="Males ART" +COM_SUPPORTGROUPS_MALES_ON_ART="Males on ART" +COM_SUPPORTGROUPS_MALE_CHILDREN="Male Children" +COM_SUPPORTGROUPS_MALE_ON_ART="Male on ART" +COM_SUPPORTGROUPS_MAP="Map" +COM_SUPPORTGROUPS_MAP_DESC="Map of support groups" +COM_SUPPORTGROUPS_MORE_DETAILS="More Details" +COM_SUPPORTGROUPS_NAME="Name" +COM_SUPPORTGROUPS_NEW="New" +COM_SUPPORTGROUPS_NOT_AUTHORISED_TO_VIEW_MAP="Not authorised to view map!" +COM_SUPPORTGROUPS_NOT_AUTHORISED_TO_VIEW_SUPPORTGROUPS="Not authorised to view supportgroups!" +COM_SUPPORTGROUPS_NOT_FOUND_OR_ACCESS_DENIED="Not found or access denied!" +COM_SUPPORTGROUPS_NO_ACCESS_GRANTED="No Access Granted!" +COM_SUPPORTGROUPS_NO_DETAILS_HAVE_BEEN_SET_PLEASE_CHECK_AGAIN_LATTER="No details have been set, please check again latter." +COM_SUPPORTGROUPS_NO_SUPPORT_GROUPS_FOUND="No support groups found." +COM_SUPPORTGROUPS_PHONE="Phone" +COM_SUPPORTGROUPS_PLEASE_ENABLE_POPUPS_TO_PRINT_THESE_DETAILS="Please enable pop-ups to print these details!" +COM_SUPPORTGROUPS_PLEASE_TRY_AGAIN_LATER="Please try again later" +COM_SUPPORTGROUPS_PRINT_CLOSE="Print & Close" +COM_SUPPORTGROUPS_PRINT_PREVIEW="Print Preview" +COM_SUPPORTGROUPS_REGION="Region" +COM_SUPPORTGROUPS_REGIONS="Regions" +COM_SUPPORTGROUPS_RELATED_GROUPS="Related Groups" +COM_SUPPORTGROUPS_RETURN_TO_GROUP="Return to Group" +COM_SUPPORTGROUPS_SUPPORTGROUPS="Support Groups" +COM_SUPPORTGROUPS_SUPPORTGROUPS_DESC="List all support groups" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESSING_THIS_S="Support groups accessing this %s" +COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESSING_THIS_S_REPORT_THE_FOLLOWING="Support groups accessing this %s report the following" +COM_SUPPORTGROUPS_THIS_GROUP_IS="This group is" +COM_SUPPORTGROUPS_TOTALS="Totals" +COM_SUPPORTGROUPS_TOTAL_CHILDREN="Total children" +COM_SUPPORTGROUPS_TOTAL_GROUPS="Total Groups" +COM_SUPPORTGROUPS_TOTAL_MEMBERS="Total members" +COM_SUPPORTGROUPS_TOTAL_ON_ART="Total on ART" +COM_SUPPORTGROUPS_TOTAL_RELATED_GROUPS="Total Related Groups" JGLOBAL_FIELD_ID_DESC="Record number in the database." JGLOBAL_FIELD_ID_LABEL="ID" JGLOBAL_FIELD_MODIFIED_BY_DESC="The user who did the last modification." @@ -11,4 +77,4 @@ JTOOLBAR_CLOSE="Close" JTOOLBAR_HELP="Help" JTOOLBAR_SAVE="Save & Close" JTOOLBAR_SAVE_AND_NEW="Save & New" -JTOOLBAR_SAVE_AS_COPY="Save as Copy" +JTOOLBAR_SAVE_AS_COPY="Save as Copy" \ No newline at end of file diff --git a/site/language/en-GB/en-GB.com_supportgroups.sys.ini b/site/language/en-GB/en-GB.com_supportgroups.sys.ini index 542cdb7..3cba05c 100644 --- a/site/language/en-GB/en-GB.com_supportgroups.sys.ini +++ b/site/language/en-GB/en-GB.com_supportgroups.sys.ini @@ -1 +1,3 @@ COM_SUPPORTGROUPS="Support Groups" +COM_SUPPORTGROUPS_NOT_FOUND_OR_ACCESS_DENIED="Not found or access denied!" +COM_SUPPORTGROUPS_NO_ACCESS_GRANTED="No Access Granted!" \ No newline at end of file diff --git a/site/models/ajax.php b/site/models/ajax.php new file mode 100644 index 0000000..97ad083 --- /dev/null +++ b/site/models/ajax.php @@ -0,0 +1,1534 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.application.component.helper'); + +/** + * Supportgroups Ajax Model + */ +class SupportgroupsModelAjax extends JModelList +{ + protected $app_params; + + public function __construct() + { + parent::__construct(); + // get params + $this->app_params = JComponentHelper::getParams('com_supportgroups'); + + } + + // Used in map + /** + * The Language Strings for Types + * @var array + */ + protected $langType; + + /** + * The Type + * @var string + */ + protected $type; + + /** + * The markers for the map + * @var boolean + */ + public $markers = false; + + /** + * The Map Marker Image URLs + * @var string + */ + public $markerImages; + + /** + * The Info Window Content in Map + * @var string + */ + public $windowContent; + + /** + * The Map Details Blocks + * @var array + */ + protected $mapDetailsBlock = array(); + + /** + * Cluster Switch + * @var boolean + */ + public $cluster = false; + + /** + * Get the Item Data For Type + * + * @return string Formatted html string + */ + public function getItemData(&$id,&$type,&$requestView) + { + switch ($type) + { + case 'country': + $this->country = $id; + break; + case 'region': + $this->region = $id; + break; + case 'facility': + $this->facility = $id; + break; + case 'area': + $this->area = $id; + break; + case 'group': + $this->group = $id; + break; + case 'groups': + $input = array('facility' => 'int','area' => 'int','region' => 'int','country' => 'int'); + $where = array('facility' => 'facility','area' => 'area','region' => 'region','country' => 'country'); + $filtering = JFactory::getApplication()->input->getArray($input); + foreach ($filtering as $key => $filter) + { + if ($filter) + { + $this->$where[$key] = (int) $filter; + } + } + break; + } + // set the type + $this->type = (string) $type; + // insure the set of language tags are loaded + $this->langType = array( + 'totals' => JText::_('COM_SUPPORTGROUPS_TOTALS'), + 'country' => JText::_('COM_SUPPORTGROUPS_COUNTRY'), + 'region' => JText::_('COM_SUPPORTGROUPS_REGION'), + 'facility' => JText::_('COM_SUPPORTGROUPS_FACILITY'), + 'area' => JText::_('COM_SUPPORTGROUPS_AREA'), + 'group' => JText::_('COM_SUPPORTGROUPS_GROUP')); + // set the request view + $this->requestView = $requestView; + // return the data as HTML + return $this->getData($id); + } + + /** + * Get Data + * + * @return string Formatted html string + */ + protected function getData(&$id) + { + // get group + $groups = $this->getItems($id); + if (isset($groups) && SupportgroupsHelper::checkArray($groups)) + { + return $this->getDisplay($groups,$id); + } + return false; + } + + /** + * Get display of data + * + * @return string Formatted html string + */ + protected function getDisplay(&$groups,&$id) + { + // init the Display builder + $display = array(); + $displaying = false; + // set some totals language + $langKeys = array( + 'members' => ''.JText::_('COM_SUPPORTGROUPS_TOTAL_MEMBERS').'', + 'children' => ''.JText::_('COM_SUPPORTGROUPS_TOTAL_CHILDREN').'', + 'on_art' => ''.JText::_('COM_SUPPORTGROUPS_TOTAL_ON_ART').'', + 'male' => JText::_('COM_SUPPORTGROUPS_MALE'), + 'female' => JText::_('COM_SUPPORTGROUPS_FEMALE'), + 'male_children' => JText::_('COM_SUPPORTGROUPS_MALE_CHILDREN'), + 'female_children' => JText::_('COM_SUPPORTGROUPS_FEMALE_CHILDREN'), + 'male_art' => JText::_('COM_SUPPORTGROUPS_MALE_ON_ART'), + 'female_art' => JText::_('COM_SUPPORTGROUPS_FEMALE_ON_ART') + ); + // sum the total groups + $totalGroups = count($groups); + // house cleaning per type + switch ($this->type) + { + case 'totals': + case 'country': + case 'region': + case 'facility': + case 'area': + // change layout if table + if ($this->requestView == 'table' && 'totals' == $this->type) + { + // set the group total + $display['totals'][JText::_('COM_SUPPORTGROUPS_TOTAL_GROUPS')] = $totalGroups; + } + else + { + // set the group total + $display['totals'][] = ''.JText::_('COM_SUPPORTGROUPS_TOTAL_GROUPS').' '.$totalGroups; + } + // set the totals + $totals = $this->getTotals($id); + if ($totals) + { + foreach ($langKeys as $key => $lang) + { + if (isset($totals->$key)) + { + // change layout if table + if ($this->requestView == 'table' && 'totals' == $this->type) + { + $display['totals'][$lang] = $totals->$key; + } + else + { + $display['totals'][] = $lang.' '.$totals->$key; + } + } + } + if ('totals' == $this->type) + { + // check if a map page message has been set + $totalMessage = $this->app_params->get('total_message', '

                  '.JText::_('COM_SUPPORTGROUPS_GLOBAL_TOTALS_OF_ALL_GROUPS').'

                  '); + $display['details'] = $totalMessage; + } + } + // set groups & some details + foreach ($groups as $nr => &$item) + { + // only add distance to facility + $distance = ''; + if ('facility' == $this->type) + { + $from = explode(',',str_replace(array('(',')'),'',$item->marker)); + $to = explode(',',str_replace(array('(',')'),'',$item->facility_marker)); + if (isset($from[0]) && isset($from[1]) && isset($to[0]) && isset($to[1])) + { + $actualDistance = $this->getDistance($from[0],$from[1],$to[0],$to[1]); + $facilityType = (isset($item->facility_type)) ? $item->facility_type : JText::_('COM_SUPPORTGROUPS_FACILITY'); + $distance = '
                  ' + .JText::_('COM_SUPPORTGROUPS_THIS_GROUP_IS').' '.$actualDistance + .'km '.JText::sprintf('COM_SUPPORTGROUPS_FROM_S',strtolower($facilityType)).'.'; + } + } + if ('country' != $this->type && 'totals' != $this->type) + { + // we want to sort the groups by distance if it is a facility group + if ('facility' == $this->type) + { + $display['groups'][$nr] = array(); + // build the groups array + $display['groups'][$nr]['string'] = ' '.$item->name.' '.$item->phone.' '.$item->members.$distance; + // add the sort key + if (isset($actualDistance)) + { + // add the sort key + $display['groups'][$nr]['order'] = $actualDistance; + } + else + { + $display['groups'][$nr]['order'] = (int) $item->members; + } + } + else + { + // build the groups array + $display['groups'][] = ' '.$item->name.' '.$item->phone.' '.$item->members; + } + } + // some details that we need to only set once (never for totals) + if ('totals' != $this->type && !isset($display['details'])) + { + $display['details'] = $this->setDetailDisplay($item); + } + } + break; + case 'group': + $display['details'] = $this->setDetailDisplay($groups[0]); + break; + case 'groups': + return $this->getMapData($groups); + break; + } + // only set details if details display was build + if (isset($display['details'])) + { + $displaying .= $display['details'] ; + } + // only set totals Un ordered list if total display was build + if (isset($display['totals']) && SupportgroupsHelper::checkArray($display['totals'])) + { + // change layout if table + if ($this->requestView == 'table' && 'totals' == $this->type) + { + $tableStart = ''; + $tableHead = ''; + $tableBody = ''; + // set the totals layout for table view + foreach ($display['totals'] as $lang => $vTotal) + { + $tableHead .= ''; + $tableBody .= ''; + } + $tableHead .= ''; + $tableBody .= ''; + $tableEnd = '
                  '.$display['details'].'
                  '.$lang.''.$vTotal.'
                  '; + // set to display + $displaying = $tableStart.$tableHead.$tableBody.$tableEnd; + } + else + { + $displaying .= '
                  • '.implode('
                  • ',$display['totals']).'
                  '; + } + } + // only set groups Un ordered list if group display was build + if (isset($display['groups']) && SupportgroupsHelper::checkArray($display['groups'])) + { + $displaying .= $this->setGroupsDisplay($display['groups'],$groups[0],$totalGroups); + } + // return display if it has been set + if ($displaying && SupportgroupsHelper::checkString($displaying)) + { + if ($this->requestView != 'table') + { + // set nav menu + switch ($this->type) + { + case 'facility': + $displaying = '
                  '.$displaying; + break; + case 'country': + case 'region': + case 'area': + $displaying = '
                  '.$displaying; + break; + case 'group': + $displaying = ''.$displaying; + break; + } + } + return array('html' => $displaying); + } + return false; + } + + /** + * set Details Display + * + * @params object $item The group item + * + * @ return string The details in html + * + */ + protected function setDetailDisplay(&$item) + { + // set the facility marker if needed + $facility_marker = false; + // check if the facility has an marker set + if (isset($item->facility_marker) && (strpos($item->facility_marker,')') !== false)) + { + $facility_marker = (string) str_replace(array('(',')'),'',$item->facility_marker); + } + if ('group' == $this->type) + { + // reset display builder + $display = array(); + // details settings + $setDetails = array( + 'phone' => array('icon' => 'phone', 'lang' => JText::_('COM_SUPPORTGROUPS_PHONE'), 'onclick' => false ), + 'area_name' => array('icon' => 'map-marker', 'lang' => JText::_('COM_SUPPORTGROUPS_AREA'), 'onclick' => 'area' ), + 'region_name' => array('icon' => 'map-signs', 'lang' => JText::_('COM_SUPPORTGROUPS_REGION'), 'onclick' => 'region' ), + 'facility_name' => array('icon' => 'medkit', 'lang' => JText::_('COM_SUPPORTGROUPS_FACILITY'), 'onclick' => 'facility' ), + 'country_name' => array('icon' => 'flag', 'lang' => JText::_('COM_SUPPORTGROUPS_COUNTRY'), 'onclick' => 'country' ) + ); + // check for details + $details = ''; + if (isset($item->details) && SupportgroupsHelper::checkString($item->details) && $this->requestView != 'table') + { + $randomKey = SupportgroupsHelper::randomkey(8); + $details = '' + . '
                  ' + . '
                  ' + . '' + . '' + . '

                  '.$item->name.' - '.JText::_('COM_SUPPORTGROUPS_DETAILS').'

                  ' + . '
                  ' + . $item->details + . '
                  '; + } + // set Additional Info + $details .= $this->setAdditionalInfo($item); + foreach ($setDetails as $key => $set) + { + // add goTo function + if ('facility_name' == $key && $facility_marker && $this->requestView != 'table') + { + $theOnclick = 'goTo(\'facility_'.$item->facility_id.'_nav\');'; + } + elseif ($set['onclick']) + { + // set Map Data Action + $theOnclick = 'setMapData('.$item->{$set['onclick'].'_id'}.',\''.$set['onclick'].'\');'; + } + else + { + // no goTo Action + $theOnclick = ''; + } + // update lang for facility if needed + if ('facility_name' == $key && isset($item->facility_type)) + { + $set['lang'] = $item->facility_type; + } + // update lang for area if needed + if ('area_name' == $key && isset($item->area_type)) + { + $set['lang'] = $item->area_type; + } + // don't add these onlclick if table view + if ($this->requestView == 'table') + { + $onclick = ''; $onclicka = ''; + } + else + { + // only set the onclick event if needed + $onclick = ($set['onclick']) ? '' : ''; + $onclicka = ($set['onclick']) ? '' : ''; + } + // now load the display array + $display[] = ' ' + .$set['lang'].' '.$onclick.$item->$key.$onclicka.''; + } + if ($this->requestView == 'table') + { + return '

                  '.$item->name + .'

                  • '.implode('
                  • ',$display).'
                  '; + } + return '

                  '.$item->name + .'

                  '.$details.'
                  • '.implode('
                  • ',$display).'
                  '; + } + // add facility type to name + if ($this->requestView != 'group' && isset($item->facility_name) && isset($item->facility_type)) + { + $item->facility_name = $item->facility_name .' - '. $item->facility_type; + } + // add are type to name + if ($this->requestView != 'group' && isset($item->area_name) && isset($item->area_type)) + { + $item->area_name = $item->area_name .' - '. $item->area_type; + } + // reset display builder + $display = ''; + // icon settings + $setIcons = array( + 'area' => 'map-marker', + 'region' => 'map-signs', + 'facility' => 'medkit', + 'country' => 'flag'); + // setup som lan globals + $this->facilityType = (isset($item->facility_type)) ? $item->facility_type : JText::_('COM_SUPPORTGROUPS_FACILITY'); + $this->areaType = (isset($item->area_type)) ? $item->area_type : JText::_('COM_SUPPORTGROUPS_AREA'); + // setup facility Notice + $facilityNotice = ('facility' == $this->type) ? '

                  '.JText::sprintf('COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESSING_THIS_S_REPORT_THE_FOLLOWING',strtolower($this->facilityType)).'.

                  ':''; + $goToFacility = JText::sprintf('COM_SUPPORTGROUPS_GO_TO_S_ON_MAP', strtolower($this->facilityType)); + // add goTo function for facility + if ('facility' == $this->type && $facility_marker && $this->requestView != 'table') + { + $display = '

                  '.$item->{$this->type.'_name'}.'

                  '; + } + // add facility type to name + elseif ('facility' == $this->type && isset($item->facility_type)) + { + $display = '

                  '.$item->{$this->type.'_name'}.'

                  '; + } + // add area type to name + elseif ('area' == $this->type) + { + // no goTo Action + $display = '

                  '.$item->{$this->type.'_name'}.'

                  '; + } + else + { + // no goTo Action + $display = '

                  '.$item->{$this->type.'_name'}.'

                  '; + } + // check for phone + if (isset($item->{$this->type.'_phone'}) && SupportgroupsHelper::checkString($item->{$this->type.'_phone'})) + { + $display .= ' ' + .JText::_('COM_SUPPORTGROUPS_PHONE').' '.$item->{$this->type.'_phone'}.''; + } + // check for details + if (isset($item->{$this->type.'_details'}) && SupportgroupsHelper::checkString($item->{$this->type.'_details'}) && $this->requestView != 'table') + { + $randomKey = SupportgroupsHelper::randomkey(8); + $display .= '' + . '
                  ' + . '
                  ' + . '' + . '' + . '

                  '.$item->{$this->type.'_name'}.' - '.JText::_('COM_SUPPORTGROUPS_DETAILS').'

                  ' + . '
                  ' + . $item->{$this->type.'_details'} + . '
                  '; + } + return $display.$facilityNotice; + } + + /** + * Build the Additional Info display block + * + * @params object $object The Support Group Values + * + * @ return string The Value String + * + */ + public function setAdditionalInfo(&$object) + { + if (isset($object->additionalInfo) && SupportgroupsHelper::checkArray($object->additionalInfo)) + { + $strings = array(); + $div = ''; + foreach ($object->additionalInfo as $additionalInfo) + { + $randomKey = SupportgroupsHelper::randomkey(8); + $strings[$additionalInfo->type.'__'.$additionalInfo->name] = array(); + $strings[$additionalInfo->type.'__'.$additionalInfo->name]['string'] = ' '.$additionalInfo->name.''; + $strings[$additionalInfo->type.'__'.$additionalInfo->name]['type'] = ''. SupportgroupsHelper::safeString($additionalInfo->type,'W').''; + if (!isset($additionalInfo->details) || !SupportgroupsHelper::checkString($additionalInfo->details)) + { + $additionalInfo->details = JText::_('COM_SUPPORTGROUPS_NO_DETAILS_HAVE_BEEN_SET_PLEASE_CHECK_AGAIN_LATTER'); + } + $div .= '
                  '.$additionalInfo->type.'

                  '.$additionalInfo->name.'

                  '.$additionalInfo->details.'
                  '; + } + // now sort the capacities + ksort($strings); + // now build display + $display = array(); + foreach ($strings as $string) + { + if (!isset($display[$string['type']])) + { + $display[$string['type']] = '
                  '.$string['type'].'
                    '; + } + $display[$string['type']] .= '
                  • '.$string['string'].'
                  • '; + } + return '
                    '.implode('
                  ',$display).'
                '.$div; + } + return ''; + } + + /** + * set Groups Display + * + * @params array $groups The groups array + * + * @ return string The groups html + * + */ + protected function setGroupsDisplay(&$groups,&$item,$totalGroups) + { + $randomKey = SupportgroupsHelper::randomkey(8); + // setup the group total in title + $totalGroups = ($totalGroups) ? '('.$totalGroups.') ' : ''; + // setup facility Notice + $this->facilityType = (isset($this->facilityType)) ? $this->facilityType : JText::_('COM_SUPPORTGROUPS_FACILITY'); + $facilityNotice = ('facility' == $this->type) ? '

                '.JText::sprintf('COM_SUPPORTGROUPS_SUPPORT_GROUPS_ACCESSING_THIS_S',strtolower($this->facilityType)).'.

                ':''; + // insure we sort the groups by distance if type is facility + if ('facility' == $this->type) + { + // sort the groups + function sortByOrder($a, $b) + { + return $a['order'] - $b['order']; + } + usort($groups, "sortByOrder"); + // make sure we are back with single array + $buketGroups = array(); + foreach ($groups as $group) + { + $buketGroups[] = $group['string']; + } + $groups = $buketGroups; + } + // start the construction of the group display + if ($this->requestView == 'table') + { + // if table view return Unorderd List + return '

                '.$totalGroups.JText::_('COM_SUPPORTGROUPS_RELATED_GROUPS').'

                '.$facilityNotice + . '
                • '.implode('
                • ',$groups).'
                '; + } + // update the lang if needed + if ('facility' == $this->type) + { + $this->langType[$this->type] = $this->facilityType; + } + $this->areaType = (isset($this->areaType)) ? $this->areaType : JText::_('COM_SUPPORTGROUPS_AREA'); + if ('area' == $this->type) + { + $this->langType[$this->type] = $this->areaType; + } + // if not table view return modal + return '' + . '
                ' + . '
                ' + . '' + . '' + . '

                '.$item->{$this->type.'_name'}.' - '.JText::_('COM_SUPPORTGROUPS_GROUPS').'

                ' + . '
                '.$facilityNotice + . '
                • '.implode('
                • ',$groups).'
                ' + . '
                '; + } + + /** + * Clustering control method + * + * @params object $items The Support Group Values + * + * @return void + * + */ + protected function setClustering(&$items) + { + $cluster = $this->app_params->get('cluster', null); + if ($cluster) + { + $cluster_at = $this->app_params->get('cluster_at', 300); + $total = count($items); + if ($cluster_at <= $total) + { + $this->cluster = true; + } + } + } + + /** + * get Map Data (javascript) + * + * @params object $items The Support Group Values + * + * @return void + * + */ + protected function getMapData(&$items) + { + // check the clustering option + $this->setClustering($items); + // now set the map Data + $this->setMapData($items); + // do some hous cleaning + $clusterOptions = ''; + if ($this->cluster) + { + $clusterOptions = '// Options for the clusterer + var clusterOptions = {gridSize: '.$this->app_params->get('clustergridsize', 100).', maxZoom: '.$this->app_params->get('clustermaxzoom', 7).', imagePath: "'.JURI::root() .'media/com_supportgroups/js-marker-cluster/images/m'.'"}; + // Cluster the markers + var markerClusterer = new MarkerClusterer(map, markersArray, clusterOptions);'; + } + // start building the javascript + return ''; + } + + /** + * set Map Data + * + * @params object $items The Support Group Values + * + * @return void + * + */ + protected function setMapData(&$items) + { + // reset all buckets + $markersBucket = array(); + $markerImagesBucket = array(); + $contentBucket = array(); + $facilityMarkers = array(); + foreach ($items as $nr => &$item) + { + // build the facility markers array + if (isset($item->facility_alias) && !isset($facilityMarkers[$item->facility_id]) && isset($item->facility_marker) && (strpos($item->facility_marker,')') !== false)) + { + $facilityMarkers[$item->facility_id] = new stdClass; + // fix the marker string and load the array + $facilityMarkers[$item->facility_id]->id = $item->facility_id; + $facilityMarkers[$item->facility_id]->marker = str_replace(array('(',')'),'',$item->facility_marker); + $facilityMarkers[$item->facility_id]->name = $this->clean($item->facility_name).' - '.$this->clean($item->facility_type); + $facilityMarkers[$item->facility_id]->alias = $item->facility_alias; + $facilityMarkers[$item->facility_id]->phone = $item->facility_phone; + } + // check if group has marker + if (isset($item->marker) && (strpos($item->marker,')') !== false)) + { + if (strpos($item->area_color,'#') === false) + { + $item->area_color = '53B5DE'; + } + else + { + // fix the color string + $item->area_color = trim($item->area_color, '#'); + } + // set the code name + $codeName = SupportgroupsHelper::safeString($item->alias); + // fix the marker string + $item->marker = str_replace(array('(',')'),'',$item->marker); + // marker key + $A = strtoupper($codeName[0]); + $markerKey = $A.$item->area_color; + // load the marker images + $markerImagesBucket[$markerKey] = "var ".$markerKey."Icon = ". + "'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=".$A."|".$item->area_color."|000000';"; + // load the markers + $markersBucket[] = "['".$this->clean($item->name)."', $item->marker, ".$markerKey."Icon]"; + $contentBucket[] = "['

                area_color.";\">".$this->clean($item->name)."

                ".$this->getMapDetailsBlock($item)."
                ', ".$item->id.", 'group']"; + } + } + // now build the facility markers + if (SupportgroupsHelper::checkArray($facilityMarkers)) + { + // load the marker images + $markerImagesBucket['facilityIcon'] = "var facilityIcon = '".JURI::root(). + "media/com_supportgroups/images/facility.png';"; + foreach ($facilityMarkers as $item) + { + // set the code name + $codeName = SupportgroupsHelper::safeString($item->alias); + // load the markers + $markersBucket[] = "['".$item->name."', $item->marker, facilityIcon]"; + // check for details + $details = ''; + if (SupportgroupsHelper::checkString($item->phone)) + { + $details = ''.JText::_('COM_SUPPORTGROUPS_PHONE').': '.$item->phone; + } + $contentBucket[] = "['

                ✚ ".$item->name."

                ".$details."
                ', ".$item->id.", 'facility']"; + } + } + // now set the markers to map + if (SupportgroupsHelper::checkArray($markersBucket)) + { + $this->markerImages = implode("\n ",$markerImagesBucket); + $this->markers = 'markers = ['.implode(',',$markersBucket).'];'; + $this->windowContent = 'var infoWindowContent = ['.implode(',',$contentBucket).'];'; + } + } + + + /** + * set Map Details Block + * + * @params object $object The Support Group Values + * + * @return string The Value String + * + */ + protected function setMapDetailsBlock(&$object) + { + if (!isset($this->mapDetailsBlock[$object->id])) + { + // the display + $diplay = array(); + // the array for the details block + $detailsBlock = array( + 'male' => JText::_('COM_SUPPORTGROUPS_MALES'), + 'female' => JText::_('COM_SUPPORTGROUPS_FEMALES'), + 'male_children' => JText::_('COM_SUPPORTGROUPS_MALE_CHILDREN'), + 'female_children' => JText::_('COM_SUPPORTGROUPS_FEMALE_CHILDREN'), + 'male_art' => JText::_('COM_SUPPORTGROUPS_MALES_ON_ART'), + 'female_art' => JText::_('COM_SUPPORTGROUPS_FEMALES_ON_ART'), + 'members' => JText::_('COM_SUPPORTGROUPS_TOTAL_MEMBERS'), + 'children' => JText::_('COM_SUPPORTGROUPS_TOTAL_CHILDREN'), + 'on_art' => JText::_('COM_SUPPORTGROUPS_TOTAL_ON_ART')); + $special = array('on_art' => 'members', 'male_art' => 'male', 'female_art' => 'female'); + // loop given details block array + foreach ($detailsBlock as $key => $lang) + { + if (isset($object->$key)) + { + if (isset($special[$key])) + { + $temp = round(($object->$key * 100) / $object->{$special[$key]}); + if ($temp > 100) + { + $temp = 100; + } + $diplay[] = $lang.': '.$temp.'%'; + } + else + { + // now build the display + $diplay[] = $lang.': '.$object->$key; + } + } + } + // This is the details block + $this->mapDetailsBlock[$object->id] = '
                • '.implode('
                • ',$diplay).'
                '; + } + return $this->mapDetailsBlock[$object->id]; + } + + /** + * get Map Details Block + * + * @params object $object The Support Group Values + * + * @return string The Value String + * + */ + protected function getMapDetailsBlock(&$object) + { + if (!isset($this->mapDetailsBlock[$object->id])) + { + return $this->setMapDetailsBlock($object); + } + return $this->mapDetailsBlock[$object->id]; + } + + /** + * Clean strings for Javacript + * + * @params string $string The String to Clean + * @params boolean $tags Switch to set if tabs should also be cleaned + * + * @ return string The cleaned string + * + */ + protected function clean($string,$tags = true) + { + return $string; + if ($tags) + { + $fix = array("&" => "&","<" => "<",">" => ">",'"' => '"',"'" => ''',"/" => '/'); + } + else + { + $fix = array("&" => "&",'"' => '"',"'" => '''); + } + // clean the string + return str_replace(array_keys($fix), array_values($fix), $string); + } + + /** + * Get Totals + * + * @params int $id The target id + * + * @ return string The totals object + * + */ + protected function getTotals(&$id) + { + if (!isset($this->totals[$this->type][$id])) + { + // check if we already have set the totals Globally + $this->totals[$this->type][$id] = SupportgroupsHelper::getTotals($this->type,$id); + } + // check again just to make sure + if (isset($this->totals[$this->type][$id]) && SupportgroupsHelper::checkArray($this->totals[$this->type][$id])) + { + // the totals object + $results = new stdClass; + // the totals get array + $keys = array('members','children','on_art','male','female','male_children','female_children','male_art','female_art'); + $special = array('on_art','male_art','female_art'); + foreach ($keys as $key) + { + if (isset($this->totals[$this->type][$id][$key])) + { + if (in_array($key,$special)) + { + $results->$key = round((array_sum($this->totals[$this->type][$id][$key]) * 100) / array_sum($this->totals[$this->type][$id][$key.'_persent'])); + if ($results->$key > 100) + { + $results->$key = 100; + } + $results->$key = $results->$key.'%'; + } + else + { + $results->$key = (int) array_sum($this->totals[$this->type][$id][$key]); + } + } + } + return $results; + } + return false; + } + + /** + * Calculates the great-circle distance between two points, with + * the Vincenty formula. + * + * @param float $latitudeFrom Latitude of start point in [deg decimal] + * @param float $longitudeFrom Longitude of start point in [deg decimal] + * @param float $latitudeTo Latitude of target point in [deg decimal] + * @param float $longitudeTo Longitude of target point in [deg decimal] + * @param string $type The type of return value [km|m|mi] + * @param float $earthRadius Mean earth radius in [m|mi|other] + * + * @return float Distance between points in [$type] (same as earthRadius) + */ + protected function getDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $type = 'km', $earthRadius = 6371000) + { + $type = strtolower($type); + if ('km' == $type || 'm' == $type) // for kilometer & meter + { + $earthRadius = 6371000; + } + elseif ('mi' == $type) // for miles + { + $earthRadius = 3959; + } + // convert from degrees to radians + $latFrom = deg2rad($latitudeFrom); + $lonFrom = deg2rad($longitudeFrom); + $latTo = deg2rad($latitudeTo); + $lonTo = deg2rad($longitudeTo); + + $lonDelta = $lonTo - $lonFrom; + $a = pow(cos($latTo) * sin($lonDelta), 2) + + pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2); + $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta); + + $angle = atan2(sqrt($a), $b); + // set distance + $distance = $angle * $earthRadius; + if ('km' == $type) + { + $km = bcdiv($distance,1000); + if (0 == $km) + { + return '0.'.floor($distance); + } + return $km; + } + return $distance; + } + + /** + * Filter data switches. + * + * @var strings + */ + protected $totals = array(); + protected $country = false; + protected $region = false; + protected $area = false; + protected $facility = false; + protected $group = false; + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the current user for authorisation checks + $this->user = JFactory::getUser(); + $this->levels = $this->user->getAuthorisedViewLevels(); + // Make sure all records load, since no pagination allowed. + $this->setState('list.limit', 0); + // Get a db connection. + $db = JFactory::getDbo(); + // Create a new query object. + $query = $db->getQuery(true); + if ($this->type == 'groups') + { + // Get from #__supportgroups_support_group as a + $query->select($db->quoteName( + array('a.id','a.name','a.alias','a.phone','a.male','a.male_children','a.male_art','a.female','a.female_children','a.female_art','a.marker','a.published','a.ordering'), + array('id','name','alias','phone','male','male_children','male_art','female','female_children','female_art','marker','published','ordering'))); + $query->from($db->quoteName('#__supportgroups_support_group', 'a')); + + // Get from #__supportgroups_area as b + $query->select($db->quoteName( + array('b.id','b.name','b.alias','b.color'), + array('area_id','area_name','area_alias','area_color'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_area', 'b')) . ' ON (' . $db->quoteName('a.area') . ' = ' . $db->quoteName('b.id') . ')'); + + // Get from #__supportgroups_area_type as g + $query->select($db->quoteName( + array('g.name'), + array('area_type'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_area_type', 'g')) . ' ON (' . $db->quoteName('g.id') . ' = ' . $db->quoteName('b.area_type') . ')'); + + // Get from #__supportgroups_region as c + $query->select($db->quoteName( + array('c.id','c.alias','c.name'), + array('region_id','region_alias','region_name'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_region', 'c')) . ' ON (' . $db->quoteName('b.region') . ' = ' . $db->quoteName('c.id') . ')'); + + // Get from #__supportgroups_country as d + $query->select($db->quoteName( + array('d.id','d.name','d.alias'), + array('country_id','country_name','country_alias'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_country', 'd')) . ' ON (' . $db->quoteName('c.country') . ' = ' . $db->quoteName('d.id') . ')'); + + // Get from #__supportgroups_facility as e + $query->select($db->quoteName( + array('e.id','e.alias','e.name','e.phone','e.marker'), + array('facility_id','facility_alias','facility_name','facility_phone','facility_marker'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_facility', 'e')) . ' ON (' . $db->quoteName('a.facility') . ' = ' . $db->quoteName('e.id') . ')'); + + // Get from #__supportgroups_facility_type as f + $query->select($db->quoteName( + array('f.name'), + array('facility_type'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_facility_type', 'f')) . ' ON (' . $db->quoteName('f.id') . ' = ' . $db->quoteName('e.facility_type') . ')'); + } + else + { + // Get from #__supportgroups_support_group as a + $query->select($db->quoteName( + array('a.id','a.name','a.alias','a.phone','a.info','a.male','a.male_children','a.male_art','a.female','a.female_children','a.female_art','a.marker','a.published','a.ordering','a.details'), + array('id','name','alias','phone','info','male','male_children','male_art','female','female_children','female_art','marker','published','ordering','details'))); + $query->from($db->quoteName('#__supportgroups_support_group', 'a')); + + // Get from #__supportgroups_area as b + $query->select($db->quoteName( + array('b.id','b.name','b.alias','b.color','b.details'), + array('area_id','area_name','area_alias','area_color','area_details'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_area', 'b')) . ' ON (' . $db->quoteName('a.area') . ' = ' . $db->quoteName('b.id') . ')'); + + // Get from #__supportgroups_area_type as g + $query->select($db->quoteName( + array('g.name'), + array('area_type'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_area_type', 'g')) . ' ON (' . $db->quoteName('g.id') . ' = ' . $db->quoteName('b.area_type') . ')'); + + // Get from #__supportgroups_region as c + $query->select($db->quoteName( + array('c.id','c.alias','c.name'), + array('region_id','region_alias','region_name'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_region', 'c')) . ' ON (' . $db->quoteName('b.region') . ' = ' . $db->quoteName('c.id') . ')'); + + // Get from #__supportgroups_country as d + $query->select($db->quoteName( + array('d.id','d.name','d.alias','d.codethree','d.codetwo'), + array('country_id','country_name','country_alias','country_codethree','country_codetwo'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_country', 'd')) . ' ON (' . $db->quoteName('c.country') . ' = ' . $db->quoteName('d.id') . ')'); + + // Get from #__supportgroups_facility as e + $query->select($db->quoteName( + array('e.id','e.alias','e.name','e.phone','e.details','e.marker'), + array('facility_id','facility_alias','facility_name','facility_phone','facility_details','facility_marker'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_facility', 'e')) . ' ON (' . $db->quoteName('a.facility') . ' = ' . $db->quoteName('e.id') . ')'); + + // Get from #__supportgroups_facility_type as f + $query->select($db->quoteName( + array('f.name'), + array('facility_type'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_facility_type', 'f')) . ' ON (' . $db->quoteName('f.id') . ' = ' . $db->quoteName('e.facility_type') . ')'); + } + $query->where('a.published = 1'); + $query->where('a.access IN (' . implode(',', $this->levels) . ')'); + $query->order('a.ordering ASC'); + + // filter by country + if (isset($this->country) && $this->country) + { + $query->where('d.id = '. (int) $this->country ); + } + // filter by region + if (isset($this->region) && $this->region) + { + $query->where('c.id = '. (int) $this->region ); + } + // filter by area + if (isset($this->area) && $this->area) + { + $query->where('b.id = '. (int) $this->area ); + } + // filter by facility + if (isset($this->facility) && $this->facility) + { + $query->where('e.id = '. (int) $this->facility ); + } + // filter by facility + if (isset($this->group) && $this->group) + { + $query->where('a.id = '. (int) $this->group ); + } + // filter by ids + if (SupportgroupsHelper::checkArray($this->idArray)) + { + $query->where('a.id IN ('. implode(',',$this->idArray).')' ); + } + + // return the query object + return $query; + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems(&$id = null) + { + $user = JFactory::getUser(); + // check if this user has permission to access items + if (!$user->authorise('site.map.access', 'com_supportgroups')) + { + return false; + } + // load parent items + $items = parent::getItems(); + // make sure we have items to work with + if (isset($items) && SupportgroupsHelper::checkArray($items)) + { + // set totals only if not set already (or is group) + $setTotals = false; + if ('groups' != $this->type && 'group' != $this->type && SupportgroupsHelper::checkString($this->type) && !isset($this->totals[$this->type][$id])) + { + // check if we already have set the totals globally + $this->totals[$this->type][$id] = SupportgroupsHelper::getTotals($this->type,$id); + if (SupportgroupsHelper::checkArray($this->totals[$this->type][$id])) + { + $setTotals = false; + } + else + { + // to avoid the (Cannot use a scalar value as an array) + $this->totals[$this->type][$id] = array(); + $setTotals = true; + $keyBuckets = array('members','children','on_art','male','female','male_children','female_children','male_art','female_art'); + } + } + // Convert the parameter fields into objects. + foreach ($items as $nr => &$item) + { + // Always create a slug for sef URL's + $item->slug = (isset($item->alias)) ? $item->id.':'.$item->alias : $item->id; + if (isset($item->info) && SupportgroupsHelper::checkString($item->info)) + { + // Decode Additional Info + $item->info = json_decode($item->info, true); + // set Additional Info Data to the $item object. + $item->additionalInfo = $this->getAdditionalInfoData($item->info); + } + // do some calculations here + $item->members = (int) $item->male + (int) $item->female; + $item->children = (int) $item->male_children + (int) $item->female_children; + $item->on_art = (int) $item->male_art + (int) $item->female_art; + // only show ART if numbers set + if (0 == $item->on_art) + { + unset($item->on_art); + unset($item->male_art); + unset($item->female_art); + } + if ($setTotals) + { + foreach ($keyBuckets as $nnn => &$key) + { + if (isset($item->$key)) + { + if (!isset($this->totals[$this->type][$id][$key])) + { + // to avoid the (Cannot use a scalar value as an array) + $this->totals[$this->type][$id][$key] = array(); + } + $this->totals[$this->type][$id][$key][] = (int) $item->$key; + + // now count the members who has RT set + if ('on_art' == $key) + { + if (!isset($this->totals[$this->type][$id]['on_art_persent'])) + { + // to avoid the (Cannot use a scalar value as an array) + $this->totals[$this->type][$id]['on_art_persent'] = array(); + } + $this->totals[$this->type][$id]['on_art_persent'][] = (int) $item->members; + } + elseif ('male_art' == $key) + { + if (!isset($this->totals[$this->type][$id]['male_art_persent'])) + { + // to avoid the (Cannot use a scalar value as an array) + $this->totals[$this->type][$id]['male_art_persent'] = array(); + } + $this->totals[$this->type][$id]['male_art_persent'][] = (int) $item->male; + } + elseif ('female_art' == $key) + { + if (!isset($this->totals[$this->type][$id]['female_art_persent'])) + { + // to avoid the (Cannot use a scalar value as an array) + $this->totals[$this->type][$id]['female_art_persent'] = array(); + } + $this->totals[$this->type][$id]['female_art_persent'][] = (int) $item->female; + } + } + } + } + } + if ($setTotals && isset($this->totals[$this->type][$id])) + { + if(!SupportgroupsHelper::setTotals($this->totals[$this->type][$id],$this->type,$id)) + { + return false; + } + } + } + // return items + return $items; + } + + /** + * Method to get an array of Additional Info Objects. + * + * @return mixed An array of Additional Info Objects on success, false on failure. + * + */ + public function getAdditionalInfoData($info) + { + // Get a db connection. + $db = JFactory::getDbo(); + + // Create a new query object. + $query = $db->getQuery(true); + + // Get from #__supportgroups_additional_info as d + $query->select($db->quoteName( + array('d.id','d.alias','d.name','d.details'), + array('id','alias','name','details'))); + $query->from($db->quoteName('#__supportgroups_additional_info', 'd')); + + // Get from #__supportgroups_info_type as g + $query->select($db->quoteName( + array('g.name'), + array('type'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_info_type', 'g')) . ' ON (' . $db->quoteName('d.info_type') . ' = ' . $db->quoteName('g.id') . ')'); + + // Check if $info is an array with values. + if (isset($info) && SupportgroupsHelper::checkArray($info)) + { + $query->where('d.id IN (' . implode(',', $info) . ')'); + } + else + { + return false; + } + + // Reset the query using our newly populated query object. + $db->setQuery($query); + $db->execute(); + + // check if there was data returned + if ($db->getNumRows()) + { + return $db->loadObjectList(); + } + return false; + } + + // Used in supportgroups + /** + * The Ids to fetch with query + * @var array + */ + protected $idArray = array(); + + /** + * Get Rows of Group data + * + * @return string Formatted html table row + */ + public function getColumns(&$page) + { + // return columns + return array( + array( 'name' => 'name', 'title' => JText::_('COM_SUPPORTGROUPS_NAME'), 'type' => 'text', 'sorted' => true, 'direction' => 'ASC'), + array( 'name' => 'phone', 'title' => JText::_('COM_SUPPORTGROUPS_PHONE'), 'type' => 'number', 'breakpoints' => 'xs'), + array( 'name' => 'members', 'title' => JText::_('COM_SUPPORTGROUPS_TOTAL_MEMBERS'), 'type' => 'number', 'breakpoints' => 'xs sm'), + array( 'name' => 'children', 'title' => JText::_('COM_SUPPORTGROUPS_TOTAL_CHILDREN'), 'type' => 'number', 'breakpoints' => 'all'), + array( 'name' => 'on_art', 'title' => JText::_('COM_SUPPORTGROUPS_TOTAL_ON_ART'), 'type' => 'number', 'breakpoints' => 'all'), + array( 'name' => 'male', 'title' => JText::_('COM_SUPPORTGROUPS_MALES'), 'type' => 'number', 'breakpoints' => 'all'), + array( 'name' => 'female', 'title' => JText::_('COM_SUPPORTGROUPS_FEMALES'), 'type' => 'number', 'breakpoints' => 'all'), + array( 'name' => 'male_children', 'title' => JText::_('COM_SUPPORTGROUPS_MALE_CHILDREN'), 'type' => 'number', 'breakpoints' => 'all'), + array( 'name' => 'female_children', 'title' => JText::_('COM_SUPPORTGROUPS_FEMALE_CHILDREN'), 'type' => 'number', 'breakpoints' => 'all'), + array( 'name' => 'male_art', 'title' => JText::_('COM_SUPPORTGROUPS_MALES_ART'), 'type' => 'number', 'breakpoints' => 'all'), + array( 'name' => 'female_art', 'title' => JText::_('COM_SUPPORTGROUPS_FEMALES_ART'), 'type' => 'number', 'breakpoints' => 'all'), + array( 'name' => 'facility_name', 'title' => JText::_('COM_SUPPORTGROUPS_FACILITIES'), 'type' => 'html', 'sort-use' => 'text', 'breakpoints' => 'xs'), + array( 'name' => 'area_name', 'title' => JText::_('COM_SUPPORTGROUPS_AREAS'), 'type' => 'html', 'sort-use' => 'text', 'breakpoints' => 'xs sm'), + array( 'name' => 'region_name', 'title' => JText::_('COM_SUPPORTGROUPS_REGIONS'), 'type' => 'html', 'sort-use' => 'text', 'breakpoints' => 'xs sm'), + array( 'name' => 'country_name', 'title' => JText::_('COM_SUPPORTGROUPS_COUNTRY'), 'type' => 'html', 'sort-use' => 'text', 'breakpoints' => 'xs sm') + ); + } + + /** + * Get Rows of Group data + * + * @return string Formatted html table row + */ + public function getRows(&$key,&$page) + { + $session = JFactory::getSession(); + $groups = $session->get($key, null); + // check if this is valid json + if (SupportgroupsHelper::checkJson($groups)) + { + $array = json_decode($groups, true); + // now check that array is all numbers, and set to int + if (SupportgroupsHelper::checkArray($array)) + { + $this->idArray = $array; + } + // at last lets get started + if (SupportgroupsHelper::checkArray($this->idArray)) + { + $rowArray = array( + 'name','phone','members','children','on_art','male','female','male_children','female_children','male_art','female_art', + 'facility_name','area_name','region_name','country_name' + ); + $clickArray = array( + 'facility_name' => array('id' => 'facility_id','type' => 'facility'), + 'area_name' => array('id' => 'area_id','type' => 'area'), + 'region_name' => array('id' => 'region_id','type' => 'region'), + 'country_name' => array('id' => 'country_id','type' => 'country') + ); + $urlArray = array( + 'facility_name' => 'facility', + 'area_name' => 'area', + 'region_name' => 'region', + 'country_name' => 'country' + ); + // set the map route + $mapRoute = 'index.php?option=com_supportgroups&view=map'; + $items = $this->getItems(); + if ($items) + { + // start row builder + $rows = array(); + foreach($items as $nr => $item) + { + // build the row + $rows[$nr] = array(); + foreach($rowArray as $value) + { + if (isset($item->$value)) + { + // build a click-able button + if (array_key_exists($value, $clickArray)) + { + $typeAdded = ''; + if ('facility_name' == $value && isset($item->facility_type)) + { + $typeAdded = ' data-uk-tooltip="{pos:\'left\'}" title="'.$item->facility_type.'"'; + } + $mapUrl = $mapRoute.'&'.$urlArray[$value].'='.$item->$clickArray[$value]['id']; + $key = $clickArray[$value]['type'].'__'.$item->$clickArray[$value]['id']; + $buttons = '
                ' + .'
                '; + $rows[$nr][$value]['value'] = $buttons; + $rows[$nr][$value]['options'] = array('filterValue' => $item->$value); + } + else + { + $rows[$nr][$value]['value'] = $item->$value; + $rows[$nr][$value]['options'] = array('filterValue' => $item->$value); + } + } + else + { + $rows[$nr][$value] = ''; + } + } + } + } + } + // just return this for now :) + return $rows; + } + + return false; + } + + /** + * Get Table Totals + * + * @return string Formatted html string + */ + public function getTableTotals(&$id,$requestView = 'table') + { + // force totals + $this->type = 'totals'; + // set the request view + $this->requestView = $requestView; + $id = 1; + // get group + $groups = $this->getItems($id); + if (isset($groups) && SupportgroupsHelper::checkArray($groups)) + { + return $this->getDisplay($groups,$id); + } + return false; + } +} diff --git a/site/models/map.php b/site/models/map.php new file mode 100644 index 0000000..ed3af9a --- /dev/null +++ b/site/models/map.php @@ -0,0 +1,141 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the Joomla modellist library +jimport('joomla.application.component.modellist'); + +/** + * Supportgroups Model for Map + */ +class SupportgroupsModelMap extends JModelList +{ + /** + * Model user data. + * + * @var strings + */ + protected $user; + protected $userId; + protected $guest; + protected $groups; + protected $levels; + protected $app; + protected $input; + protected $uikitComp; + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the current user for authorisation checks + $this->user = JFactory::getUser(); + $this->userId = $this->user->get('id'); + $this->guest = $this->user->get('guest'); + $this->groups = $this->user->get('groups'); + $this->authorisedGroups = $this->user->getAuthorisedGroups(); + $this->levels = $this->user->getAuthorisedViewLevels(); + $this->app = JFactory::getApplication(); + $this->input = $this->app->input; + $this->initSet = true; + // Make sure all records load, since no pagination allowed. + $this->setState('list.limit', 0); + // Get a db connection. + $db = JFactory::getDbo(); + + // Create a new query object. + $query = $db->getQuery(true); + + // Get from #__supportgroups_support_group as a + $query->select($db->quoteName( + array('a.id','a.name','a.alias'), + array('id','name','alias'))); + $query->from($db->quoteName('#__supportgroups_support_group', 'a')); + $query->where('a.access IN (' . implode(',', $this->levels) . ')'); + // Get where a.published is 1 + $query->where('a.published = 1'); + + // return the query object + return $query; + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems() + { + $user = JFactory::getUser(); + // check if this user has permission to access item + if (!$user->authorise('site.map.access', 'com_supportgroups')) + { + $app = JFactory::getApplication(); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_NOT_AUTHORISED_TO_VIEW_MAP'), 'error'); + // redirect away to the home page if no access allowed. + $app->redirect(JURI::root()); + return false; + } + // load parent items + $items = parent::getItems(); + + // Get the global params + $globalParams = JComponentHelper::getParams('com_supportgroups', true); + + // Insure all item fields are adapted where needed. + if (SupportgroupsHelper::checkArray($items)) + { + foreach ($items as $nr => &$item) + { + // Always create a slug for sef URL's + $item->slug = (isset($item->alias) && isset($item->id)) ? $item->id.':'.$item->alias : $item->id; + } + } + + // return items + return $items; + } + + + /** + * Get the uikit needed components + * + * @return mixed An array of objects on success. + * + */ + public function getUikitComp() + { + if (isset($this->uikitComp) && SupportgroupsHelper::checkArray($this->uikitComp)) + { + return $this->uikitComp; + } + return false; + } +} diff --git a/site/models/supportgroups.php b/site/models/supportgroups.php new file mode 100644 index 0000000..3978524 --- /dev/null +++ b/site/models/supportgroups.php @@ -0,0 +1,192 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the Joomla modellist library +jimport('joomla.application.component.modellist'); + +/** + * Supportgroups Model for Supportgroups + */ +class SupportgroupsModelSupportgroups extends JModelList +{ + /** + * Model user data. + * + * @var strings + */ + protected $user; + protected $userId; + protected $guest; + protected $groups; + protected $levels; + protected $app; + protected $input; + protected $uikitComp; + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the current user for authorisation checks + $this->user = JFactory::getUser(); + $this->userId = $this->user->get('id'); + $this->guest = $this->user->get('guest'); + $this->groups = $this->user->get('groups'); + $this->authorisedGroups = $this->user->getAuthorisedGroups(); + $this->levels = $this->user->getAuthorisedViewLevels(); + $this->app = JFactory::getApplication(); + $this->input = $this->app->input; + $this->initSet = true; + // Make sure all records load, since no pagination allowed. + $this->setState('list.limit', 0); + // Get a db connection. + $db = JFactory::getDbo(); + + // Create a new query object. + $query = $db->getQuery(true); + + // Filtering. + + $input = array('facility' => 'int','area' => 'int','region' => 'int','country' => 'int'); + $where = array('facility' => 'e.id','area' => 'b.id','region' => 'c.id','country' => 'd.id'); + $filtering = $this->input->getArray($input); + foreach ($filtering as $key => $filter) + { + if ($filter) + { + $query->where($where[$key].' = '. (int) $filter); + } + } + + // Get from #__supportgroups_support_group as a + $query->select($db->quoteName( + array('a.id','a.name','a.alias','a.phone','a.info','a.male','a.male_children','a.male_art','a.female','a.female_children','a.female_art','a.marker','a.published','a.ordering'), + array('id','name','alias','phone','info','male','male_children','male_art','female','female_children','female_art','marker','published','ordering'))); + $query->from($db->quoteName('#__supportgroups_support_group', 'a')); + + // Get from #__supportgroups_area as b + $query->select($db->quoteName( + array('b.id','b.name','b.alias','b.color'), + array('area_id','area_name','area_alias','area_color'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_area', 'b')) . ' ON (' . $db->quoteName('a.area') . ' = ' . $db->quoteName('b.id') . ')'); + + // Get from #__supportgroups_region as c + $query->select($db->quoteName( + array('c.id','c.alias','c.name'), + array('region_id','region_alias','region_name'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_region', 'c')) . ' ON (' . $db->quoteName('b.region') . ' = ' . $db->quoteName('c.id') . ')'); + + // Get from #__supportgroups_country as d + $query->select($db->quoteName( + array('d.id','d.name','d.alias','d.codethree','d.codetwo'), + array('country_id','country_name','country_alias','country_codethree','country_codetwo'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_country', 'd')) . ' ON (' . $db->quoteName('c.country') . ' = ' . $db->quoteName('d.id') . ')'); + + // Get from #__supportgroups_facility as e + $query->select($db->quoteName( + array('e.id','e.alias','e.name','e.phone','e.marker'), + array('facility_id','facility_alias','facility_name','facility_phone','facility_marker'))); + $query->join('LEFT', ($db->quoteName('#__supportgroups_facility', 'e')) . ' ON (' . $db->quoteName('a.facility') . ' = ' . $db->quoteName('e.id') . ')'); + $query->where('a.access IN (' . implode(',', $this->levels) . ')'); + // Get where a.published is 1 + $query->where('a.published = 1'); + $query->order('a.ordering ASC'); + + // return the query object + return $query; + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems() + { + $user = JFactory::getUser(); + // check if this user has permission to access item + if (!$user->authorise('site.supportgroups.access', 'com_supportgroups')) + { + $app = JFactory::getApplication(); + $app->enqueueMessage(JText::_('COM_SUPPORTGROUPS_NOT_AUTHORISED_TO_VIEW_SUPPORTGROUPS'), 'error'); + // redirect away to the home page if no access allowed. + $app->redirect(JURI::root()); + return false; + } + + + // Does not work on all servers + // But may help to insure huge data sets load on map page + ini_set('pcre.backtrack_limit', 10000000); + // load parent items + $items = parent::getItems(); + + // Get the global params + $globalParams = JComponentHelper::getParams('com_supportgroups', true); + + // Insure all item fields are adapted where needed. + if (SupportgroupsHelper::checkArray($items)) + { + foreach ($items as $nr => &$item) + { + // Always create a slug for sef URL's + $item->slug = (isset($item->alias) && isset($item->id)) ? $item->id.':'.$item->alias : $item->id; + if (SupportgroupsHelper::checkJson($item->info)) + { + // Decode info + $item->info = json_decode($item->info, true); + } + $item->members = (int) $item->male + (int) $item->female; + $item->children = (int) $item->male_children + (int) $item->female_children; + $item->on_art = (int) $item->male_art + (int) $item->female_art; + } + } + + // return items + return $items; + } + + + /** + * Get the uikit needed components + * + * @return mixed An array of objects on success. + * + */ + public function getUikitComp() + { + if (isset($this->uikitComp) && SupportgroupsHelper::checkArray($this->uikitComp)) + { + return $this->uikitComp; + } + return false; + } +} diff --git a/site/router.php b/site/router.php index e471ee6..90cd63f 100644 --- a/site/router.php +++ b/site/router.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage router.php @@ -82,11 +82,11 @@ class SupportgroupsRouter extends JComponentRouterBase return $segments; } - if (isset($view) && isset($query['id']) && 0) + if (isset($view) && isset($query['id']) && ($view === 'map' || $view === 'supportgroups')) { if ($mId != (int) $query['id'] || $mView != $view) { - if (0) + if (($view === 'map' || $view === 'supportgroups')) { $segments[] = $view; $id = explode(':', $query['id']); @@ -124,29 +124,53 @@ class SupportgroupsRouter extends JComponentRouterBase * @since 3.3 */ public function parse(&$segments) - { - //var_dump($segments); - //$app = JFactory::getApplication(); - //$menu = $app->getMenu(); - //$item = $menu->getActive(); - + { $count = count($segments); $vars = array(); - - //var_dump($item->query['view']); + //Handle View and Identifier switch($segments[0]) - { + { + case 'map': + $vars['view'] = 'map'; + if (is_numeric($segments[$count-1])) + { + $vars['id'] = (int) $segments[$count-1]; + } + elseif ($segments[$count-1]) + { + $id = $this->getVar('support_group', $segments[$count-1], 'alias', 'id'); + if($id) + { + $vars['id'] = $id; + } + } + break; + case 'supportgroups': + $vars['view'] = 'supportgroups'; + if (is_numeric($segments[$count-1])) + { + $vars['id'] = (int) $segments[$count-1]; + } + elseif ($segments[$count-1]) + { + $id = $this->getVar('support_group', $segments[$count-1], 'alias', 'id'); + if($id) + { + $vars['id'] = $id; + } + } + break; } return $vars; } - protected function getVar($table, $where = null, $whereString = 'user', $what = 'id', $operator = '=', $main = 'supportgroups') + protected function getVar($table, $where = null, $whereString = null, $what = null, $category = false, $operator = '=', $main = 'supportgroups') { - if(!$where) + if(!$where || !$what || !$whereString) { - $where = JFactory::getUser()->id; + return false; } // Get a db connection. $db = JFactory::getDbo(); @@ -154,21 +178,44 @@ class SupportgroupsRouter extends JComponentRouterBase $query = $db->getQuery(true); $query->select($db->quoteName(array($what))); - if ('categories' == $table || 'category' == $table) + if ('categories' == $table || 'category' == $table || $category) { - $query->from($db->quoteName('#__categories')); + $getTable = '#__categories'; + $query->from($db->quoteName($getTable)); } else { - $query->from($db->quoteName('#__'.$main.'_'.$table)); + // we must check if the table exist (TODO not ideal) + $tables = $db->getTableList(); + $app = JFactory::getApplication(); + $prefix = $app->get('dbprefix'); + $check = $prefix.$main.'_'.$table; + if (in_array($check, $tables)) + { + $getTable = '#__'.$main.'_'.$table; + $query->from($db->quoteName($getTable)); + } + else + { + return false; + } } if (is_numeric($where)) { - $query->where($db->quoteName($whereString) . ' '.$operator.' '.(int) $where); + return false; } - elseif (is_string($where)) + elseif ($this->checkString($where)) { - $query->where($db->quoteName($whereString) . ' '.$operator.' '. $db->quote((string)$where)); + // we must first check if this table has the column + $columns = $db->getTableColumns($getTable); + if (isset($columns[$whereString])) + { + $query->where($db->quoteName($whereString) . ' '.$operator.' '. $db->quote((string)$where)); + } + else + { + return false; + } } else { @@ -182,6 +229,15 @@ class SupportgroupsRouter extends JComponentRouterBase } return false; } + + protected function checkString($string) + { + if (isset($string) && is_string($string) && strlen($string) > 0) + { + return true; + } + return false; + } } function SupportgroupsBuildRoute(&$query) @@ -193,7 +249,7 @@ function SupportgroupsBuildRoute(&$query) function SupportgroupsParseRoute($segments) { - $router = new ContentRouter; + $router = new SupportgroupsRouter; return $router->parse($segments); } \ No newline at end of file diff --git a/site/supportgroups.php b/site/supportgroups.php index b18d8d3..860f69c 100644 --- a/site/supportgroups.php +++ b/site/supportgroups.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 1.0.3 - @build 6th March, 2016 + @version 1.0.8 + @build 5th May, 2018 @created 24th February, 2016 @package Support Groups @subpackage supportgroups.php @@ -32,8 +32,8 @@ $document->addStyleSheet('components/com_supportgroups/assets/css/site.css'); $document->addScript('components/com_supportgroups/assets/js/site.js'); // Require helper files -JLoader::register('SupportgroupsHelper', dirname(__FILE__) . '/helpers/supportgroups.php'); -JLoader::register('SupportgroupsHelperRoute', dirname(__FILE__) . '/helpers/route.php'); ###SITE_GLOBAL_EVENT### +JLoader::register('SupportgroupsHelper', dirname(__FILE__) . '/helpers/supportgroups.php'); +JLoader::register('SupportgroupsHelperRoute', dirname(__FILE__) . '/helpers/route.php'); // import joomla controller library jimport('joomla.application.component.controller'); diff --git a/site/views/map/index.html b/site/views/map/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/site/views/map/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/views/map/tmpl/default.php b/site/views/map/tmpl/default.php new file mode 100644 index 0000000..e8af940 --- /dev/null +++ b/site/views/map/tmpl/default.php @@ -0,0 +1,95 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// get modules +$model_behind_map = $this->getModules('behind-map','div','uk-panel'); + +?> +toolbar->render(); ?> +backToRef; ?> +
                +
                +
                +
                +

                ...

                +

                +
                +
                + +
                +
                +
                +
                +
                +
                +
                +
                + +
                +
                +
                +
                +

                +
                +
                + + + +


                +
                behind-map
                + +
                +
                +
                +
                +

                +
                + + diff --git a/site/views/map/tmpl/default.xml b/site/views/map/tmpl/default.xml new file mode 100644 index 0000000..35385fe --- /dev/null +++ b/site/views/map/tmpl/default.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/site/views/map/tmpl/index.html b/site/views/map/tmpl/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/site/views/map/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/views/map/view.html.php b/site/views/map/view.html.php new file mode 100644 index 0000000..f4130e7 --- /dev/null +++ b/site/views/map/view.html.php @@ -0,0 +1,501 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); +jimport('joomla.application.module.helper'); + +/** + * Supportgroups View class for the Map + */ +class SupportgroupsViewMap extends JViewLegacy +{ + // Overwriting JView display method + function display($tpl = null) + { + // get combined params of both component and menu + $this->app = JFactory::getApplication(); + $this->params = $this->app->getParams(); + $this->menu = $this->app->getMenu()->getActive(); + // get the user object + $this->user = JFactory::getUser(); + // Initialise variables. + $this->items = $this->get('Items'); + if (isset($this->items) && SupportgroupsHelper::checkArray($this->items)) + { + // check if clustering of the markers should be set + $this->setClustering($this->items); + } + // set the default display + $this->initScript = "setMapData(1,'totals');"; + $this->backTo = 1; + $this->backType = 'totals'; + $this->groupsFilter = false; + $this->backToRef = ''; + // check if it should be another + $input = array('facility' => 'int','area' => 'int','region' => 'int','country' => 'int'); + $inputLang = array('facility' => JText::_('COM_SUPPORTGROUPS_FACILITY'),'area' => JText::_('COM_SUPPORTGROUPS_AREA'),'region' => JText::_('COM_SUPPORTGROUPS_REGION'),'country' => JText::_('COM_SUPPORTGROUPS_COUNTRY')); + $getDetails = array('facility' => 'facility','area' => 'area','region' => 'region','country' => 'country'); + $filtering = $this->app->input->getArray($input); + foreach ($filtering as $key => $filter) + { + if ($filter) + { + // we can only add one + $this->initScript = "setMapData(".(int) $filter.",'".$getDetails[$key]."');"; + // set main call back + $this->backTo = $filter; + $this->backType = $getDetails[$key]; + // groupsFilter + $this->groupsFilter = '&'.$key.'='.(int)$filter; + // set back to groups + $this->backToRef = ''; + } + } + + // Set the toolbar + $this->addToolBar(); + + // set the document + $this->_prepareDocument(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + parent::display($tpl); + } + + /** + * Get the Google API Key and set to URL if not reached limit + * + * @return string The url to the Google API + */ + public function getGoogleAPI() + { + $api_key = $this->params->get('api-key'); + if ($api_key) + { + return 'https://maps.googleapis.com/maps/api/js?key='.$api_key.'&callback=getMapScript'; + } + return 'https://maps.googleapis.com/maps/api/js?sensor=false&callback=getMapScript'; + } + + /** + * Cluster Switch + * @var boolean + */ + public $cluster = false; + + /** + * Clustering control method + * + * @params object $items The Support Group Values + * + * @return void + * + */ + private function setClustering(&$items) + { + $cluster = $this->params->get('cluster', null); + if ($cluster) + { + $cluster_at = $this->params->get('cluster_at', 300); + $total = count($items); + if ($cluster_at <= $total) + { + $this->cluster = true; + } + } + } + + + /** + * Prepares the document + */ + protected function _prepareDocument() + { + + // always make sure jquery is loaded. + JHtml::_('jquery.framework'); + // Load the header checker class. + require_once( JPATH_COMPONENT_SITE.'/helpers/headercheck.php' ); + // Initialize the header checker. + $HeaderCheck = new supportgroupsHeaderCheck; + + // Load uikit options. + $uikit = $this->params->get('uikit_load'); + // Set script size. + $size = $this->params->get('uikit_min'); + // Set css style. + $style = $this->params->get('uikit_style'); + + // The uikit css. + if ((!$HeaderCheck->css_loaded('uikit.min') || $uikit == 1) && $uikit != 2 && $uikit != 3) + { + $this->document->addStyleSheet(JURI::root(true) .'/media/com_supportgroups/uikit-v2/css/uikit'.$style.$size.'.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + // The uikit js. + if ((!$HeaderCheck->js_loaded('uikit.min') || $uikit == 1) && $uikit != 2 && $uikit != 3) + { + $this->document->addScript(JURI::root(true) .'/media/com_supportgroups/uikit-v2/js/uikit'.$size.'.js', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + } + + // Load the script to find all uikit components needed. + if ($uikit != 2) + { + // Set the default uikit components in this view. + $uikitComp = array(); + $uikitComp[] = 'data-uk-grid'; + $uikitComp[] = 'uk-placeholder'; + } + + // Load the needed uikit components in this view. + if ($uikit != 2 && isset($uikitComp) && SupportgroupsHelper::checkArray($uikitComp)) + { + // load just in case. + jimport('joomla.filesystem.file'); + // loading... + foreach ($uikitComp as $class) + { + foreach (SupportgroupsHelper::$uk_components[$class] as $name) + { + // check if the CSS file exists. + if (JFile::exists(JPATH_ROOT.'/media/com_supportgroups/uikit-v2/css/components/'.$name.$style.$size.'.css')) + { + // load the css. + $this->document->addStyleSheet(JURI::root(true) .'/media/com_supportgroups/uikit-v2/css/components/'.$name.$style.$size.'.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + // check if the JavaScript file exists. + if (JFile::exists(JPATH_ROOT.'/media/com_supportgroups/uikit-v2/js/components/'.$name.$size.'.js')) + { + // load the js. + $this->document->addScript(JURI::root(true) .'/media/com_supportgroups/uikit-v2/js/components/'.$name.$size.'.js', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('type' => 'text/javascript', 'async' => 'async') : true); + } + } + } + } + // load the meta description + if ($this->params->get('menu-meta_description')) + { + $this->document->setDescription($this->params->get('menu-meta_description')); + } + // load the key words if set + if ($this->params->get('menu-meta_keywords')) + { + $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); + } + // check the robot params + if ($this->params->get('robots')) + { + $this->document->setMetadata('robots', $this->params->get('robots')); + } + // Add the JavaScript for JStore + $this->document->addScript(JURI::root() .'media/com_supportgroups/js/jquery.json.min.js'); + $this->document->addScript(JURI::root() .'media/com_supportgroups/js/jstorage.min.js'); + // check if we should use browser storage + $setBrowserStorage = $this->params->get('set_browser_storage', null); + if ($setBrowserStorage) + { + // check what (Time To Live) show we use + $storageTimeToLive = $this->params->get('storage_time_to_live', 'global'); + if ('global' == $storageTimeToLive) + { + // use the global session time + $session = JFactory::getSession(); + // must have it in milliseconds + $expire = ($session->getExpire()*60)* 1000; + } + else + { + // use the Supportgroups Global setting + if (0 != $storageTimeToLive) + { + // this will convert the time into milliseconds + $storageTimeToLive = $storageTimeToLive * 1000; + } + $expire = $storageTimeToLive; + } + } + else + { + // set to use no storage + $expire = 10; + } + // set an error message if needed + $this->document->addScriptDeclaration("var returnError = '

                ".JText::_('COM_SUPPORTGROUPS_AN_ERROR_HAS_OCCURRED')."!

                ".JText::_('COM_SUPPORTGROUPS_PLEASE_TRY_AGAIN_LATER').".

                ';"); + // add group filtering to query + if ($this->groupsFilter) + { + $this->document->addScriptDeclaration("var groupFilter = '".$this->groupsFilter."';"); + } + else + { + $this->document->addScriptDeclaration("var groupFilter = '';"); + } + // Set the Time To Live To JavaScript + $this->document->addScriptDeclaration("var expire = ". (int) $expire.";"); + // Set the the back to global values + $this->document->addScriptDeclaration("var mainBackTo = '".$this->backTo."';"); + $this->document->addScriptDeclaration("var mainBackType = '".$this->backType."';"); + $this->document->addScriptDeclaration("var backTo = '".$this->backTo."';"); + $this->document->addScriptDeclaration("var backType = '".$this->backType."';"); + // check if clustering should be loaded + if ($this->cluster) + { + $this->document->addScript(JURI::root() .'media/com_supportgroups/js-marker-cluster/src/markerclusterer.js'); + } + // add the document default css file + $this->document->addStyleSheet(JURI::root(true) .'/components/com_supportgroups/assets/css/map.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + // Set the Custom CSS script to view + $this->document->addStyleDeclaration(" + #map_wrapper { + height: 600px; + } + + #map_canvas { + width: 100%; + height: 100%; + } + + .mapping { + -webkit-box-shadow: 0 0 13px 2px #CADFAA; + box-shadow: 0 0 13px 2px #CADFAA; + } + + #global { + height: 600px; + } + "); + // Set the Custom JS script to view + $this->document->addScriptDeclaration(" + // set ajax + jQuery.ajaxSetup({ + async: true + }); + // Get Data for Map from Server + function getItemData_server(id, type){ + var getUrl = \"index.php?option=com_supportgroups&task=ajax.getItemData&format=json&requestView=map\"; + if(token.length > 0 && id > 0 && type.length > 0){ + var request = 'token='+token+'&id='+id+'&type='+type; + } + return jQuery.ajax({ + type: 'GET', + url: getUrl, + dataType: 'jsonp', + data: request, + jsonp: 'callback' + }); + } + + // set Data to display + function setMapData(id,type){ + // show getting spinner + jQuery('#getting').show(); + // hide the old data + jQuery('#map_info').hide(); + // first we see if we have local storage of this data + var data = jQuery.jStorage.get(id+'_'+type); + if (!data) { + getItemData_server(id,type).done(function(result) { + if(result.html){ + loadMapData(result.html); + // store the data for next time + jQuery.jStorage.set(id+'_'+type,result.html,{TTL: expire}); + // set global back switch + backSwitch(id,type); + } + else + { + loadMapData(returnError); + } + }); + } else { + loadMapData(data); + // make sure to keep the Time To Live updated + jQuery.jStorage.setTTL(id+'_'+type,expire); + // set global back switch + backSwitch(id,type); + } + } + + // function to set back globals + function backSwitch(id,type) { + // insure we have a global back + if ('group' == type) + { + backTo = id; + backType = 'group'; + } + } + + // function to load the data + function loadMapData(data){ + // hide the getting spinner + jQuery('#getting').hide(); + // set the data + jQuery('#map_info').html(data); + // show the data + jQuery('#map_info').show(); + } + + // Get Map Script + function getMapScript_server(id, type){ + var getUrl = \"index.php?option=com_supportgroups&task=ajax.getItemData&format=json&requestView=map\"; + if(token.length > 0 ){ + var request = 'token='+token+'&id=1&type=groups'+groupFilter; + } + return jQuery.ajax({ + type: 'GET', + url: getUrl, + dataType: 'jsonp', + data: request, + jsonp: 'callback' + }); + } + // get Map script + function getMapScript(){ + getMapScript_server().done(function(result) { + if(result){ + loadMapScript(result); + } + }); + } + + // function to load the data + function loadMapScript(data){ + // set the script + jQuery('#script').html(data); + // then initiate the map + initialize(); + } + + // the isSet function + function isSet(val) + { + if ((val != undefined) && (val != null) && 0 !== val.length){ + return true; + } + return false; + } + "); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + // adding the joomla toolbar to the front + JLoader::register('JToolbarHelper', JPATH_ADMINISTRATOR.'/includes/toolbar.php'); + + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('map'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + // now initiate the toolbar + $this->toolbar = JToolbar::getInstance(); + } + + /** + * Get the modules published in a position + */ + public function getModules($position, $seperator = '', $class = '') + { + // set default + $found = false; + // check if we aleady have these modules loaded + if (isset($this->setModules[$position])) + { + $found = true; + } + else + { + // this is where you want to load your module position + $modules = JModuleHelper::getModules($position); + if ($modules) + { + // set the place holder + $this->setModules[$position] = array(); + foreach($modules as $module) + { + $this->setModules[$position][] = JModuleHelper::renderModule($module); + } + $found = true; + } + } + // check if modules were found + if ($found && isset($this->setModules[$position]) && SupportgroupsHelper::checkArray($this->setModules[$position])) + { + // set class + if (SupportgroupsHelper::checkString($class)) + { + $class = ' class="'.$class.'" '; + } + // set seperating return values + switch($seperator) + { + case 'none': + return implode('', $this->setModules[$position]); + break; + case 'div': + return ''.implode('', $this->setModules[$position]).''; + break; + case 'list': + return '
              • '.implode('
              • ', $this->setModules[$position]).'
              • '; + break; + case 'array': + case 'Array': + return $this->setModules[$position]; + break; + default: + return implode('
                ', $this->setModules[$position]); + break; + + } + } + return false; + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var, $sorten = false, $length = 40) + { + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset, $sorten, $length); + } +} diff --git a/site/views/supportgroups/index.html b/site/views/supportgroups/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/site/views/supportgroups/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/views/supportgroups/tmpl/default.php b/site/views/supportgroups/tmpl/default.php new file mode 100644 index 0000000..399fdcb --- /dev/null +++ b/site/views/supportgroups/tmpl/default.php @@ -0,0 +1,126 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// get modules +$model_behind_map = $this->getModules('behind-table','div','uk-panel'); + +?> +toolbar->render(); ?> +items) && SupportgroupsHelper::checkArray($this->items)): ?> +
                +
                + +
                +
                + + +
                + +
                +
                + + +
                + diff --git a/site/views/supportgroups/tmpl/default.xml b/site/views/supportgroups/tmpl/default.xml new file mode 100644 index 0000000..74a7ab6 --- /dev/null +++ b/site/views/supportgroups/tmpl/default.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/site/views/supportgroups/tmpl/index.html b/site/views/supportgroups/tmpl/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/site/views/supportgroups/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/views/supportgroups/view.html.php b/site/views/supportgroups/view.html.php new file mode 100644 index 0000000..4f5c8c0 --- /dev/null +++ b/site/views/supportgroups/view.html.php @@ -0,0 +1,446 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Support Groups + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); +jimport('joomla.application.module.helper'); + +/** + * Supportgroups View class for the Supportgroups + */ +class SupportgroupsViewSupportgroups extends JViewLegacy +{ + // Overwriting JView display method + function display($tpl = null) + { + // get combined params of both component and menu + $this->app = JFactory::getApplication(); + $this->params = $this->app->getParams(); + $this->menu = $this->app->getMenu()->getActive(); + // get the user object + $this->user = JFactory::getUser(); + // Initialise variables. + $this->items = $this->get('Items'); + if (isset($this->items) && SupportgroupsHelper::checkArray($this->items)) + { + // set the items to Global Arrays and Other + $this->setGlobals($this->items); + } + // turn footable style off (using uk-table style for now) + $this->fooTableStyle = 2; + + // Set the toolbar + $this->addToolBar(); + + // set the document + $this->_prepareDocument(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + throw new Exception(implode("\n", $errors), 500); + } + + parent::display($tpl); + } + + /** + * Checker + * @var string + */ + public $groupBundlesKey; + + /** + * The facilities Array + * @var array + */ + public $facilitiesArray = array(); + + /** + * set Global Arrays and other + * + * @params object $items The Support Group Values + * + * @return void + * + */ + protected function setGlobals(&$items) + { + // set buckets + $bundels = array(); + foreach ($items as $nr => &$item) + { + // build the bundels + $bundels[] = $item->id; + // set some global arrays + if (!isset($this->facilitiesArray[$item->facility_id]) && SupportgroupsHelper::checkString($item->facility_name)) + { + $this->facilitiesArray[$item->facility_id] = $item->facility_name; + } + } + // sort the global arrays + if (SupportgroupsHelper::checkArray($this->facilitiesArray)) + { + sort($this->facilitiesArray); + } + // json encode + $groupBundles = json_encode($bundels); + // set a global key + $this->groupBundlesKey = md5($groupBundles); + // get the session + $session = JFactory::getSession(); + // set the data to session + $session->set($this->groupBundlesKey,$groupBundles); + } + + /** + * Clean strings for Javacript + * + * @params string $string The String to Clean + * @params boolean $tags Switch to set if tabs should also be cleaned + * + * @ return string The cleaned string + * + */ + public function clean($string,$tags = true) + { + if ($tags) + { + $fix = array("&" => "&","<" => "<",">" => ">",'"' => '"',"'" => ''',"/" => '/'); + } + else + { + $fix = array("&" => "&",'"' => '"',"'" => '''); + } + // clean the string + return str_replace(array_keys($fix), array_values($fix), $string); + } + + /** + * Prepares the document + */ + protected function _prepareDocument() + { + + // always make sure jquery is loaded. + JHtml::_('jquery.framework'); + // Load the header checker class. + require_once( JPATH_COMPONENT_SITE.'/helpers/headercheck.php' ); + // Initialize the header checker. + $HeaderCheck = new supportgroupsHeaderCheck; + + // Load uikit options. + $uikit = $this->params->get('uikit_load'); + // Set script size. + $size = $this->params->get('uikit_min'); + // Set css style. + $style = $this->params->get('uikit_style'); + + // The uikit css. + if ((!$HeaderCheck->css_loaded('uikit.min') || $uikit == 1) && $uikit != 2 && $uikit != 3) + { + $this->document->addStyleSheet(JURI::root(true) .'/media/com_supportgroups/uikit-v2/css/uikit'.$style.$size.'.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + } + // The uikit js. + if ((!$HeaderCheck->js_loaded('uikit.min') || $uikit == 1) && $uikit != 2 && $uikit != 3) + { + $this->document->addScript(JURI::root(true) .'/media/com_supportgroups/uikit-v2/js/uikit'.$size.'.js', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + } + + // Add the CSS for Footable + $this->document->addStyleSheet('https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css'); + $this->document->addStyleSheet(JURI::root() .'media/com_supportgroups/footable-v3/css/footable.standalone.min.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + // Add the JavaScript for Footable (adding all funtions) + $this->document->addScript(JURI::root() .'media/com_supportgroups/footable-v3/js/footable.min.js', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/javascript'); + // load the meta description + if ($this->params->get('menu-meta_description')) + { + $this->document->setDescription($this->params->get('menu-meta_description')); + } + // load the key words if set + if ($this->params->get('menu-meta_keywords')) + { + $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords')); + } + // check the robot params + if ($this->params->get('robots')) + { + $this->document->setMetadata('robots', $this->params->get('robots')); + } + // Add the JavaScript for JStore + $this->document->addScript(JURI::root() .'media/com_supportgroups/js/jquery.json.min.js'); + $this->document->addScript(JURI::root() .'media/com_supportgroups/js/jstorage.min.js'); + // check if we should use browser storage + $setBrowserStorage = $this->params->get('set_browser_storage', null); + if ($setBrowserStorage) + { + // check what (Time To Live) show we use + $storageTimeToLive = $this->params->get('storage_time_to_live', 'global'); + if ('global' == $storageTimeToLive) + { + // use the global session time + $session = JFactory::getSession(); + // must have itin milliseconds + $expire = ($session->getExpire()*60)* 1000; + } + else + { + // use the Supportgroups Global setting + if (0 != $storageTimeToLive) + { + // this will convert the time into milliseconds + $storageTimeToLive = $storageTimeToLive * 1000; + } + $expire = $storageTimeToLive; + } + } + else + { + // set to use no storage + $expire = 10; + } + // set an error message if needed + $this->document->addScriptDeclaration("var returnError = '

                ".JText::_('COM_SUPPORTGROUPS_AN_ERROR_HAS_OCCURRED')."!

                ".JText::_('COM_SUPPORTGROUPS_PLEASE_TRY_AGAIN_LATER').".

                ';"); + // Set the Time To Live To JavaScript + $this->document->addScriptDeclaration("var expire = ". (int) $expire.";"); + // Set Language To Javascript + $this->document->addScriptDeclaration("var backToGroup = '". JText::_('COM_SUPPORTGROUPS_RETURN_TO_GROUP')."';"); + $this->document->addScriptDeclaration("var backToDetails = '". JText::_('COM_SUPPORTGROUPS_DETAILS')."';"); + // add the document default css file + $this->document->addStyleSheet(JURI::root(true) .'/components/com_supportgroups/assets/css/supportgroups.css', (SupportgroupsHelper::jVersion()->isCompatible('3.8.0')) ? array('version' => 'auto') : 'text/css'); + // Set the Custom CSS script to view + $this->document->addStyleDeclaration(" + #map_wrapper { + height: 600px; + } + + #map_canvas { + width: 100%; + height: 100%; + } + + .mapping { + -webkit-box-shadow: 0 0 13px 2px #CADFAA; + box-shadow: 0 0 13px 2px #CADFAA; + } + + #global { + height: 600px; + } + "); + // Set the Custom JS script to view + $this->document->addScriptDeclaration(" + // Get Totals from Server + function getTotals_server(){ + var getUrl = \"index.php?option=com_supportgroups&task=ajax.getTableTotals&format=json\"; + var request = 'token='+token+'&id=1'; + return jQuery.ajax({ + type: 'GET', + url: getUrl, + dataType: 'jsonp', + data: request, + jsonp: 'callback' + }); + } + // set Data to display + function getTotals(){ + // first we see if we have local storage of this data + var data = jQuery.jStorage.get('totals'); + if (!data) { + getTotals_server().done(function(result) { + if(result.html){ + setTotals(result.html); + // store the data for next time + jQuery.jStorage.set('totals',result.html,{TTL: expire}); + } + else + { + setTotals(returnError); + } + }); + } else { + setTotals(data); + // make sure to keep the Time To Live updated + jQuery.jStorage.setTTL('totals',expire); + } + } + // set the totals + function setTotals(totals) { + jQuery('#totals').html(totals); + } + // Get Data for Item Type & Id from Server + function getItemData_server(id, type){ + var getUrl = \"index.php?option=com_supportgroups&task=ajax.getItemData&format=json&requestView=table\"; + if(token.length > 0 && id > 0 && type.length > 0){ + var request = 'token='+token+'&id='+id+'&type='+type; + } + return jQuery.ajax({ + type: 'GET', + url: getUrl, + dataType: 'jsonp', + data: request, + jsonp: 'callback' + }); + } + // get Data to display + function getItemData(key){ + // hide old data and add spnner + jQuery('#info').hide(); + jQuery('#modal-spin').show(); + // first we see if we have local storage of this data + var data = jQuery.jStorage.get(key); + if (!data) { + // set id type + var arr = key.split('__'); + getItemData_server(arr[1], arr[0]).done(function(result) { + if(result.html){ + setItem(result.html, key); + // store the data for next time + jQuery.jStorage.set(key,result.html,{TTL: expire}); + } + else + { + // set an error if item date could not return + setItem(returnError, key); + } + }); + } else { + setItem(data, key); + // make sure to keep the Time To Live updated + jQuery.jStorage.setTTL(key,expire); + } + } + // set the item + function setItem(data, key) { + jQuery('#info').html(data); + // show data and hide spnner + jQuery('#modal-spin').hide(); + jQuery('#info').show(); + } + // the isSet function + function isSet(val) + { + if ((val != undefined) && (val != null) && 0 !== val.length){ + return true; + } + return false; + } + "); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + // adding the joomla toolbar to the front + JLoader::register('JToolbarHelper', JPATH_ADMINISTRATOR.'/includes/toolbar.php'); + + // set help url for this view if found + $help_url = SupportgroupsHelper::getHelpUrl('supportgroups'); + if (SupportgroupsHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_SUPPORTGROUPS_HELP_MANAGER', false, $help_url); + } + // now initiate the toolbar + $this->toolbar = JToolbar::getInstance(); + } + + /** + * Get the modules published in a position + */ + public function getModules($position, $seperator = '', $class = '') + { + // set default + $found = false; + // check if we aleady have these modules loaded + if (isset($this->setModules[$position])) + { + $found = true; + } + else + { + // this is where you want to load your module position + $modules = JModuleHelper::getModules($position); + if ($modules) + { + // set the place holder + $this->setModules[$position] = array(); + foreach($modules as $module) + { + $this->setModules[$position][] = JModuleHelper::renderModule($module); + } + $found = true; + } + } + // check if modules were found + if ($found && isset($this->setModules[$position]) && SupportgroupsHelper::checkArray($this->setModules[$position])) + { + // set class + if (SupportgroupsHelper::checkString($class)) + { + $class = ' class="'.$class.'" '; + } + // set seperating return values + switch($seperator) + { + case 'none': + return implode('', $this->setModules[$position]); + break; + case 'div': + return ''.implode('', $this->setModules[$position]).''; + break; + case 'list': + return '
              • '.implode('
              • ', $this->setModules[$position]).'
              • '; + break; + case 'array': + case 'Array': + return $this->setModules[$position]; + break; + default: + return implode('
                ', $this->setModules[$position]); + break; + + } + } + return false; + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var, $sorten = false, $length = 40) + { + // use the helper htmlEscape method instead. + return SupportgroupsHelper::htmlEscape($var, $this->_charset, $sorten, $length); + } +} diff --git a/supportgroups.xml b/supportgroups.xml index 8573f40..bdc1175 100644 --- a/supportgroups.xml +++ b/supportgroups.xml @@ -1,17 +1,17 @@ COM_SUPPORTGROUPS - 6th March, 2016 + 5th May, 2018 Llewellyn van der Merwe - llewellyn@vdm.io + joomla@vdm.io http://www.vdm.io Copyright (C) 2015. All Rights Reserved GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html - 1.0.3 + 1.0.8 Support Groups (v.1.0.3) +

                Support Groups (v.1.0.8)

                -

                Support Groups

                +

                Support Groups component adds the ability to your Joomla website to manage various support groups and their related details. Integration with Google Maps is one of its main features.

                Created by Llewellyn van der Merwe
                Development started 24th February, 2016

                ]]>
                @@ -37,8 +37,9 @@ js css images - uikit - footable + js-marker-cluster + uikit-v2 + footable-v3 @@ -62,7 +63,7 @@ - language/en-GB/en-GB.com_supportgroups.ini + language/en-GB/en-GB.com_supportgroups.ini language/en-GB/en-GB.com_supportgroups.sys.ini @@ -72,16 +73,17 @@ COM_SUPPORTGROUPS_MENU_SUPPORT_GROUPS COM_SUPPORTGROUPS_MENU_PAYMENTS - COM_SUPPORTGROUPS_MENU_CLINICS - COM_SUPPORTGROUPS_MENU_LOCATIONS + COM_SUPPORTGROUPS_MENU_FACILITIES + COM_SUPPORTGROUPS_MENU_AREAS COM_SUPPORTGROUPS_MENU_REGIONS access.xml config.xml - controller.php + controller.php###WHMCS_ENCRYPT_FILE### index.html - supportgroups.php + supportgroups.php + README.txt assets controllers helpers @@ -93,12 +95,12 @@ - language/en-GB/en-GB.com_supportgroups.ini + language/en-GB/en-GB.com_supportgroups.ini language/en-GB/en-GB.com_supportgroups.sys.ini - https://www.vdm.io/updates/supportgroups_update_server.xml + https://raw.githubusercontent.com/namibia/Joomla-Support-Groups/master/supportgroups_update_server.xml
                \ No newline at end of file diff --git a/supportgroups_update_server.xml b/supportgroups_update_server.xml new file mode 100644 index 0000000..46b3bff --- /dev/null +++ b/supportgroups_update_server.xml @@ -0,0 +1,155 @@ + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.0 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.1 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.2 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.3 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.4 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.5 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.6 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.7 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + + Support Groups + Support Groups + com_supportgroups + component + 1.0.8 + http://www.vdm.io + + http://domain.com/demo.zip + + + stable + + Llewellyn van der Merwe + http://www.vdm.io + + + \ No newline at end of file