diff --git a/README.md b/README.md index 00d14b0d2..84601390b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Component Builder (2.1.2) +# Component Builder (2.1.3) This is a [Joomla 3.x] (http://www.joomla.org/) component. @@ -32,22 +32,22 @@ Would you require more help VDM.io has a number of support plans available [visi + *Author*: [Llewellyn van der Merwe] (mailto:info@vdm.io) + *Name*: [Component Builder] (https://www.vdm.io/joomla-component-builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 19th March, 2016 -+ *Version*: 2.1.2 ++ *Last Build*: 22nd April, 2016 ++ *Version*: 2.1.3 + *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 -**224 Hours** or **28 Eight Hour Days** (actual time the author saved - +**225 Hours** or **28 Eight Hour Days** (actual time the author saved - due to [Automated Component Builder] (https://www.vdm.io/joomla-component-builder)) > (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.) -+ *Line count*: **80468** -+ *File count*: **494** -+ *Folder count*: **97** ++ *Line count*: **80585** ++ *File count*: **495** ++ *Folder count*: **98** **148 Hours** or **19 Eight Hour Days** (the actual time the author spent) @@ -57,7 +57,7 @@ due to [Automated Component Builder] (https://www.vdm.io/joomla-component-builde > **mapping @22hours** = codingtime / 10; > **office @37hours** = codingtime / 6;) -**372 Hours** or **47 Eight Hour Days** +**373 Hours** or **47 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**, diff --git a/admin/assets/css/admin.css b/admin/assets/css/admin.css index 4cbf5e681..24f0ab9ad 100644 --- a/admin/assets/css/admin.css +++ b/admin/assets/css/admin.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin.css diff --git a/admin/assets/css/admin_view.css b/admin/assets/css/admin_view.css index bcb8c48a9..3c53aa0ed 100644 --- a/admin/assets/css/admin_view.css +++ b/admin/assets/css/admin_view.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_view.css diff --git a/admin/assets/css/admin_views.css b/admin/assets/css/admin_views.css index 880f18bdd..88eb1849f 100644 --- a/admin/assets/css/admin_views.css +++ b/admin/assets/css/admin_views.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_views.css diff --git a/admin/assets/css/component.css b/admin/assets/css/component.css index 9d222de83..c0212c66b 100644 --- a/admin/assets/css/component.css +++ b/admin/assets/css/component.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage component.css diff --git a/admin/assets/css/components.css b/admin/assets/css/components.css index 5b6c4f335..40b2b59b9 100644 --- a/admin/assets/css/components.css +++ b/admin/assets/css/components.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage components.css diff --git a/admin/assets/css/custom_admin_view.css b/admin/assets/css/custom_admin_view.css index 393681222..5cb92915b 100644 --- a/admin/assets/css/custom_admin_view.css +++ b/admin/assets/css/custom_admin_view.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_view.css diff --git a/admin/assets/css/custom_admin_views.css b/admin/assets/css/custom_admin_views.css index 272dde135..35467bb1c 100644 --- a/admin/assets/css/custom_admin_views.css +++ b/admin/assets/css/custom_admin_views.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_views.css diff --git a/admin/assets/css/dashboard.css b/admin/assets/css/dashboard.css index 3230c41ef..8fcf66d45 100644 --- a/admin/assets/css/dashboard.css +++ b/admin/assets/css/dashboard.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dashboard.css diff --git a/admin/assets/css/dynamic_get.css b/admin/assets/css/dynamic_get.css index f7bd72d5b..6804c1936 100644 --- a/admin/assets/css/dynamic_get.css +++ b/admin/assets/css/dynamic_get.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamic_get.css diff --git a/admin/assets/css/dynamic_gets.css b/admin/assets/css/dynamic_gets.css index 4b1833b09..c26ecc131 100644 --- a/admin/assets/css/dynamic_gets.css +++ b/admin/assets/css/dynamic_gets.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamic_gets.css diff --git a/admin/assets/css/field.css b/admin/assets/css/field.css index 6d346144f..4d68695f7 100644 --- a/admin/assets/css/field.css +++ b/admin/assets/css/field.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage field.css diff --git a/admin/assets/css/fields.css b/admin/assets/css/fields.css index 3faabe414..749e4c363 100644 --- a/admin/assets/css/fields.css +++ b/admin/assets/css/fields.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fields.css diff --git a/admin/assets/css/fieldtype.css b/admin/assets/css/fieldtype.css index 895d49fe4..a81602a8d 100644 --- a/admin/assets/css/fieldtype.css +++ b/admin/assets/css/fieldtype.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtype.css diff --git a/admin/assets/css/fieldtypes.css b/admin/assets/css/fieldtypes.css index 8862685ba..28fadb308 100644 --- a/admin/assets/css/fieldtypes.css +++ b/admin/assets/css/fieldtypes.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtypes.css diff --git a/admin/assets/css/help_document.css b/admin/assets/css/help_document.css index f7c194c9a..6489bc7ec 100644 --- a/admin/assets/css/help_document.css +++ b/admin/assets/css/help_document.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help_document.css diff --git a/admin/assets/css/help_documents.css b/admin/assets/css/help_documents.css index 133676385..0ac5dd56c 100644 --- a/admin/assets/css/help_documents.css +++ b/admin/assets/css/help_documents.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help_documents.css diff --git a/admin/assets/css/layout.css b/admin/assets/css/layout.css index 41cfffdb4..6ddacfd73 100644 --- a/admin/assets/css/layout.css +++ b/admin/assets/css/layout.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage layout.css diff --git a/admin/assets/css/layouts.css b/admin/assets/css/layouts.css index 5360b9b90..56c1a8487 100644 --- a/admin/assets/css/layouts.css +++ b/admin/assets/css/layouts.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage layouts.css diff --git a/admin/assets/css/site_view.css b/admin/assets/css/site_view.css index 47c0fd266..3fde0693f 100644 --- a/admin/assets/css/site_view.css +++ b/admin/assets/css/site_view.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_view.css diff --git a/admin/assets/css/site_views.css b/admin/assets/css/site_views.css index 3c3289ed9..a6b751225 100644 --- a/admin/assets/css/site_views.css +++ b/admin/assets/css/site_views.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_views.css diff --git a/admin/assets/css/snippet.css b/admin/assets/css/snippet.css index b038c7b5c..0f0aca07c 100644 --- a/admin/assets/css/snippet.css +++ b/admin/assets/css/snippet.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippet.css diff --git a/admin/assets/css/snippets.css b/admin/assets/css/snippets.css index 0f9025e8c..f44c3bad2 100644 --- a/admin/assets/css/snippets.css +++ b/admin/assets/css/snippets.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippets.css diff --git a/admin/assets/css/template.css b/admin/assets/css/template.css index 7dc2bab92..ea4f4b71c 100644 --- a/admin/assets/css/template.css +++ b/admin/assets/css/template.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage template.css diff --git a/admin/assets/css/templates.css b/admin/assets/css/templates.css index 602ceec21..cc406892b 100644 --- a/admin/assets/css/templates.css +++ b/admin/assets/css/templates.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage templates.css diff --git a/admin/compiler/joomla_3/Helper.php b/admin/compiler/joomla_3/Helper.php index aec2c7b32..390cf743d 100644 --- a/admin/compiler/joomla_3/Helper.php +++ b/admin/compiler/joomla_3/Helper.php @@ -201,7 +201,7 @@ abstract class ###Component###Helper $query = $db->getQuery(true); $query->select(array('a.published')); $query->from('#__###component###_'.$type.' AS a'); - $query->where('a.id = '.$id); + $query->where('a.id = '. (int) $id); $query->where('a.published = 1'); $db->setQuery($query); $db->execute(); @@ -219,7 +219,7 @@ abstract class ###Component###Helper $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(); diff --git a/admin/compiler/joomla_3/Helper_email.php b/admin/compiler/joomla_3/Helper_email.php new file mode 100644 index 000000000..ce650c211 --- /dev/null +++ b/admin/compiler/joomla_3/Helper_email.php @@ -0,0 +1,261 @@ + +*  @copyright Copyright (C) 2014. All Rights Reserved +*  @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html +* +**/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); +?> +###BOM### + +/** + * ###Component### component email helper + */ +abstract class ###Component###Email +{ + /** + * Configuraiton object + * + * @var JConfig + */ + public static $config = null; + + /** + * Mailer object + * + * @var JMail + */ + public static $mailer = null; + + /** + * Get a configuration object + * + */ + public static function getConfig() + { + if (!self::$config) + { + self::$config = JComponentHelper::getParams('com_###component###'); + } + + return self::$config; + } + + /** + * Get a mailer object. + * + * Returns the global {@link JMail} object, only creating it if it doesn't already exist. + * + * @return JMail object + * + * @see JMail + */ + public static function getMailer() + { + if (!self::$mailer) + { + self::$mailer = self::createMailer(); + } + + $copy = clone self::$mailer; + + return $copy; + } + + /** + * Create a mailer object + * + * @return JMail object + * + * @see JMail + */ + protected static function createMailer() + { + // set component params + $conf = self::getConfig(); + + // now load the mailer + $mailer = $conf->get('mailer', 'global'); + + // Create a JMail object + $mail = JMail::getInstance(); + + // check if set to global + if ('global' == $mailer) + { + // get the global details + $globalConf = JFactory::getConfig(); + + $mailer = $globalConf->get('mailer'); + $smtpauth = ($globalConf->get('smtpauth') == 0) ? null : 1; + $smtpuser = $globalConf->get('smtpuser'); + $smtppass = $globalConf->get('smtppass'); + $smtphost = $globalConf->get('smtphost'); + $smtpsecure = $globalConf->get('smtpsecure'); + $smtpport = $globalConf->get('smtpport'); + $sendmail = $globalConf->get('sendmail'); + $mailfrom = $globalConf->get('mailfrom'); + $fromname = $globalConf->get('fromname'); + } + else + { + $smtpauth = ($conf->get('smtpauth') == 0) ? null : 1; + $smtpuser = $conf->get('smtpuser'); + $smtppass = $conf->get('smtppass'); + $smtphost = $conf->get('smtphost'); + $smtpsecure = $conf->get('smtpsecure'); + $smtpport = $conf->get('smtpport'); + $sendmail = $conf->get('sendmail'); + $mailfrom = $conf->get('mailfrom'); + $fromname = $conf->get('fromname'); + $mailreply = $conf->get('mailreply'); + $replyname = $conf->get('replyname'); + + // set the global reply-to + if ($mailreply && $fromname) + { + $mail->ClearReplyTos(); + $mail->addReplyTo( array( $mailreply, $replyname ) ); + } + } + + // Set global sender + $mail->setSender(array($mailfrom, $fromname)); + + // Default mailer is to use PHP's mail function + switch ($mailer) + { + case 'smtp': + // set the SMTP option + $mail->useSMTP($smtpauth, $smtphost, $smtpuser, $smtppass, $smtpsecure, $smtpport); + break; + + case 'sendmail': + // set the sendmail option + $mail->useSendmail($sendmail); + $mail->IsSendmail(); + break; + + default: + $mail->IsMail(); + break; + } + + return $mail; + } + + /** + * Send an email + * + * @return bool on success + * + */ + public static function send($recipient, $subject, $body, $textonly, $mode = 0, $bounce_email = null, $idsession = null, $mailreply = null, $replyname = null , $mailfrom = null, $fromname = null, $cc = null, $bcc = null, $attachment = null, $embeded = null , $embeds = null) + { + + // Get a JMail instance + $mail = self::getMailer(); + + // set component params + $conf = self::getConfig(); + + // do some house cleaning + $mail->ClearReplyTos(); + + // set if we have override + if ($mailfrom && $fromname) + { + $mail->setSender(array($mailfrom, $fromname)); + } + + // load the bounce email as sender if set + if (!is_null($bounce_email)) + { + + $mail->Sender = $bounce_email; + } + + // Add tag to email to identify it + if (!is_null($idsession)) + { + $mail->addCustomHeader('X-VDMmethodID:'.$idsession); + } + + // set the subject & Body + $mail->setSubject($subject); + $mail->setBody($body); + + // Are we sending the email as HTML? + if ($mode) + { + $mail->IsHTML(true); + $mail->AltBody = $textonly; + } + + //embed images + if ($embeded) + { + if(###Component###Helper::checkArray($embeds)) + { + foreach($embeds as $embed) + { + $mail->AddEmbeddedImage($embed->Path,$embed->FileName); + } + } + } + + $mail->addRecipient($recipient); + $mail->addCC($cc); + $mail->addBCC($bcc); + $mail->addAttachment($attachment); + + // Take care of reply email addresses + if (is_array($mailreply)) + { + $mail->ClearReplyTos(); + $numReplyTo = count($mailreply); + for ($i=0; $i < $numReplyTo; $i++) + { + $mail->addReplyTo( array($mailreply[$i], $replyname[$i]) ); + } + } + elseif (!empty($mailreply)) + { + $mail->ClearReplyTos(); + $mail->addReplyTo( array( $mailreply, $replyname ) ); + } + + // check if we can add the DKIM to email + if ($conf->get('enable_dkim')) + { + if (!empty($conf->get('dkim_domain')) && !empty($conf->get('dkim_selector')) && !empty($conf->get('dkim_private')) && !empty($conf->get('dkim_public'))) + { + $mail->DKIM_domain = $conf->get('dkim_domain'); + $mail->DKIM_selector = $conf->get('dkim_selector'); + $mail->DKIM_identity = $conf->get('dkim_identity'); + $mail->DKIM_passphrase = $conf->get('dkim_passphrase'); + + $tmp = tempnam(sys_get_temp_dir(), 'VDM'); + $h = fopen($tmp, 'w'); + fwrite($h, $conf->get('dkim_private')); + fclose($h); + $mail->DKIM_private = $tmp; + } + } + + $sendmail = $mail->Send(); + + if ($conf->get('enable_dkim') && !empty($conf->get('dkim_domain')) && !empty($conf->get('dkim_selector')) && !empty($conf->get('dkim_private')) && !empty($conf->get('dkim_public'))) + { + @unlink($tmp); + } + + return $sendmail; + } +} diff --git a/admin/compiler/joomla_3/Helper_site.php b/admin/compiler/joomla_3/Helper_site.php index 0d0ced40a..336a4865a 100644 --- a/admin/compiler/joomla_3/Helper_site.php +++ b/admin/compiler/joomla_3/Helper_site.php @@ -332,6 +332,45 @@ abstract class ###Component###Helper } 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('#__###component###_'.$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 diff --git a/admin/compiler/joomla_3/JViewLegacy_custom_admin.php b/admin/compiler/joomla_3/JViewLegacy_custom_admin.php index f5ee5d62e..a12aa0f86 100644 --- a/admin/compiler/joomla_3/JViewLegacy_custom_admin.php +++ b/admin/compiler/joomla_3/JViewLegacy_custom_admin.php @@ -67,7 +67,7 @@ class ###Component###View###SView### extends JViewLegacy // hide the main menu $this->app->input->set('hidemainmenu', true); // set the title - if ($this->item->name) + if (isset($this->item->name) && $this->item->name) { $title = $this->item->name; } diff --git a/admin/compiler/joomla_3/component_admin.php b/admin/compiler/joomla_3/component_admin.php index b5cb560c6..6283be0a6 100644 --- a/admin/compiler/joomla_3/component_admin.php +++ b/admin/compiler/joomla_3/component_admin.php @@ -46,7 +46,7 @@ $document->addStyleSheet('components/com_###component###/assets/css/admin.css'); $document->addScript('components/com_###component###/assets/js/admin.js'); // require helper files -JLoader::register('###Component###Helper', dirname(__FILE__) . '/helpers/###component###.php'); +JLoader::register('###Component###Helper', dirname(__FILE__) . '/helpers/###component###.php'); ###HELPER_EMAIL### JLoader::register('JHtmlBatch_', dirname(__FILE__) . '/helpers/html/batch_.php');###LICENSE_LOCKED_INT### ###ADMIN_GLOBAL_EVENT### // import joomla controller library diff --git a/admin/compiler/joomla_3/component_site.php b/admin/compiler/joomla_3/component_site.php index 0b86a8725..0a7a8d5cf 100644 --- a/admin/compiler/joomla_3/component_site.php +++ b/admin/compiler/joomla_3/component_site.php @@ -35,7 +35,7 @@ $document->addStyleSheet('components/com_###component###/assets/css/site.css'); $document->addScript('components/com_###component###/assets/js/site.js'); // Require helper files -JLoader::register('###Component###Helper', dirname(__FILE__) . '/helpers/###component###.php'); +JLoader::register('###Component###Helper', dirname(__FILE__) . '/helpers/###component###.php'); ###HELPER_EMAIL### JLoader::register('###Component###HelperRoute', dirname(__FILE__) . '/helpers/route.php');###LICENSE_LOCKED_INT### ###SITE_GLOBAL_EVENT### // import joomla controller library diff --git a/admin/compiler/joomla_3/settings.json b/admin/compiler/joomla_3/settings.json index 3d2824351..d089186f2 100644 --- a/admin/compiler/joomla_3/settings.json +++ b/admin/compiler/joomla_3/settings.json @@ -225,6 +225,11 @@ "rename": false, "type": "encrypt" }, + "Helper_email.php": { + "path": "c0mp0n3nt/admin/helpers", + "rename": "Helper_", + "type": "emailer" + }, "DASHJControllerAdmin.php": { "path": "c0mp0n3nt/admin/controllers", "rename": "DASHJControllerAdmin", diff --git a/admin/componentbuilder.php b/admin/componentbuilder.php index eb46cf2f0..bb80e9c07 100644 --- a/admin/componentbuilder.php +++ b/admin/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php @@ -44,7 +44,7 @@ $document->addStyleSheet('components/com_componentbuilder/assets/css/admin.css') $document->addScript('components/com_componentbuilder/assets/js/admin.js'); // require helper files -JLoader::register('ComponentbuilderHelper', dirname(__FILE__) . '/helpers/componentbuilder.php'); +JLoader::register('ComponentbuilderHelper', dirname(__FILE__) . '/helpers/componentbuilder.php'); JLoader::register('JHtmlBatch_', dirname(__FILE__) . '/helpers/html/batch_.php'); // import joomla controller library diff --git a/admin/config.xml b/admin/config.xml index 008b5760b..f0ddc81f3 100644 --- a/admin/config.xml +++ b/admin/config.xml @@ -1,6 +1,8 @@
diff --git a/admin/controller.php b/admin/controller.php index 885c14b93..fea406cd0 100644 --- a/admin/controller.php +++ b/admin/controller.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage controller.php diff --git a/admin/controllers/admin_view.php b/admin/controllers/admin_view.php index 8408cdafe..30301e1c0 100644 --- a/admin/controllers/admin_view.php +++ b/admin/controllers/admin_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_view.php diff --git a/admin/controllers/admin_views.php b/admin/controllers/admin_views.php index c311b6e47..cb306076d 100644 --- a/admin/controllers/admin_views.php +++ b/admin/controllers/admin_views.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_views.php diff --git a/admin/controllers/ajax.json.php b/admin/controllers/ajax.json.php index 22d8f0608..53abc5416 100644 --- a/admin/controllers/ajax.json.php +++ b/admin/controllers/ajax.json.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage ajax.json.php @@ -70,6 +70,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'tableColumns': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $tableValue = $jinput->get('table', NULL, 'WORD'); if($tableValue && $user->id != 0) { @@ -83,6 +84,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -103,6 +108,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'fieldSelectOptions': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $idValue = $jinput->get('id', NULL, 'INT'); if($idValue && $user->id != 0) { @@ -116,6 +122,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -136,6 +146,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'layoutDetails': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $idValue = $jinput->get('id', null, 'INT'); if($idValue && $user->id != 0) { @@ -149,6 +160,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -169,6 +184,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'templateDetails': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $idValue = $jinput->get('id', null, 'INT'); if($idValue && $user->id != 0) { @@ -182,6 +198,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -202,6 +222,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'snippetDetails': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $idValue = $jinput->get('id', NULL, 'INT'); if($idValue && $user->id != 0) { @@ -215,6 +236,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -235,6 +260,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'dynamicValues': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $idValue = $jinput->get('id', NULL, 'INT'); $viewValue = $jinput->get('view', NULL, 'WORD'); if($idValue && $viewValue && $user->id != 0) @@ -249,6 +275,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -269,6 +299,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'dynamicFormDetails': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $idValue = $jinput->get('id', NULL, 'INT'); if($idValue && $user->id != 0) { @@ -282,6 +313,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -302,6 +337,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'dbTableColumns': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $nameValue = $jinput->get('name', NULL, 'WORD'); $asValue = $jinput->get('as', NULL, 'WORD'); $typeValue = $jinput->get('type', NULL, 'INT'); @@ -317,6 +353,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -337,6 +377,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'viewTableColumns': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $idValue = $jinput->get('id', NULL, 'INT'); $asValue = $jinput->get('as', NULL, 'WORD'); $typeValue = $jinput->get('type', NULL, 'INT'); @@ -352,6 +393,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; @@ -372,6 +417,7 @@ class ComponentbuilderControllerAjax extends JControllerLegacy case 'fieldOptions': try { + $returnRaw = $jinput->get('raw', false, 'BOOLEAN'); $idValue = $jinput->get('id', NULL, 'INT'); if($idValue && $user->id != 0) { @@ -385,6 +431,10 @@ class ComponentbuilderControllerAjax extends JControllerLegacy { echo $_GET['callback'] . "(".json_encode($result).");"; } + elseif($returnRaw) + { + echo json_encode($result); + } else { echo "(".json_encode($result).");"; diff --git a/admin/controllers/compiler.php b/admin/controllers/compiler.php index f0cee57a8..2514a3da3 100644 --- a/admin/controllers/compiler.php +++ b/admin/controllers/compiler.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage compiler.php diff --git a/admin/controllers/component.php b/admin/controllers/component.php index 58e362c08..1efce8023 100644 --- a/admin/controllers/component.php +++ b/admin/controllers/component.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage component.php diff --git a/admin/controllers/componentbuilder.php b/admin/controllers/componentbuilder.php index 587a4ca85..4367a2739 100644 --- a/admin/controllers/componentbuilder.php +++ b/admin/controllers/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php diff --git a/admin/controllers/components.php b/admin/controllers/components.php index fb8fde1b6..42ccb83ee 100644 --- a/admin/controllers/components.php +++ b/admin/controllers/components.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage components.php diff --git a/admin/controllers/custom_admin_view.php b/admin/controllers/custom_admin_view.php index 47525b330..722ec883c 100644 --- a/admin/controllers/custom_admin_view.php +++ b/admin/controllers/custom_admin_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_view.php diff --git a/admin/controllers/custom_admin_views.php b/admin/controllers/custom_admin_views.php index e7d0162b1..bd394f538 100644 --- a/admin/controllers/custom_admin_views.php +++ b/admin/controllers/custom_admin_views.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_views.php diff --git a/admin/controllers/dynamic_get.php b/admin/controllers/dynamic_get.php index 4cb40f689..bc6800238 100644 --- a/admin/controllers/dynamic_get.php +++ b/admin/controllers/dynamic_get.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamic_get.php diff --git a/admin/controllers/dynamic_gets.php b/admin/controllers/dynamic_gets.php index 9bff15e8b..843d6d39a 100644 --- a/admin/controllers/dynamic_gets.php +++ b/admin/controllers/dynamic_gets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamic_gets.php diff --git a/admin/controllers/field.php b/admin/controllers/field.php index a34817290..0716b1c51 100644 --- a/admin/controllers/field.php +++ b/admin/controllers/field.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage field.php diff --git a/admin/controllers/fields.php b/admin/controllers/fields.php index 847c405ce..7b8f7122d 100644 --- a/admin/controllers/fields.php +++ b/admin/controllers/fields.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fields.php diff --git a/admin/controllers/fieldtype.php b/admin/controllers/fieldtype.php index 5d6eb5f2d..f1077767f 100644 --- a/admin/controllers/fieldtype.php +++ b/admin/controllers/fieldtype.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtype.php diff --git a/admin/controllers/fieldtypes.php b/admin/controllers/fieldtypes.php index 8a7655853..6e29a2f46 100644 --- a/admin/controllers/fieldtypes.php +++ b/admin/controllers/fieldtypes.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtypes.php diff --git a/admin/controllers/help.php b/admin/controllers/help.php index c87f69a1e..6f167b6fe 100644 --- a/admin/controllers/help.php +++ b/admin/controllers/help.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help.php diff --git a/admin/controllers/help_document.php b/admin/controllers/help_document.php index a128ac635..984e43870 100644 --- a/admin/controllers/help_document.php +++ b/admin/controllers/help_document.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help_document.php diff --git a/admin/controllers/help_documents.php b/admin/controllers/help_documents.php index c031beb5b..3ed7e91d0 100644 --- a/admin/controllers/help_documents.php +++ b/admin/controllers/help_documents.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help_documents.php diff --git a/admin/controllers/import.php b/admin/controllers/import.php index 051d3e2e5..cec6551a6 100644 --- a/admin/controllers/import.php +++ b/admin/controllers/import.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage import.php diff --git a/admin/controllers/layout.php b/admin/controllers/layout.php index 5f8d2aa2b..53b11a6e4 100644 --- a/admin/controllers/layout.php +++ b/admin/controllers/layout.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage layout.php diff --git a/admin/controllers/layouts.php b/admin/controllers/layouts.php index cb2f1a4d3..34f9ab147 100644 --- a/admin/controllers/layouts.php +++ b/admin/controllers/layouts.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage layouts.php diff --git a/admin/controllers/site_view.php b/admin/controllers/site_view.php index 1689d9027..d949d4286 100644 --- a/admin/controllers/site_view.php +++ b/admin/controllers/site_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_view.php diff --git a/admin/controllers/site_views.php b/admin/controllers/site_views.php index 390a2453f..997435058 100644 --- a/admin/controllers/site_views.php +++ b/admin/controllers/site_views.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_views.php diff --git a/admin/controllers/snippet.php b/admin/controllers/snippet.php index b45c007b9..c33647d6b 100644 --- a/admin/controllers/snippet.php +++ b/admin/controllers/snippet.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippet.php diff --git a/admin/controllers/snippets.php b/admin/controllers/snippets.php index 9d41624a2..e15c4a78c 100644 --- a/admin/controllers/snippets.php +++ b/admin/controllers/snippets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippets.php diff --git a/admin/controllers/template.php b/admin/controllers/template.php index d6918b3b6..6f7dd712d 100644 --- a/admin/controllers/template.php +++ b/admin/controllers/template.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage template.php diff --git a/admin/controllers/templates.php b/admin/controllers/templates.php index 3a0dd878e..9e1aeedf6 100644 --- a/admin/controllers/templates.php +++ b/admin/controllers/templates.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage templates.php diff --git a/admin/custom/chartbuilder.php b/admin/custom/chartbuilder.php index 72f436384..de23656b7 100644 --- a/admin/custom/chartbuilder.php +++ b/admin/custom/chartbuilder.php @@ -7,8 +7,8 @@ * **/ -// No direct access. -defined('_JEXEC') or die; +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); class Chartbuilder { diff --git a/admin/custom/footable/LICENSE b/admin/custom/footable2/LICENSE similarity index 100% rename from admin/custom/footable/LICENSE rename to admin/custom/footable2/LICENSE diff --git a/admin/custom/footable/css/fonts/footable.eot b/admin/custom/footable2/css/fonts/footable.eot similarity index 100% rename from admin/custom/footable/css/fonts/footable.eot rename to admin/custom/footable2/css/fonts/footable.eot diff --git a/admin/custom/footable/css/fonts/footable.svg b/admin/custom/footable2/css/fonts/footable.svg similarity index 100% rename from admin/custom/footable/css/fonts/footable.svg rename to admin/custom/footable2/css/fonts/footable.svg diff --git a/admin/custom/footable/css/fonts/footable.ttf b/admin/custom/footable2/css/fonts/footable.ttf similarity index 100% rename from admin/custom/footable/css/fonts/footable.ttf rename to admin/custom/footable2/css/fonts/footable.ttf diff --git a/admin/custom/footable/css/fonts/footable.woff b/admin/custom/footable2/css/fonts/footable.woff similarity index 100% rename from admin/custom/footable/css/fonts/footable.woff rename to admin/custom/footable2/css/fonts/footable.woff diff --git a/admin/custom/footable/css/fonts/index.html b/admin/custom/footable2/css/fonts/index.html similarity index 100% rename from admin/custom/footable/css/fonts/index.html rename to admin/custom/footable2/css/fonts/index.html diff --git a/admin/custom/footable/css/footable.core.css b/admin/custom/footable2/css/footable.core.css similarity index 100% rename from admin/custom/footable/css/footable.core.css rename to admin/custom/footable2/css/footable.core.css diff --git a/admin/custom/footable/css/footable.core.min.css b/admin/custom/footable2/css/footable.core.min.css similarity index 100% rename from admin/custom/footable/css/footable.core.min.css rename to admin/custom/footable2/css/footable.core.min.css diff --git a/admin/custom/footable/css/footable.metro.css b/admin/custom/footable2/css/footable.metro.css similarity index 100% rename from admin/custom/footable/css/footable.metro.css rename to admin/custom/footable2/css/footable.metro.css diff --git a/admin/custom/footable/css/footable.metro.min.css b/admin/custom/footable2/css/footable.metro.min.css similarity index 100% rename from admin/custom/footable/css/footable.metro.min.css rename to admin/custom/footable2/css/footable.metro.min.css diff --git a/admin/custom/footable/css/footable.standalone.css b/admin/custom/footable2/css/footable.standalone.css similarity index 100% rename from admin/custom/footable/css/footable.standalone.css rename to admin/custom/footable2/css/footable.standalone.css diff --git a/admin/custom/footable/css/footable.standalone.min.css b/admin/custom/footable2/css/footable.standalone.min.css similarity index 100% rename from admin/custom/footable/css/footable.standalone.min.css rename to admin/custom/footable2/css/footable.standalone.min.css diff --git a/admin/custom/footable/css/index.html b/admin/custom/footable2/css/index.html similarity index 100% rename from admin/custom/footable/css/index.html rename to admin/custom/footable2/css/index.html diff --git a/admin/custom/footable/dist/footable.all.min.js b/admin/custom/footable2/dist/footable.all.min.js similarity index 100% rename from admin/custom/footable/dist/footable.all.min.js rename to admin/custom/footable2/dist/footable.all.min.js diff --git a/admin/custom/footable/dist/footable.bookmarkable.min.js b/admin/custom/footable2/dist/footable.bookmarkable.min.js similarity index 100% rename from admin/custom/footable/dist/footable.bookmarkable.min.js rename to admin/custom/footable2/dist/footable.bookmarkable.min.js diff --git a/admin/custom/footable/dist/footable.filter.min.js b/admin/custom/footable2/dist/footable.filter.min.js similarity index 100% rename from admin/custom/footable/dist/footable.filter.min.js rename to admin/custom/footable2/dist/footable.filter.min.js diff --git a/admin/custom/footable/dist/footable.grid.min.js b/admin/custom/footable2/dist/footable.grid.min.js similarity index 100% rename from admin/custom/footable/dist/footable.grid.min.js rename to admin/custom/footable2/dist/footable.grid.min.js diff --git a/admin/custom/footable/dist/footable.min.js b/admin/custom/footable2/dist/footable.min.js similarity index 100% rename from admin/custom/footable/dist/footable.min.js rename to admin/custom/footable2/dist/footable.min.js diff --git a/admin/custom/footable/dist/footable.paginate.min.js b/admin/custom/footable2/dist/footable.paginate.min.js similarity index 100% rename from admin/custom/footable/dist/footable.paginate.min.js rename to admin/custom/footable2/dist/footable.paginate.min.js diff --git a/admin/custom/footable/dist/footable.sort.min.js b/admin/custom/footable2/dist/footable.sort.min.js similarity index 100% rename from admin/custom/footable/dist/footable.sort.min.js rename to admin/custom/footable2/dist/footable.sort.min.js diff --git a/admin/custom/footable/dist/footable.striping.min.js b/admin/custom/footable2/dist/footable.striping.min.js similarity index 100% rename from admin/custom/footable/dist/footable.striping.min.js rename to admin/custom/footable2/dist/footable.striping.min.js diff --git a/admin/custom/footable/dist/index.html b/admin/custom/footable2/dist/index.html similarity index 100% rename from admin/custom/footable/dist/index.html rename to admin/custom/footable2/dist/index.html diff --git a/admin/custom/footable/icomoon/footable.json b/admin/custom/footable2/icomoon/footable.json similarity index 100% rename from admin/custom/footable/icomoon/footable.json rename to admin/custom/footable2/icomoon/footable.json diff --git a/admin/custom/footable/icomoon/index.html b/admin/custom/footable2/icomoon/index.html similarity index 100% rename from admin/custom/footable/icomoon/index.html rename to admin/custom/footable2/icomoon/index.html diff --git a/admin/custom/footable/index.html b/admin/custom/footable2/index.html similarity index 100% rename from admin/custom/footable/index.html rename to admin/custom/footable2/index.html diff --git a/admin/custom/footable/js/.jshintrc b/admin/custom/footable2/js/.jshintrc similarity index 100% rename from admin/custom/footable/js/.jshintrc rename to admin/custom/footable2/js/.jshintrc diff --git a/admin/custom/footable/js/footable.bookmarkable.js b/admin/custom/footable2/js/footable.bookmarkable.js similarity index 100% rename from admin/custom/footable/js/footable.bookmarkable.js rename to admin/custom/footable2/js/footable.bookmarkable.js diff --git a/admin/custom/footable/js/footable.filter.js b/admin/custom/footable2/js/footable.filter.js similarity index 100% rename from admin/custom/footable/js/footable.filter.js rename to admin/custom/footable2/js/footable.filter.js diff --git a/admin/custom/footable/js/footable.grid.js b/admin/custom/footable2/js/footable.grid.js similarity index 100% rename from admin/custom/footable/js/footable.grid.js rename to admin/custom/footable2/js/footable.grid.js diff --git a/admin/custom/footable/js/footable.js b/admin/custom/footable2/js/footable.js similarity index 100% rename from admin/custom/footable/js/footable.js rename to admin/custom/footable2/js/footable.js diff --git a/admin/custom/footable/js/footable.memory.js b/admin/custom/footable2/js/footable.memory.js similarity index 100% rename from admin/custom/footable/js/footable.memory.js rename to admin/custom/footable2/js/footable.memory.js diff --git a/admin/custom/footable/js/footable.paginate.js b/admin/custom/footable2/js/footable.paginate.js similarity index 100% rename from admin/custom/footable/js/footable.paginate.js rename to admin/custom/footable2/js/footable.paginate.js diff --git a/admin/custom/footable/js/footable.plugin.template.js b/admin/custom/footable2/js/footable.plugin.template.js similarity index 100% rename from admin/custom/footable/js/footable.plugin.template.js rename to admin/custom/footable2/js/footable.plugin.template.js diff --git a/admin/custom/footable/js/footable.sort.js b/admin/custom/footable2/js/footable.sort.js similarity index 100% rename from admin/custom/footable/js/footable.sort.js rename to admin/custom/footable2/js/footable.sort.js diff --git a/admin/custom/footable/js/footable.striping.js b/admin/custom/footable2/js/footable.striping.js similarity index 100% rename from admin/custom/footable/js/footable.striping.js rename to admin/custom/footable2/js/footable.striping.js diff --git a/admin/custom/footable/js/index.html b/admin/custom/footable2/js/index.html similarity index 100% rename from admin/custom/footable/js/index.html rename to admin/custom/footable2/js/index.html diff --git a/admin/custom/footable3/LICENSE-GPLv3 b/admin/custom/footable3/LICENSE-GPLv3 new file mode 100644 index 000000000..0daf0bb40 --- /dev/null +++ b/admin/custom/footable3/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/admin/custom/footable3/css/footable.bootstrap.css b/admin/custom/footable3/css/footable.bootstrap.css new file mode 100644 index 000000000..56b4fe3e9 --- /dev/null +++ b/admin/custom/footable3/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/admin/custom/footable3/css/footable.bootstrap.min.css b/admin/custom/footable3/css/footable.bootstrap.min.css new file mode 100644 index 000000000..c297e48d8 --- /dev/null +++ b/admin/custom/footable3/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/admin/custom/footable3/css/footable.core.bootstrap.css b/admin/custom/footable3/css/footable.core.bootstrap.css new file mode 100644 index 000000000..d652b6ffa --- /dev/null +++ b/admin/custom/footable3/css/footable.core.bootstrap.css @@ -0,0 +1,169 @@ +/* +* 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"; +} \ No newline at end of file diff --git a/admin/custom/footable3/css/footable.core.standalone.css b/admin/custom/footable3/css/footable.core.standalone.css new file mode 100644 index 000000000..3238ef696 --- /dev/null +++ b/admin/custom/footable3/css/footable.core.standalone.css @@ -0,0 +1,630 @@ +/* +* 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"; +} \ No newline at end of file diff --git a/admin/custom/footable3/css/footable.filtering.css b/admin/custom/footable3/css/footable.filtering.css new file mode 100644 index 000000000..8ffa73352 --- /dev/null +++ b/admin/custom/footable3/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.0.6 +* @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/admin/custom/footable3/css/footable.filtering.min.css b/admin/custom/footable3/css/footable.filtering.min.css new file mode 100644 index 000000000..cd74997b0 --- /dev/null +++ b/admin/custom/footable3/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/admin/custom/footable3/css/footable.paging.css b/admin/custom/footable3/css/footable.paging.css new file mode 100644 index 000000000..65e5d7055 --- /dev/null +++ b/admin/custom/footable3/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.0.6 +* @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/admin/custom/footable3/css/footable.paging.min.css b/admin/custom/footable3/css/footable.paging.min.css new file mode 100644 index 000000000..2b43136f6 --- /dev/null +++ b/admin/custom/footable3/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/admin/custom/footable3/css/footable.sorting.css b/admin/custom/footable3/css/footable.sorting.css new file mode 100644 index 000000000..6548d49f7 --- /dev/null +++ b/admin/custom/footable3/css/footable.sorting.css @@ -0,0 +1,32 @@ +/* +* 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. +*/ +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; +} \ No newline at end of file diff --git a/admin/custom/footable3/css/footable.sorting.min.css b/admin/custom/footable3/css/footable.sorting.min.css new file mode 100644 index 000000000..d976dfa54 --- /dev/null +++ b/admin/custom/footable3/css/footable.sorting.min.css @@ -0,0 +1 @@ +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} \ No newline at end of file diff --git a/admin/custom/footable3/css/footable.standalone.css b/admin/custom/footable3/css/footable.standalone.css new file mode 100644 index 000000000..15be741e3 --- /dev/null +++ b/admin/custom/footable3/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/admin/custom/footable3/css/footable.standalone.min.css b/admin/custom/footable3/css/footable.standalone.min.css new file mode 100644 index 000000000..615f08a81 --- /dev/null +++ b/admin/custom/footable3/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/admin/custom/footable3/css/index.html b/admin/custom/footable3/css/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/custom/footable3/css/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/custom/footable3/index.html b/admin/custom/footable3/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/custom/footable3/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/custom/footable3/js/footable.core.js b/admin/custom/footable3/js/footable.core.js new file mode 100644 index 000000000..a8a8e97b9 --- /dev/null +++ b/admin/custom/footable3/js/footable.core.js @@ -0,0 +1,3248 @@ +/* +* 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. +*/ +(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) { + var ft = F.get(tbl); + if (ft instanceof F.Table) ft.destroy(); + 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){ + return new F.Table(table, options, ready); + }; + + // 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; + }; + + /** + * Whether or not we are on a mobile device. + */ + F.is.mobile = (function(a){ + return (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) + ||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))); + })(navigator.userAgent||navigator.vendor||window.opera); + +})(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] - Whether or not to ignore casing when performing the check. + * @returns {boolean} + */ + F.str.contains = function (str, contains, ignoreCase) { + return !F.is.emptyString(str) + && !F.is.emptyString(contains) && contains.length <= str.length + && (ignoreCase ? str.toUpperCase().indexOf(contains.toUpperCase()) : str.indexOf(contains)) !== -1; + }; + + /** + * 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] - 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) { + return this.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) { + 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 (str.toUpperCase() === str) return str.toLowerCase(); + return str.replace(/^([A-Z])|[-\s_](\w)/g, function (match, p1, p2) { + if (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. + * @param {string} str - The string to escape. + * @returns {string} + */ + F.str.escapeRegExp = function(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 {*} 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(arg1, argN){ + var self = this, args = Array.prototype.slice.call(arguments), reg = [], loaded = []; + for (var name in self.registered){ + if (!self.registered.hasOwnProperty(name)) continue; + reg.push(self.registered[name]); + } + 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++){ + pair = props[i].split(':'); + 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. + * @protected + * @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; + if (F.is.fn(window[functionName])) return window[functionName]; + return 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.$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()); + + 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); + }, + /** + * 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)) return $(valueOrElement).data('value') || $(valueOrElement).text(); // use jQuery to get the value + 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) { + /** + * 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.val(); + }, + /** + * 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(); + }, + /** + * 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. + * @returns {(*|undefined)} + */ + val: function(data){ + 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) : {}); + this.value = isObj ? (hasOptions ? data.value : data) : 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); + 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 + * @this FooTable.Row + */ + expand: function(){ + if (!this.created) return; + this.__hidden__ = F.arr.map(this.cells, function(cell){ + return cell.column.hidden && cell.column.visible ? cell : null; + }); + + if (this.__hidden__.length > 0){ + this.$details.insertAfter(this.$el) + .children('td').first() + .attr('colspan', this.ft.columns.visibleColspan); + + F.arr.each(this.__hidden__, function(cell){ + cell.collapse(); + }); + } + this.$el.attr('data-expanded', true); + this.$toggle.removeClass('fooicon-plus').addClass('fooicon-minus'); + this.expanded = true; + }, + /** + * Sets the current row to a collapsed state removing the detail row if it exists. + * @instance + * @this FooTable.Row + */ + collapse: function(setExpanded){ + if (!this.created) return; + F.arr.each(this.__hidden__, function(cell){ + cell.restore(); + }); + this.$details.detach(); + this.$el.removeAttr('data-expanded'); + this.$toggle.removeClass('fooicon-minus').addClass('fooicon-plus'); + if (F.is.boolean(setExpanded) ? setExpanded : true) this.expanded = false; + }, + /** + * Prior to drawing this moves the details contents back to there original cells and detaches the toggle element from the row. + * @instance + * @this FooTable.Row + */ + predraw: function(){ + if (this.created){ + if (this.expanded){ + this.collapse(false); + } + this.$toggle.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); + } + } + }); + 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('tr,td,.footable-toggle')){ + 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 + /** + * 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); + /** + * An array of all CSS classes on the table that do not start with "footable". + * @instance + * @protected + * @type {Array.} + */ + this.classes = []; + /** + * The breakpoints component for this instance of the plugin. + * @instance + * @type {FooTable.Breakpoints} + */ + this.breakpoints = F.components.internal.make('breakpoints', this); + /** + * The columns component for this instance of the plugin. + * @instance + * @type {FooTable.Columns} + */ + this.columns = F.components.internal.make('columns', this); + /** + * The rows component for this instance of the plugin. + * @instance + * @type {FooTable.Rows} + */ + this.rows = F.components.internal.make('rows', this); + /** + * 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 = { + internal: [this.breakpoints, this.columns, this.rows], + core: F.components.core.load(this), + custom: F.components.load(this) + }; + + //END MEMBERS + var self = this; + self._preinit().then(function(){ + return self._init().then(function(){ + if (F.is.fn(ready)) ready.call(self, self); + }); + }, function (err) { + if (F.is.error(err)){ + console.error('FooTable: unhandled error thrown during initialization.', err); + } + }); + }, + /** + * 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. + */ + return this.raise('preinit.ft.table').then(function(){ + var classes = self.$el.attr('class').match(/\S+/g), + data = self.$el.data() || {}; + + self.o.ajax = F.checkFnValue(self, data.ajax, self.o.ajax); + self.o.stopPropagation = F.is.boolean(data.stopPropagation) + ? 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]); + } + var $loader = $('
', { 'class': 'footable-loader' }).append($('', {'class': 'fooicon fooicon-loader'})); + self.$el.hide().after($loader); + return self.execute(false, false, 'preinit', data).always(function(){ + self.$el.show(); + $loader.remove(); + }); + }); + }, + /** + * 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(); + return self.draw().then(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__'); + if (F.is.hash(self.o.on)) self.$el.off(self.o.on); + self.initialized = false; + }); + },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){ + var components = this.components.internal.concat(this.components.core, this.components.custom); + for (var i = 0, len = components.length; i < len; i++){ + if (components[i] instanceof type) return 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; + // 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. + */ + self.raise('postdraw.ft.table'); + }); + }); + }); + }); + }, function(err){ + if (F.is.error(err)){ + console.error('FooTable: unhandled error thrown during a draw operation.', err); + } + }); + }, + /** + * 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 internal = self.components.internal.slice(0), + core = enabled ? F.arr.get(self.components.core, function(c){ return c.enabled; }) : self.components.core.slice(0), + custom = enabled ? F.arr.get(self.components.custom, function(c){ return c.enabled; }) : self.components.custom.slice(0); + + args.unshift(reverse ? custom.reverse() : internal); + return self._execute.apply(self, args).then(function(){ + args.shift(); + args.unshift(reverse ? core.reverse() : core); + return self._execute.apply(self, args).then(function(){ + args.shift(); + args.unshift(reverse ? internal.reverse() : custom); + return self._execute.apply(self, args); + }); + }, function(err){ + if (F.is.error(err)){ + console.error('FooTable: unhandled error thrown while executing "'+methodName+'".', err); + } + }); + }, + /** + * 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)){ + valueOrElement = $(valueOrElement).data('value') || $(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.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 {(number|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') return valueOrElement.data('value') || 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)){ + valueOrElement = $(valueOrElement).data('value') || $(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.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: null, + /** + * The init method is called during the parent {@link FooTable.Table} constructor call. + * @instance + * @protected + * @function + */ + init: null, + /** + * This method is called from the {@link FooTable.Table#destroy} method. + * @instance + * @protected + */ + destroy: null, + /** + * This method is called from the {@link FooTable.Table#draw} method. + * @instance + * @protected + * @function + */ + predraw: null, + /** + * This method is called from the {@link FooTable.Table#draw} method. + * @instance + * @protected + * @function + */ + draw: null, + /** + * This method is called from the {@link FooTable.Table#draw} method. + * @instance + * @protected + * @function + */ + postdraw: null + }); + + F.components = new F.ClassFactory(); + F.components.core = new F.ClassFactory(); + F.components.internal = new F.ClassFactory(); + +})(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(){ + var ratio = F.is.defined(window.devicePixelRatio) && F.is.mobile ? window.devicePixelRatio : 1; + return Math.max(document.documentElement.clientWidth, window.innerWidth, 0) / ratio; + } + }); + + F.components.internal.register('breakpoints', F.Breakpoints, 10); + +})(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; + }, + + /* 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'), $cell, cdata; + if ($header.length == 0) $header = self.ft.$el.find('thead > tr:last:has([data-breakpoints])'); + if ($header.length == 0) $header = self.ft.$el.find('tbody > tr:first:has([data-breakpoints])'); + 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.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(); + }); + }, + /** + * 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; + }); + }, + /** + * 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.internal.register('columns', F.Columns, 5); + +})(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; + /** + * 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; + /** + * The jQuery object that contains the empty row control. + * @type {jQuery} + */ + this.$empty = null; + }, + /** + * 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.jq($rows)){ + self.parseFinalize(d, $rows); + $rows.detach(); + } else 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 { + 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.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; + }); + }); + }, + /** + * 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(); + }); + }, + /** + * 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){ + 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); + } + } + }); + + F.components.internal.register('rows', F.Rows, 0); + +})(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; + + /** + * 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; +})(FooTable); \ No newline at end of file diff --git a/admin/custom/footable3/js/footable.core.min.js b/admin/custom/footable3/js/footable.core.min.js new file mode 100644 index 000000000..14e14bc52 --- /dev/null +++ b/admin/custom/footable3/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.0.6 +* @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){var f=b.get(e);f instanceof b.Table&&f.destroy(),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){return new b.Table(a,c,d)}}(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},a.is.mobile=function(a){return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))}(navigator.userAgent||navigator.vendor||window.opera)}(FooTable),function(a){a.str={},a.str.contains=function(b,c,d){return!a.is.emptyString(b)&&!a.is.emptyString(c)&&c.length<=b.length&&-1!==(d?b.toUpperCase().indexOf(c.toUpperCase()):b.indexOf(c))},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(a,b){return this.contains(a,b)?a.substring(a.indexOf(b)+1):a},a.str.startsWith=function(a,b){return a.slice(0,b.length)==b},a.str.toCamelCase=function(a){return a.toUpperCase()===a?a.toLowerCase():a.replace(/^([A-Z])|[-\s_](\w)/g,function(a,b,c){return c?c.toUpperCase():b.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(a){return a.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){var d=this,e=Array.prototype.slice.call(arguments),f=[],g=[];for(var h in d.registered)d.registered.hasOwnProperty(h)&&f.push(d.registered[h]);return f.sort(function(a,b){return b.priority-a.priority}),a.arr.each(f,function(b){a.is.fn(b.klass)&&g.push(d._make(b.klass,e))}),g},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++)d=h[i].split(":"),e=b.str.toCamelCase(a.trim(d[0])),f=a.trim(d[1]),g[e]=f;return g},b.getFnPointer=function(a){return b.is.emptyString(a)?null:b.is.fn(window[a])?window[a]: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.$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(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; + 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){ + var match = F.str.contains(str, p.query, true); + 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){ + var match = F.str.contains(str, p.query, true); + 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.right = new F.Query(or[1], this.space, this.connectors); + } 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.right = new F.Query(and[1], this.space, this.connectors); + } 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 + }; + // 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; + } + 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)) return $(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)) 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; + }; + + // 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=3 - 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} 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. + */ + F.Defaults.prototype.filtering = { + enabled: false, + filters: [], + delay: 1200, + min: 3, + space: 'AND', + placeholder: 'Search', + position: 'right', + connectors: true + }; +})(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); +(function(F){ + /** + * Filter the table using the supplied query and columns. Added by the {@link FooTable.Filtering} component. + * @instance + * @param {string} query - The query to filter the rows by. + * @param {(Array.|Array.|Array.)} [columns] - The columns to apply the filter to in each row. + * @returns {jQuery.Promise} + * @fires FooTable.Filtering#before.ft.filtering + * @fires FooTable.Filtering#after.ft.filtering + * @see FooTable.Filtering#filter + */ + F.Table.prototype.applyFilter = function(query, columns){ + return this.use(F.Filtering).filter(query, columns); + }; + + /** + * Clear the current filter from the table. Added by the {@link FooTable.Filtering} component. + * @instance + * @returns {jQuery.Promise} + * @fires FooTable.Filtering#before.ft.filtering + * @fires FooTable.Filtering#after.ft.filtering + * @see FooTable.Filtering#clear + */ + F.Table.prototype.clearFilter = function(){ + return this.use(F.Filtering).clear(); + }; +})(FooTable); \ No newline at end of file diff --git a/admin/custom/footable3/js/footable.filtering.min.js b/admin/custom/footable3/js/footable.filtering.min.js new file mode 100644 index 000000000..e94650f9b --- /dev/null +++ b/admin/custom/footable3/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.0.6 +* @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){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("
",{"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&&(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); \ No newline at end of file diff --git a/admin/custom/footable3/js/footable.filtering.js b/admin/custom/footable3/js/footable.filtering.js new file mode 100644 index 000000000..3d61fb43f --- /dev/null +++ b/admin/custom/footable3/js/footable.filtering.js @@ -0,0 +1,925 @@ +/* +* 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. +*/ +(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} 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. + * @returns {FooTable.Filter} + */ + construct: function(name, query, columns, space, connectors){ + /** + * 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; + /** + * The query for the filter. + * @instance + * @type {(string|FooTable.Query)} + */ + this.query = new F.Query(query, this.space, this.connectors); + /** + * 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); + } + 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; + /** + * The placeholder text to display within the search $input. + * @instance + * @type {string} + */ + this.placeholder = table.o.filtering.placeholder; + /** + * 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; + }, + + /* 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. + */ + this.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.number(data.filterConnectors) + ? data.filterConnectors + : self.connectors; + + self.delay = F.is.number(data.filterDelay) + ? data.filterDelay + : self.delay; + + self.placeholder = F.is.number(data.filterPlaceholder) + ? data.filterPlaceholder + : self.placeholder; + + 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. + */ + this.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; + this.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'}) + .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/admin/custom/footable3/js/footable.paging.js b/admin/custom/footable3/js/footable.paging.js new file mode 100644 index 000000000..9d4097e39 --- /dev/null +++ b/admin/custom/footable3/js/footable.paging.js @@ -0,0 +1,710 @@ +/* +* 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. +*/ +(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. + * @type {number} + */ + this.limit = table.o.paging.limit; + /** + * The position of the pagination control within the paging rows cell. + * @type {string} + */ + this.position = table.o.paging.position; + /** + * The format string used to generate the text displayed under the pagination control. + * @type {string} + */ + this.countFormat = table.o.paging.countFormat; + /** + * The total number of pages. + * @instance + * @type {number} + */ + this.total = -1; + /** + * 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. + * @type {jQuery} + */ + this.$pagination = null; + /** + * The jQuery object that contains the row count. + * @type {jQuery} + */ + this.$count = null; + + /* PRIVATE */ + /** + * A number indicating the previous page displayed. + * @private + * @type {number} + */ + this._previous = 1; + + /** + * Used to hold the number of rows in the {@link FooTable.Rows#array} before paging is applied. + * @type {number} + * @private + */ + this._total = 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.array.length / self.size); + self._total = self.total; + }, 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(); + }); + }, + /** + * 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._total = this.ft.rows.array.length; + if (this.ft.rows.array.length > this.size) + this.ft.rows.array = this.ft.rows.array.splice((this.current - 1) * this.size, this.size); + }, + /** + * Updates the paging UI setting the state of the pagination control. + * @instance + * @protected + */ + draw: function(){ + this.$cell.attr('colspan', this.ft.columns.visibleColspan); + this._setVisible(this.current, this.current > this._previous); + this._setNavigation(true); + }, + /** + * Creates the paging UI from the current options setting the various jQuery properties of this component. + * @instance + * @protected + */ + $create: function(){ + var self = this, + multiple = self.total > 1, + link = function(attr, html, klass){ + return $('
  • ', { + 'class': klass + }).attr('data-page', attr) + .append($('', { + 'class': 'footable-page-link', + href: '#' + }).data('page', attr).html(html)); + }, + position; + + if (!multiple) return; + + switch (self.position){ + case 'left': position = 'footable-paging-left'; break; + case 'right': position = 'footable-paging-right'; break; + default: position = 'footable-paging-center'; break; + } + self.ft.$el.addClass('footable-paging').addClass(position); + self.$cell = $('
'); + self.ft.$el.append($tfoot); + } + self.$row = $('', { 'class': 'footable-paging' }).append(self.$cell).appendTo($tfoot); + self.$pagination = $('"),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/admin/custom/footable3/js/footable.sorting.js b/admin/custom/footable3/js/footable.sorting.js new file mode 100644 index 000000000..b109dd1d2 --- /dev/null +++ b/admin/custom/footable3/js/footable.sorting.js @@ -0,0 +1,435 @@ +/* +* 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. +*/ +(function($, F){ + + F.Sorter = F.Class.extend(/** @lends FooTable.Sorter */{ + /** + * The sorter object contains the column and direction to sort by. + * @constructs + * @extends FooTable.Class + * @param {FooTable.Column} column - The column to sort. + * @param {string} direction - The direction to sort by. + * @returns {FooTable.Sorter} + */ + construct: function(column, direction){ + /** + * The column to sort. + * @type {FooTable.Column} + */ + this.column = column; + /** + * The direction to sort by. + * @type {string} + */ + this.direction = direction; + } + }); + +})(jQuery, FooTable); +(function ($, F) { + F.Sorting = F.Component.extend(/** @lends FooTable.Sorting */{ + /** + * The sorting component adds a small sort button to specified column headers allowing users to sort those columns in the table. + * @constructs + * @extends FooTable.Component + * @param {FooTable.Table} table - The parent {@link FooTable.Table} object for the component. + * @returns {FooTable.Sorting} + */ + construct: function (table) { + // call the constructor of the base class + this._super(table, table.o.sorting.enabled); + + /* PROTECTED */ + /** + * This provides a shortcut to the {@link FooTable.Table#options}.[sorting]{@link FooTable.Defaults#sorting} object. + * @instance + * @protected + * @type {object} + */ + this.o = table.o.sorting; + /** + * The current sorted column. + * @instance + * @type {FooTable.Column} + */ + this.column = null; + + /* PRIVATE */ + /** + * Sets a flag indicating whether or not the sorting has changed. When set to true the {@link FooTable.Sorting#sorting_changing} and {@link FooTable.Sorting#sorting_changed} events + * will be raised during the drawing operation. + * @private + * @type {boolean} + */ + this._changed = false; + }, + + /* PROTECTED */ + /** + * Checks the supplied data and options for the sorting component. + * @instance + * @protected + * @param {object} data - The jQuery data object from the parent table. + * @fires FooTable.Sorting#"preinit.ft.sorting" + * @this FooTable.Sorting + */ + preinit: function(data){ + var self = this; + /** + * The preinit.ft.sorting 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.Sorting#"preinit.ft.sorting" + * @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.sorting', [data]).then(function(){ + if (self.ft.$el.hasClass('footable-sorting')) + self.enabled = true; + self.enabled = F.is.boolean(data.sorting) + ? data.sorting + : self.enabled; + if (!self.enabled) return; + self.column = F.arr.first(self.ft.columns.array, function(col){ return col.sorted; }); + }, function(){ + self.enabled = false; + }); + }, + /** + * Initializes the sorting component for the plugin using the supplied table and options. + * @instance + * @protected + * @fires FooTable.Sorting#"init.ft.sorting" + * @this FooTable.Sorting + */ + init: function () { + /** + * The init.ft.sorting event is raised before its UI is generated. + * Calling preventDefault on this event will disable the component. + * @event FooTable.Sorting#"init.ft.sorting" + * @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.sorting').then(function(){ + F.arr.each(self.ft.columns.array, function(col){ + if (col.sortable){ + col.$el.addClass('footable-sortable').append($('', {'class': 'fooicon fooicon-sort'})); + } + }); + self.ft.$el.on('click.footable', '.footable-sortable', { self: self }, self._onSortClicked); + }, function(){ + self.enabled = false; + }); + }, + /** + * Destroys the sorting component removing any UI generated from the table. + * @instance + * @protected + * @fires FooTable.Sorting#"destroy.ft.sorting" + */ + destroy: function () { + /** + * The destroy.ft.sorting event is raised before its UI is removed. + * Calling preventDefault on this event will prevent the component from being destroyed. + * @event FooTable.Sorting#"destroy.ft.sorting" + * @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.off('click.footable', '.footable-sortable', self._onSortClicked); + self.ft.$el.children('thead').children('tr.footable-header') + .children('.footable-sortable').removeClass('footable-sortable') + .find('span.fooicon').remove(); + }); + }, + /** + * Performs the actual sorting against the {@link FooTable.Rows#current} array. + * @instance + * @protected + */ + predraw: function () { + if (!this.column) return; + var self = this, col = self.column; + //self.ft.rows.array.sort(function (a, b) { + // return col.direction == 'ASC' + // ? col.sorter(a.cells[col.index].value, b.cells[col.index].value) + // : col.sorter(b.cells[col.index].value, a.cells[col.index].value); + //}); + self.ft.rows.array.sort(function (a, b) { + return col.direction == 'ASC' + ? col.sorter(a.cells[col.index].sortValue, b.cells[col.index].sortValue) + : col.sorter(b.cells[col.index].sortValue, a.cells[col.index].sortValue); + }); + }, + /** + * Updates the sorting UI setting the state of the sort buttons. + * @instance + * @protected + */ + draw: function () { + if (!this.column) return; + var self = this, + $sortable = self.ft.$el.find('thead > tr > .footable-sortable'), + $active = self.column.$el; + + $sortable.removeClass('footable-asc footable-desc').children('.fooicon').removeClass('fooicon-sort fooicon-sort-asc fooicon-sort-desc'); + $sortable.not($active).children('.fooicon').addClass('fooicon-sort'); + $active.addClass(self.column.direction == 'ASC' ? 'footable-asc' : 'footable-desc') + .children('.fooicon').addClass(self.column.direction == 'ASC' ? 'fooicon-sort-asc' : 'fooicon-sort-desc'); + }, + + /* PUBLIC */ + /** + * Sets the sorting options and calls the {@link FooTable.Table#draw} method to perform the actual sorting. + * @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#"before.ft.sorting" + * @fires FooTable.Sorting#"after.ft.sorting" + */ + sort: function(column, direction){ + return this._sort(column, direction); + }, + + /* PRIVATE */ + /** + * Performs the required steps to handle sorting including the raising of the {@link FooTable.Sorting#"before.ft.sorting"} and {@link FooTable.Sorting#"after.ft.sorting"} events. + * @instance + * @private + * @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#"before.ft.sorting" + * @fires FooTable.Sorting#"after.ft.sorting" + */ + _sort: function(column, direction){ + var self = this; + var sorter = new F.Sorter(self.ft.columns.get(column), F.Sorting.dir(direction)); + /** + * The before.ft.sorting event is raised before a sort is applied and allows listeners to modify the sorter or cancel it completely by calling preventDefault on the jQuery.Event object. + * @event FooTable.Sorting#"before.ft.sorting" + * @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.Sorter} sorter - The sorter that is about to be applied. + */ + return self.ft.raise('before.ft.sorting', [sorter]).then(function(){ + F.arr.each(self.ft.columns.array, function(col){ + if (col != self.column) col.direction = null; + }); + self.column = self.ft.columns.get(sorter.column); + if (self.column) self.column.direction = F.Sorting.dir(sorter.direction); + return self.ft.draw().then(function(){ + /** + * The after.ft.sorting event is raised after a sorter has been applied. + * @event FooTable.Sorting#"after.ft.sorting" + * @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.Sorter} sorter - The sorter that has been applied. + */ + self.ft.raise('after.ft.sorting', [sorter]); + }); + }); + }, + /** + * Handles the sort button clicked event. + * @instance + * @private + * @param {jQuery.Event} e - The event object for the event. + */ + _onSortClicked: function (e) { + e.preventDefault(); + var self = e.data.self, $header = $(this).closest('th,td'), + direction = $header.is('.footable-asc, .footable-desc') + ? ($header.hasClass('footable-desc') ? 'ASC' : 'DESC') + : 'ASC'; + self._sort($header.index(), direction); + } + }); + + /** + * Checks the supplied string is a valid direction and if not returns ASC as default. + * @static + * @protected + * @param {string} str - The string to check. + */ + F.Sorting.dir = function(str){ + return F.is.string(str) && (str == 'ASC' || str == 'DESC') ? str : 'ASC'; + }; + + F.components.core.register('sorting', F.Sorting, 5); + +})(jQuery, FooTable); +(function(F){ + + /** + * The value used by the sorting component during sort operations. Can be set using the data-sort-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.Sorting} component. + * @type {string} + * @default null + */ + F.Cell.prototype.sortValue = null; + + // this is used to define the sorting specific properties on cell creation + F.Cell.prototype.__sorting_define__ = function(valueOrElement){ + this.sortValue = this.column.sortValue.call(this.column, valueOrElement); + }; + + // this is used to update the sortValue property whenever the cell value is changed + F.Cell.prototype.__sorting_val__ = function(value){ + if (F.is.defined(value)){ + // set only + this.sortValue = this.column.sortValue.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.__sorting_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.__sorting_val__(value); + return val; + }); +})(FooTable); +(function($, F){ + /** + * The direction to sort if the {@link FooTable.Column#sorted} property is set to true. Can be "ASC", "DESC" or NULL. Added by the {@link FooTable.Sorting} component. + * @type {string} + * @default null + */ + F.Column.prototype.direction = null; + /** + * Whether or not the column can be sorted. Added by the {@link FooTable.Sorting} component. + * @type {boolean} + * @default true + */ + F.Column.prototype.sortable = true; + /** + * Whether or not the column is sorted. Added by the {@link FooTable.Sorting} component. + * @type {boolean} + * @default false + */ + F.Column.prototype.sorted = false; + + /** + * This is supplied two values from the column for a comparison to be made and the result returned. Added by the {@link FooTable.Sorting} component. + * @param {*} a - The first value to be compared. + * @param {*} b - The second value to compare to the first. + * @returns {number} + * @example
+ * "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)) return $(valueOrElement).data('sortValue') || 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; + }; + + // 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)){ + return $(valueOrElement).data('sortValue') || $.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/admin/custom/footable3/js/footable.sorting.min.js b/admin/custom/footable3/js/footable.sorting.min.js new file mode 100644 index 000000000..1d5092e1c --- /dev/null +++ b/admin/custom/footable3/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.0.6 +* @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._changed=!1},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(){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").find("span.fooicon").remove()})},predraw:function(){if(this.column){var a=this,b=a.column;a.ft.rows.array.sort(function(a,c){return"ASC"==b.direction?b.sorter(a.cells[b.index].sortValue,c.cells[b.index].sortValue):b.sorter(c.cells[b.index].sortValue,a.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("ASC"==a.column.direction?"footable-asc":"footable-desc").children(".fooicon").addClass("ASC"==a.column.direction?"fooicon-sort-asc":"fooicon-sort-desc")}},sort:function(a,b){return this._sort(a,b)},_sort:function(a,c){var d=this,e=new b.Sorter(d.ft.columns.get(a),b.Sorting.dir(c));return d.ft.raise("before.ft.sorting",[e]).then(function(){return b.arr.each(d.ft.columns.array,function(a){a!=d.column&&(a.direction=null)}),d.column=d.ft.columns.get(e.column),d.column&&(d.column.direction=b.Sorting.dir(e.direction)),d.ft.draw().then(function(){d.ft.raise("after.ft.sorting",[e])})})},_onSortClicked:function(b){b.preventDefault();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.core.register("sorting",b.Sorting,5)}(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))return a(c).data("sortValue")||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},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))return a(c).data("sortValue")||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/admin/custom/footable3/js/index.html b/admin/custom/footable3/js/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/custom/footable3/js/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/helpers/compiler/a_Get.php b/admin/helpers/compiler/a_Get.php index cd261ac2d..b57ab69e5 100644 --- a/admin/helpers/compiler/a_Get.php +++ b/admin/helpers/compiler/a_Get.php @@ -102,6 +102,13 @@ class Get */ public $footable = false; + /** + * The FOOTABLE Version + * + * @var int + */ + public $footableVersion; + /** * The Google Chart Switch per view * @@ -393,6 +400,8 @@ class Get if ($component->addfootable) { $this->footable = true; + // add the version + $this->footableVersion = (1 == $component->addfootable || 2 == $component->addfootable) ? 2 : $component->addfootable; } // ser the addcustommenu data diff --git a/admin/helpers/compiler/b_Structure.php b/admin/helpers/compiler/b_Structure.php index 17890e405..7bc913d7e 100644 --- a/admin/helpers/compiler/b_Structure.php +++ b/admin/helpers/compiler/b_Structure.php @@ -609,12 +609,17 @@ class Structure extends Get $uikit = array( 'folder' => 'uikit', 'path' => 'media', 'rename' => 0); $this->componentData->folders[] = $uikit; } - if ($this->footable) + if ($this->footable && (!isset($this->footableVersion) || 2 == $this->footableVersion)) { // move the footable folder into place - $footable = array( 'folder' => 'footable', 'path' => 'media', 'rename' => 0); + $footable = array( 'folder' => 'footable2', 'path' => 'media/footable', 'rename' => 1); + $this->componentData->folders[] = $footable; + } + elseif ($this->footable && 3 == $this->footableVersion) + { + // move the footable folder into place + $footable = array( 'folder' => 'footable3', 'path' => 'media/footable', 'rename' => 1); $this->componentData->folders[] = $footable; - } // pointer tracker diff --git a/admin/helpers/compiler/e_Interpretation.php b/admin/helpers/compiler/e_Interpretation.php index 1c553e5bf..a9cf68e1c 100644 --- a/admin/helpers/compiler/e_Interpretation.php +++ b/admin/helpers/compiler/e_Interpretation.php @@ -56,7 +56,8 @@ class Interpretation extends Fields public $setRouterHelpDone = array(); public $otherWhere = array(); public $DashboardGetCustomData = array(); - + public $customAdminAdded = array(); + /** * Constructor */ @@ -72,7 +73,7 @@ class Interpretation extends Fields return false; } - /* + /** * Set the line number in comments * * @param int $nr The line number @@ -89,6 +90,31 @@ class Interpretation extends Fields return ''; } + /** + * add email helper + */ + public function addEmailHelper() + { + if (isset($this->componentData->add_email_helper) && $this->componentData->add_email_helper) + { + // set email helper in place with component name + $component = $this->fileContentStatic['###component###']; + $target = array('admin' => 'emailer'); + $done = $this->buildDynamique($target,'emailer',$component); + if ($done) + { + // the text for the file ###BAKING### + $this->fileContentDynamic['emailer_'.$component]['###BAKING###'] = ''; // <<-- to insure it gets updated + // return the code need to load the abstract class + return "\nJLoader::register('".$component."Email', JPATH_COMPONENT_ADMINISTRATOR . '/helpers/".$component."email.php'); "; + } + } + return ''; + } + + /** + * + */ public function setLockLicense() { if ($this->componentData->add_license && $this->componentData->license_type == 3) @@ -109,7 +135,10 @@ class Interpretation extends Fields $this->fileContentStatic['###LICENSE_LOCKED_DEFINED###'] = ''; } } - + + /** + * @param $view + */ public function setLockLicensePer($view) { if ($this->componentData->add_license && $this->componentData->license_type == 3) @@ -956,6 +985,55 @@ class Interpretation extends Fields $method[] = "\t\t}"; $method[] = "\t\treturn \$was;"; $method[] = "\t}"; + + $method[] = "\n\t/**"; + $method[] = "\t* Update user values"; + $method[] = "\t*/"; + $method[] = "\tpublic static function updateUser(\$new)"; + $method[] = "\t{"; + $method[] = "\t\t// load the user component language files if there is an error."; + $method[] = "\t\t\$lang = JFactory::getLanguage();"; + $method[] = "\t\t\$extension = 'com_users';"; + $method[] = "\t\t\$base_dir = JPATH_ADMINISTRATOR;"; + $method[] = "\t\t\$language_tag = 'en-GB';"; + $method[] = "\t\t\$reload = true;"; + $method[] = "\t\t\$lang->load(\$extension, \$base_dir, \$language_tag, \$reload);"; + $method[] = "\t\t// load the user model"; + $method[] = "\t\t\$model = self::getModel('user', JPATH_ADMINISTRATOR . '/components/com_users', 'Users');"; + $method[] = "\t\t// Check if password was set"; + $method[] = "\t\tif (isset(\$new['password']) && isset(\$new['password2']) && self::checkString(\$new['password']) && self::checkString(\$new['password2']))"; + $method[] = "\t\t{"; + $method[] = "\t\t\t// Use the users passwords"; + $method[] = "\t\t\t\$password = \$new['password'];"; + $method[] = "\t\t\t\$password2 = \$new['password2'];"; + $method[] = "\t\t}"; + $method[] = "\t\t// set username"; + $method[] = "\t\tif (isset(\$new['username']) && self::checkString(\$new['username']))"; + $method[] = "\t\t{"; + $method[] = "\t\t\t\$new['username'] = self::safeString(\$new['username']);"; + $method[] = "\t\t}"; + $method[] = "\t\telse"; + $method[] = "\t\t{"; + $method[] = "\t\t\t\$new['username'] = self::safeString(\$new['name']);\t\t\t"; + $method[] = "\t\t}"; + $method[] = "\t\t// linup update user data"; + $method[] = "\t\t\$data = array("; + $method[] = "\t\t\t'id' => \$new['id'],"; + $method[] = "\t\t\t'username' => \$new['username'],"; + $method[] = "\t\t\t'name' => \$new['name'],"; + $method[] = "\t\t\t'email' => \$new['email'],"; + $method[] = "\t\t\t'password1' => \$password, // First password field"; + $method[] = "\t\t\t'password2' => \$password2, // Confirm password field"; + $method[] = "\t\t\t'block' => 0 );"; + $method[] = "\t\t// register the new user"; + $method[] = "\t\t\$done = \$model->save(\$data);"; + $method[] = "\t\t// if user is updated"; + $method[] = "\t\tif (\$done)"; + $method[] = "\t\t{"; + $method[] = "\t\t\treturn \$new['id'];"; + $method[] = "\t\t}"; + $method[] = "\t\treturn \$model->getError();"; + $method[] = "\t}"; // return the help method return implode("\n",$method); @@ -1592,7 +1670,12 @@ class Interpretation extends Fields return $globals; } - public function removeAsDot($string,$type = '') + /** + * @param $string + * @param string $type + * @return mixed + */ + public function removeAsDot($string, $type = '') { if (strpos($string,'.') !== false) { @@ -1605,7 +1688,14 @@ class Interpretation extends Fields return $field; } - public function setCustomViewGetItem(&$get,&$code,$tab = '',$type = 'main') + /** + * @param $get + * @param $code + * @param string $tab + * @param string $type + * @return string + */ + public function setCustomViewGetItem(&$get, &$code, $tab = '', $type = 'main') { if (ComponentbuilderHelper::checkObject($get)) { @@ -2228,7 +2318,12 @@ class Interpretation extends Fields return "\n\t\t//".$this->setLine(__LINE__)."add your custom code here."; } - public function setCustomViewGetItems(&$get,$code) + /** + * @param $get + * @param $code + * @return string + */ + public function setCustomViewGetItems(&$get, $code) { $getItem = ''; $this->siteDecrypt['basic'][$code] = false; @@ -2900,7 +2995,7 @@ class Interpretation extends Fields $setter .= "\n\t\t\t}"; $setter .= "\n\t\t}"; } - elseif ($this->uikit && ComponentbuilderHelper::checkArray($this->siteFieldData['uikit'][$view['settings']->code])) + elseif ($this->uikit && isset($this->siteFieldData['uikit'][$view['settings']->code]) && ComponentbuilderHelper::checkArray($this->siteFieldData['uikit'][$view['settings']->code])) { $setter .= "\n\n\t\t//".$this->setLine(__LINE__)." Load the needed uikit components in this view."; $setter .= "\n\t\t\$uikitComp = \$this->get('UikitComp');"; @@ -4640,9 +4735,10 @@ class Interpretation extends Fields public function setLangAdmin() { // add final list of needed lang strings - $this->langContent['adminsys'][$this->langPrefix] = ComponentbuilderHelper::safeString($this->componentData->name,'W'); - $this->langContent['adminsys'][$this->langPrefix.'_CONFIGURATION'] = ComponentbuilderHelper::safeString($this->componentData->name,'W').' Configuration'; - $this->langContent[$this->lang][$this->langPrefix] = ComponentbuilderHelper::safeString($this->componentData->name,'W'); + $componentName = JFilterOutput::cleanText($this->componentData->name); + $this->langContent['adminsys'][$this->langPrefix] = + $this->langContent['adminsys'][$this->langPrefix.'_CONFIGURATION'] = $componentName.' Configuration'; + $this->langContent[$this->lang][$this->langPrefix] = $componentName; $this->langContent['admin'][$this->langPrefix.'_BACK'] = 'Back'; $this->langContent['admin'][$this->langPrefix.'_DASH'] = 'Dashboard'; $this->langContent['admin'][$this->langPrefix.'_VERSION'] = 'Version'; @@ -4652,7 +4748,7 @@ class Interpretation extends Fields $this->langContent['admin'][$this->langPrefix.'_LICENSE'] = 'License'; $this->langContent['admin'][$this->langPrefix.'_CONTRIBUTORS'] = 'Contributors'; $this->langContent['admin'][$this->langPrefix.'_CONTRIBUTOR'] = 'Contributor'; - $this->langContent['admin'][$this->langPrefix.'_DASHBOARD'] = ComponentbuilderHelper::safeString($this->componentData->name,'W').' Dashboard'; + $this->langContent['admin'][$this->langPrefix.'_DASHBOARD'] = $componentName.' Dashboard'; $this->langContent['admin'][$this->langPrefix.'_SAVE_SUCCESS'] = "Great! Item successfully saved."; $this->langContent['admin'][$this->langPrefix.'_SAVE_WARNING'] = "The value already existed so please select another."; $this->langContent['admin'][$this->langPrefix.'_HELP_MANAGER'] = "Help"; @@ -4662,7 +4758,7 @@ class Interpretation extends Fields $this->langContent['admin'][$this->langPrefix.'_KEEP_ORIGINAL_CATEGORY'] = "- Keep Original Category -"; if ($this->componentData->add_license && $this->componentData->license_type == 3) { - $this->langContent['admin']['NIE_REG_NIE'] = "

Lincense not set for ".$this->componentData->name.".

Notify your administrator!
The lincense can be obtained from ".$this->componentData->companyname.".

"; + $this->langContent['admin']['NIE_REG_NIE'] = "

Lincense not set for ".$componentName.".

Notify your administrator!
The lincense can be obtained from ".$this->componentData->companyname.".

"; } // add the langug files needed to import and export data if ($this->addEximport) @@ -4865,6 +4961,8 @@ class Interpretation extends Fields // now load it to the global object for tool bar $this->customAdminDynamicButtons[$viewName_list][] = $set; } + // log that it has been added already + $this->customAdminAdded[$custom_admin_view['settings']->code] = $adminview; } } } @@ -5717,6 +5815,12 @@ class Interpretation extends Fields return ''; } + /** + * @param $viewName_single + * @param $layoutName + * @param $items + * @param $type + */ public function setLayout($viewName_single, $layoutName, $items, $type) { // first build the layout file @@ -5740,8 +5844,20 @@ class Interpretation extends Fields } } + /** + * @param $args + */ public function setLinkedView($args) { + /** + * @var $viewId + * @var $viewName_single + * @var $codeName + * @var $layoutCodeName + * @var $key + * @var $parentKey + * @var $addNewButon + */ extract($args, EXTR_PREFIX_SAME, "oops"); $single = ''; $list = ''; @@ -5804,34 +5920,62 @@ class Interpretation extends Fields } } + /** + * @param bool $init + * @param string $document + * @return string + */ public function setFootableScripts($init = true, $document = '$document') { - $foo = "\n\n\t\t//".$this->setLine(__LINE__)." Add the CSS for Footable."; - $foo .= "\n\t\t".$document."->addStyleSheet(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/css/footable.core.min.css');"; - $foo .= "\n\n\t\t//".$this->setLine(__LINE__)." Use the Metro Style"; - $foo .= "\n\t\tif (!isset(\$this->fooTableStyle) || 0 == \$this->fooTableStyle)"; - $foo .= "\n\t\t{"; - $foo .= "\n\t\t\t".$document."->addStyleSheet(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/css/footable.metro.min.css');"; - $foo .= "\n\t\t}"; - $foo .= "\n\t\t//".$this->setLine(__LINE__)." Use the Legacy Style."; - $foo .= "\n\t\telseif (isset(\$this->fooTableStyle) && 1 == \$this->fooTableStyle)"; - $foo .= "\n\t\t{"; - $foo .= "\n\t\t\t".$document."->addStyleSheet(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/css/footable.standalone.min.css');"; - $foo .= "\n\t\t}"; - $foo .= "\n\n\t\t//".$this->setLine(__LINE__)." Add the JavaScript for Footable"; - $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.js');"; - $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.sort.js');"; - $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.filter.js');"; - $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.paginate.js');"; - if ($init) + if (!isset($this->footableVersion) || 2 == $this->footableVersion) // loading version 2 { - $foo .= "\n\n\t\t".'$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'".'); }";'; - $foo .= "\n\t\t\$document->addScriptDeclaration(\$footable);\n"; + $foo = "\n\n\t\t//".$this->setLine(__LINE__)." Add the CSS for Footable."; + $foo .= "\n\t\t".$document."->addStyleSheet(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/css/footable.core.min.css');"; + $foo .= "\n\n\t\t//".$this->setLine(__LINE__)." Use the Metro Style"; + $foo .= "\n\t\tif (!isset(\$this->fooTableStyle) || 0 == \$this->fooTableStyle)"; + $foo .= "\n\t\t{"; + $foo .= "\n\t\t\t".$document."->addStyleSheet(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/css/footable.metro.min.css');"; + $foo .= "\n\t\t}"; + $foo .= "\n\t\t//".$this->setLine(__LINE__)." Use the Legacy Style."; + $foo .= "\n\t\telseif (isset(\$this->fooTableStyle) && 1 == \$this->fooTableStyle)"; + $foo .= "\n\t\t{"; + $foo .= "\n\t\t\t".$document."->addStyleSheet(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/css/footable.standalone.min.css');"; + $foo .= "\n\t\t}"; + $foo .= "\n\n\t\t//".$this->setLine(__LINE__)." Add the JavaScript for Footable"; + $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.js');"; + $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.sort.js');"; + $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.filter.js');"; + $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.paginate.js');"; + if ($init) + { + $foo .= "\n\n\t\t".'$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'".'); }";'; + $foo .= "\n\t\t\$document->addScriptDeclaration(\$footable);\n"; + } + } + elseif (3 == $this->footableVersion) // loading version 3 + { + + $foo = "\n\n\t\t//".$this->setLine(__LINE__)." Add the CSS for Footable"; + $foo .= "\n\t\t".$document."->addStyleSheet('https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css');"; + $foo .= "\n\t\t".$document."->addStyleSheet(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/css/footable.standalone.min.css');"; + $foo .= "\n\t\t//".$this->setLine(__LINE__)." Add the JavaScript for Footable (adding all funtions)"; + $foo .= "\n\t\t".$document."->addScript(JURI::root() .'media/com_".$this->fileContentStatic['###component###']."/footable/js/footable.min.js');"; + if ($init) + { + $foo .= "\n\n\t\t".'$footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('."'.footable'".').footable();});});";'; + $foo .= "\n\t\t\$document->addScriptDeclaration(\$footable);\n"; + } } return $foo; } - public function setListBodyLinked($viewName_single,$viewName_list,$refview) + /** + * @param $viewName_single + * @param $viewName_list + * @param $refview + * @return string + */ + public function setListBodyLinked($viewName_single, $viewName_list, $refview) { if (isset($this->listBuilder[$viewName_list]) && ComponentbuilderHelper::checkArray($this->listBuilder[$viewName_list])) { @@ -6064,30 +6208,31 @@ class Interpretation extends Fields } } $counter = $counter + 2; + $data_value = (3 == $this->footableVersion) ? 'data-sort-value':'data-value'; // add the defaults $body .= "\n\t\tpublished == 1):?>"; - $body .= "\n\t\t\t".'
'; $body .= "\n\t\tpublished == 0):?>"; - $body .= "\n\t\t\t".''; $body .= "\n\t\tpublished == 2):?>"; - $body .= "\n\t\t\t".''; $body .= "\n\t\tpublished == -2):?>"; - $body .= "\n\t\t\t".'"; $body .= "\n"; $body .= "\n"; - $body .= "\n".''; - $body .= "\n\t".''; - $body .= "\n\t\t".''; - $body .= "\n\t".''; - $body .= "\n".''; + if (2 == $this->footableVersion) + { + $body .= "\n".''; + $body .= "\n\t".''; + $body .= "\n\t\t".''; + $body .= "\n\t".''; + $body .= "\n".''; + } $body .= "\n".'
").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', self.ft.columns.visibleColspan); + var $tfoot = self.ft.$el.children('tfoot'); + if ($tfoot.length == 0){ + $tfoot = $('
").attr("colspan",c.ft.columns.visibleColspan);var f=c.ft.$el.children("tfoot");0==f.length&&(f=a("
This example shows using pseudo code what a sort function would look like.
'; + $body .= "\n\t\t\t".''; $body .= "\n\t\t\t\t".'">'; $body .= "\n\t\t\t\t\t".''; $body .= "\n\t\t\t\t".''; $body .= "\n\t\t\t".''; + $body .= "\n\t\t\t".''; $body .= "\n\t\t\t\t".'">'; $body .= "\n\t\t\t\t\t".''; $body .= "\n\t\t\t\t".''; $body .= "\n\t\t\t".''; + $body .= "\n\t\t\t".''; $body .= "\n\t\t\t\t".'">'; $body .= "\n\t\t\t\t\t".''; $body .= "\n\t\t\t\t".''; $body .= "\n\t\t\t".''; + $body .= "\n\t\t\t".''; $body .= "\n\t\t\t\t".'">'; $body .= "\n\t\t\t\t\t".''; $body .= "\n\t\t\t\t".''; @@ -6100,13 +6245,16 @@ class Interpretation extends Fields $body .= "\n\t
'; - $body .= "\n\t\t\t".''; - $body .= "\n\t\t".'
'; + $body .= "\n\t\t\t".''; + $body .= "\n\t\t".'
'; $body .= "\n".''; $body .= "\n\t".'
'; @@ -6153,9 +6301,15 @@ class Interpretation extends Fields $head .= "\n".''."\n"; } $head .= ''; - // add some filters - - $head .= "\n".''; + // set the style for V2 + $metro_blue = (2 == $this->footableVersion) ? ' metro-blue':''; + // set the toggle for V3 + $toggle = (3 == $this->footableVersion) ? ' data-show-toggle="true" data-toggle-column="first"':''; + // set paging + $paging = (2 == $this->footableVersion) ?' data-page-size="20" data-filter="#filter_'.$viewName_list.'"':' data-sorting="true" data-paging="true" data-paging-size="20" data-filtering="true"'; + // add html fix for V3 + $htmlFix = (3 == $this->footableVersion) ? ' data-type="html" data-sort-use="text"':''; + $head .= "\n".'
'; $head .= "\n"; // main lang prefix $langView = $this->langPrefix.'_'.ComponentbuilderHelper::safeString($viewName_single,'U'); @@ -6181,32 +6335,35 @@ class Interpretation extends Fields // build the dynamic fields foreach ($this->listBuilder[$viewName_list] as $item) { - $setin = 'data-hide="phone"'; + $setin = (2 == $this->footableVersion) ? ' data-hide="phone"':' data-breakpoints="xs sm"'; if ($controller > 3) { - $setin = 'data-hide="phone,tablet"'; + $setin = (2 == $this->footableVersion) ? ' data-hide="phone,tablet"' : ' data-breakpoints="xs sm md"'; } if ($controller > 6) { - $setin = 'data-hide="all"'; + $setin = (2 == $this->footableVersion) ? ' data-hide="all"':' data-breakpoints="all"'; } if ($item['link'] && $firstLink) { - $setin = 'data-toggle="true"'; + $setin = (2 == $this->footableVersion) ? ' data-toggle="true"':''; $firstLink = false; } - $head .= "\n\t\t"; $controller++; } + // set some V3 attr + $data_hide = (2 == $this->footableVersion) ? 'data-hide="phone,tablet"' : 'data-breakpoints="xs sm md"'; + $data_type = (2 == $this->footableVersion) ? 'data-type="numeric"':'data-type="number"'; // set default - $head .= "\n\t\t".'"; - $head .= "\n\t\t".'"; $head .= "\n\t"; @@ -6217,6 +6374,17 @@ class Interpretation extends Fields return ''; } + /** + * @param $viewName_single + * @param $viewName_list + * @param $functionName + * @param $key + * @param $_key + * @param $parentKey + * @param $parent_key + * @param $globalKey + * @return string + */ public function setListQueryLinked($viewName_single, $viewName_list, $functionName, $key, $_key, $parentKey, $parent_key, $globalKey) { // check if this view has category added @@ -6298,7 +6466,7 @@ class Interpretation extends Fields $query .= "\n\t\t}"; } $query .= "\n\n\t\t//".$this->setLine(__LINE__)." Order the results by ordering"; - $query .= "\n\t\t\$query->order('a.ordering ASC');"; + $query .= "\n\t\t\$query->order('a.published ASC');"; $query .= "\n\t\t\$query->order('a.ordering ASC');"; $query .= "\n\n\t\t//".$this->setLine(__LINE__)." Load the items"; $query .= "\n\t\t\$db->setQuery(\$query);"; $query .= "\n\t\t\$db->execute();"; @@ -6427,6 +6595,10 @@ class Interpretation extends Fields return $query; } + /** + * @param $viewName_list + * @return array|string + */ public function setCustomAdminDynamicButton($viewName_list) { $buttons = ''; @@ -6452,7 +6624,11 @@ class Interpretation extends Fields } return $buttons; } - + + /** + * @param $viewName_list + * @return array|string + */ public function setCustomAdminDynamicButtonController($viewName_list) { $method = ''; @@ -6498,6 +6674,11 @@ class Interpretation extends Fields return $method; } + /** + * @param $viewName_single + * @param $viewName_list + * @return string + */ public function setModelExportMethod($viewName_single, $viewName_list) { $query = ''; @@ -7013,35 +7194,35 @@ class Interpretation extends Fields if (ComponentbuilderHelper::checkArray($relations)) { // set behavior and default array - $behaviors[$matchName] = $targetBehavior; - $defaults[$matchName] = $targetDefault; + $behaviors[$matchName] = $targetBehavior; + $defaults[$matchName] = $targetDefault; // set the type buket - $typeBuket[$matchName] = $condition['match_type']; + $typeBuket[$matchName] = $condition['match_type']; // set function array $functions[$uniqueVar][0] = $matchName; $matchNames[$matchName] = $condition['match_name']; // get the select value - $getValue[$matchName] = $this->getValueScript($condition['match_type'],$condition['match_name'],$uniqueVar); + $getValue[$matchName] = $this->getValueScript($condition['match_type'],$condition['match_name'],$uniqueVar); // get the options - $options = $this->getOptionsScript($condition['match_type'],$condition['match_options']); + $options = $this->getOptionsScript($condition['match_type'],$condition['match_options']); // set the if values - $ifValue[$matchName] = $this->ifValueScript($matchName,$condition['match_behavior'],$condition['match_type'],$options); + $ifValue[$matchName] = $this->ifValueScript($matchName,$condition['match_behavior'],$condition['match_type'],$options); // set the target controls - $targetControls[$matchName] = $this->setTargetControlsScript($condition['target_field'],$targetBehavior,$targetDefault,$uniqueVar,$viewName); + $targetControls[$matchName] = $this->setTargetControlsScript($condition['target_field'],$targetBehavior,$targetDefault,$uniqueVar,$viewName); $firstTime = false; foreach($relations as $relation) { if (ComponentbuilderHelper::checkString($relation['match_name'])) { - $relationName = $relation['match_name'].'_'.$uniqueVar; + $relationName = $relation['match_name'].'_'.$uniqueVar; // set the type buket - $typeBuket[$relationName] = $relation['match_type']; + $typeBuket[$relationName] = $relation['match_type']; // set function array $functions[$uniqueVar][] = $relationName; $matchNames[$relationName] = $relation['match_name']; // get the relation option - $relationOptions = $this->getOptionsScript($relation['match_type'],$relation['match_options']); + $relationOptions = $this->getOptionsScript($relation['match_type'],$relation['match_options']); $getValue[$relationName] = $this->getValueScript($relation['match_type'],$relation['match_name'],$uniqueVar); $ifValue[$relationName] = $this->ifValueScript($relationName,$relation['match_behavior'],$relation['match_type'],$relationOptions); } @@ -7051,21 +7232,21 @@ class Interpretation extends Fields else { // set behavior and default array - $behaviors[$matchName] = $targetBehavior; - $defaults[$matchName] = $targetDefault; + $behaviors[$matchName] = $targetBehavior; + $defaults[$matchName] = $targetDefault; // set the type buket - $typeBuket[$matchName] = $condition['match_type']; + $typeBuket[$matchName] = $condition['match_type']; // set function array $functions[$uniqueVar][0] = $matchName; $matchNames[$matchName] = $condition['match_name']; // get the select value - $getValue[$matchName] = $this->getValueScript($condition['match_type'],$condition['match_name'],$uniqueVar); + $getValue[$matchName] = $this->getValueScript($condition['match_type'],$condition['match_name'],$uniqueVar); // get the options - $options = $this->getOptionsScript($condition['match_type'],$condition['match_options']); + $options = $this->getOptionsScript($condition['match_type'],$condition['match_options']); // set the if values - $ifValue[$matchName] = $this->ifValueScript($matchName,$condition['match_behavior'],$condition['match_type'],$options); + $ifValue[$matchName] = $this->ifValueScript($matchName,$condition['match_behavior'],$condition['match_type'],$options); // set the target controls - $targetControls[$matchName] = $this->setTargetControlsScript($condition['target_field'],$targetBehavior,$targetDefault,$uniqueVar,$viewName); + $targetControls[$matchName] = $this->setTargetControlsScript($condition['target_field'],$targetBehavior,$targetDefault,$uniqueVar,$viewName); } } } @@ -7094,19 +7275,21 @@ class Interpretation extends Fields $funcCall = ''; foreach ($l_matchKeys as $l_matchKey) { - $name = $matchNames[$l_matchKey]; + $name = $matchNames[$l_matchKey]; $matchTypeKey = $typeBuket[$l_matchKey]; - $funcCall = $this->buildFunctionCall($l_function,$l_matchKeys,$getValue); - if (isset($this->setScriptUserSwitch) && ComponentbuilderHelper::checkArray($this->setScriptUserSwitch) && in_array($matchTypeKey,$this->setScriptUserSwitch)) - { - $modal .= $funcCall['code']; - } - elseif(isset($this->setScriptMediaSwitch) && ComponentbuilderHelper::checkArray($this->setScriptMediaSwitch) && in_array($matchTypeKey,$this->setScriptMediaSwitch)) + $funcCall = $this->buildFunctionCall($l_function,$l_matchKeys,$getValue); + + if(isset($this->setScriptMediaSwitch) && ComponentbuilderHelper::checkArray($this->setScriptMediaSwitch) && in_array($matchTypeKey,$this->setScriptMediaSwitch)) { $modal .= $funcCall['code']; } else { + if (isset($this->setScriptUserSwitch) && ComponentbuilderHelper::checkArray($this->setScriptUserSwitch) && in_array($matchTypeKey,$this->setScriptUserSwitch)) + { + $name = $name.'_id'; + } + $listener .= "\n// #jform_".$name." listeners for ".$l_matchKey." function"; $listener .= "\njQuery('#jform_".$name."').on('keyup',function()"; $listener .= "\n{"; @@ -7649,7 +7832,7 @@ class Interpretation extends Fields if (isset($this->setScriptUserSwitch) && ComponentbuilderHelper::checkArray($this->setScriptUserSwitch) && in_array($type,$this->setScriptUserSwitch)) { // TODO this needs a closer look, a bit buggy - $userFix = " && ".$value." != 'Select a User.'"; + $userFix = " && ".$value." != 0"; } //echo '
'; var_dump($type);exit;
 					$string .= 'isSet('.$value.')'.$userFix;
@@ -7905,6 +8088,11 @@ class Interpretation extends Fields
 		{
 			$select = 'var '.$keyName.' = jQuery("#jform_'.$name.' input[type=\'radio\']:checked").val();';
 		}
+		elseif (isset($this->setScriptUserSwitch) && ComponentbuilderHelper::checkArray($this->setScriptUserSwitch) && in_array($type,$this->setScriptUserSwitch))
+		{
+			// this is only since 3.3.4
+			$select = 'var '.$keyName.' = jQuery("#jform_'.$name.'_id").val();';
+		}
 		elseif ($type == 'list' || ComponentbuilderHelper::typeField($type, 'dynamic') || !ComponentbuilderHelper::typeField($type))
 		{
 			$select = 'var '.$keyName.' = jQuery("#jform_'.$name.'").val();';
@@ -8070,6 +8258,7 @@ class Interpretation extends Fields
 					$cases .= "\n\t\t\t\tcase '".$task."':";
 					$cases .= "\n\t\t\t\t\ttry";
 					$cases .= "\n\t\t\t\t\t{";
+					$cases .= "\n\t\t\t\t\t\t\$returnRaw = \$jinput->get('raw', false, 'BOOLEAN');";
 					foreach ($input[$task] as $string)
 					{
 						$cases .= $string;
@@ -8091,6 +8280,10 @@ class Interpretation extends Fields
 					$cases .= "\n\t\t\t\t\t\t{";
 					$cases .= "\n\t\t\t\t\t\t\techo \$_GET['callback'] . \"(\".json_encode(\$result).\");\";";
 					$cases .= "\n\t\t\t\t\t\t}";
+					$cases .= "\n\t\t\t\t\t\telseif(\$returnRaw)";
+					$cases .= "\n\t\t\t\t\t\t{";
+					$cases .= "\n\t\t\t\t\t\t\techo json_encode(\$result);";
+					$cases .= "\n\t\t\t\t\t\t}";
 					$cases .= "\n\t\t\t\t\t\telse";
 					$cases .= "\n\t\t\t\t\t\t{";
 					$cases .= "\n\t\t\t\t\t\t\techo \"(\".json_encode(\$result).\");\";";
@@ -10672,111 +10865,143 @@ class Interpretation extends Fields
 	public function addCustomSubMenu(&$view,&$codeName,&$lang)
 	{
 		// see if we should have custom menus
+		$custom = '';
+		if (isset($this->componentData->custom_admin_views) && ComponentbuilderHelper::checkArray($this->componentData->custom_admin_views))
+		{
+			foreach ($this->componentData->custom_admin_views as $nr => $menu)
+			{
+				if (!isset($this->customAdminAdded[$menu['settings']->code]))
+				{
+					if ($custom = $this->setCustomAdminSubMenu($view,$codeName,$lang,$nr,$menu,'customView'))
+					{
+						break;
+					}
+				}
+			}
+		}
 		if (isset($this->componentData->custommenus) && ComponentbuilderHelper::checkArray($this->componentData->custommenus))
 		{
 			foreach ($this->componentData->custommenus as $nr => $menu)
 			{
-				if ($menu['submenu'] == 1 && $view['adminview'] == $menu['before'])
+				if ($custom2 = $this->setCustomAdminSubMenu($view,$codeName,$lang,$nr,$menu,'customMenu'))
 				{
-					// setup access defaults
-					$tab = "";
-					$nameSingle	= ComponentbuilderHelper::safeString($menu['name']);
-					$coreLoad = false;
-					if (isset($this->permissionCore[$nameSingle]))
-					{
-						$core = $this->permissionCore[$nameSingle];
-						$coreLoad = true;
-					}
-					$custom = '';
-					// check if the item has permissions.
-					if ($coreLoad && isset($core['core.access']) && isset($this->permissionBuilder['global'][$core['core.access']]) && ComponentbuilderHelper::checkArray($this->permissionBuilder['global'][$core['core.access']]) && in_array($nameSingle,$this->permissionBuilder['global'][$core['core.access']]))
-					{
-						$custom .= "\n\t\t//".$this->setLine(__LINE__)." Access control (".$core['core.access']." && ".$nameSingle.".submenu).";
-						$custom .= "\n\t\tif (\$user->authorise('".$core['core.access']."', 'com_".$codeName."') && \$user->authorise('".$nameSingle.".submenu', 'com_".$codeName."'))";
-						$custom .= "\n\t\t{";
-						// add tab to lines to follow
-						$tab = "\t";
-					}
-					else
-					{
-						$custom .= "\n\t\t//".$this->setLine(__LINE__)." Access control (".$nameSingle.".submenu).";
-						$custom .= "\n\t\tif (\$user->authorise('".$nameSingle.".submenu', 'com_".$codeName."'))";
-						$custom .= "\n\t\t{";
-						// add tab to lines to follow
-						$tab = "\t";
-					}
-					if (isset($menu['link']) && ComponentbuilderHelper::checkString($menu['link']))
-					{
-						$nameList	= ComponentbuilderHelper::safeString($menu['name']);
-						$nameUpper	= ComponentbuilderHelper::safeString($menu['name'], 'U');
-						$this->langContent[$this->lang][$lang.'_'.$nameUpper] = $menu['name'];
-						// add custom menu
-						$custom .= "\n\t\t".$tab."JHtmlSidebar::addEntry(JText::_('".$lang."_".$nameUpper."'), '".$menu['link']."', \$submenu == '".$nameList."');";
-					}
-					else
-					{
-						$nameList	= ComponentbuilderHelper::safeString($menu['name_code']);
-						$nameUpper	= ComponentbuilderHelper::safeString($menu['name_code'], 'U');
-						$this->langContent[$this->lang][$lang.'_'.$nameUpper] = $menu['name'];
-						// add custom menu
-						$custom .= "\n\t\t".$tab."JHtmlSidebar::addEntry(JText::_('".$lang."_".$nameUpper."'), 'index.php?option=com_".$codeName."&view=".$nameList."', \$submenu == '".$nameList."');";
-					}
-					// check if the item has permissions.
-					$custom .= "\n\t\t}";
-
-					return $custom;
-				}
-				elseif($menu['submenu'] == 1 && empty($menu['before']))
-				{
-					// setup access defaults
-					$tab = "";
-					$nameSingle	= ComponentbuilderHelper::safeString($menu['name']);
-					$coreLoad = false;
-					if (isset($this->permissionCore[$nameSingle]))
-					{
-						$core = $this->permissionCore[$nameSingle];
-						$coreLoad = true;
-					}
-					$this->lastCustomSubMenu[$nr] = '';
-					// check if the item has permissions.
-					if ($coreLoad && isset($core['core.access']) && isset($this->permissionBuilder['global'][$core['core.access']]) && ComponentbuilderHelper::checkArray($this->permissionBuilder['global'][$core['core.access']]) && in_array($nameSingle,$this->permissionBuilder['global'][$core['core.access']]))
-					{
-						$this->lastCustomSubMenu[$nr] .= "\n\t\tif (\$user->authorise('".$core['core.access']."', 'com_".$codeName."') && \$user->authorise('".$nameSingle.".submenu', 'com_".$codeName."'))";
-						$this->lastCustomSubMenu[$nr] .= "\n\t\t{";
-						// add tab to lines to follow
-						$tab = "\t";
-					}
-					else
-					{
-						$this->lastCustomSubMenu[$nr] .= "\n\t\tif (\$user->authorise('".$nameSingle.".submenu', 'com_".$codeName."'))";
-						$this->lastCustomSubMenu[$nr] .= "\n\t\t{";
-						// add tab to lines to follow
-						$tab = "\t";
-					}
-					if (isset($menu['link']) && ComponentbuilderHelper::checkString($menu['link']))
-					{
-						$nameList	= ComponentbuilderHelper::safeString($menu['name']);
-						$nameUpper	= ComponentbuilderHelper::safeString($menu['name'], 'U');
-						$this->langContent[$this->lang][$lang.'_'.$nameUpper] = $menu['name'];
-						// add custom menu
-						$this->lastCustomSubMenu[$nr] .= "\n\t\t".$tab."JHtmlSidebar::addEntry(JText::_('".$lang."_".$nameUpper."'), '".$menu['link']."', \$submenu == '".$nameList."');";
-					}
-					else
-					{
-						$nameList	= ComponentbuilderHelper::safeString($menu['name_code']);
-						$nameUpper	= ComponentbuilderHelper::safeString($menu['name_code'], 'U');
-						$this->langContent[$this->lang][$lang.'_'.$nameUpper] = $menu['name'];
-						// add custom menu
-						$this->lastCustomSubMenu[$nr] .= "\n\t\t".$tab."JHtmlSidebar::addEntry(JText::_('".$lang."_".$nameUpper."'), 'index.php?option=com_".$codeName."&view=".$nameList."', \$submenu == '".$nameList."');";
-					}
-					// check if the item has permissions.
-					$this->lastCustomSubMenu[$nr] .= "\n\t\t}";
+					$custom = $custom.$custom2;
+					break;
 				}
 			}
 		}
-		return '';
+		return $custom;
 
 	}
+	
+	public function setCustomAdminSubMenu(&$view,&$codeName,&$lang,&$nr,&$menu,$type)
+	{
+		if ($type == 'customMenu')
+		{
+			$name		= $menu['name'];
+			$nameSingle	= ComponentbuilderHelper::safeString($menu['name']);
+			$nameList	= ComponentbuilderHelper::safeString($menu['name']);
+			$nameUpper	= ComponentbuilderHelper::safeString($menu['name'], 'U');
+		}
+		elseif ($type == 'customView')
+		{
+			$name		= $menu['settings']->name;
+			$nameSingle	= $menu['settings']->code;
+			$nameList	= $menu['settings']->code;
+			$nameUpper	= $menu['settings']->CODE;
+		}
+		
+		if ($menu['submenu'] == 1 && $view['adminview'] == $menu['before'])
+		{
+			// setup access defaults
+			$tab = "";
+			
+			$coreLoad = false;
+			if (isset($this->permissionCore[$nameSingle]))
+			{
+				$core = $this->permissionCore[$nameSingle];
+				$coreLoad = true;
+			}
+			$custom = '';
+			// check if the item has permissions.
+			if ($coreLoad && isset($core['core.access']) && isset($this->permissionBuilder['global'][$core['core.access']]) && ComponentbuilderHelper::checkArray($this->permissionBuilder['global'][$core['core.access']]) && in_array($nameSingle,$this->permissionBuilder['global'][$core['core.access']]))
+			{
+				$custom .= "\n\t\t//".$this->setLine(__LINE__)." Access control (".$core['core.access']." && ".$nameSingle.".submenu).";
+				$custom .= "\n\t\tif (\$user->authorise('".$core['core.access']."', 'com_".$codeName."') && \$user->authorise('".$nameSingle.".submenu', 'com_".$codeName."'))";
+				$custom .= "\n\t\t{";
+				// add tab to lines to follow
+				$tab = "\t";
+			}
+			else
+			{
+				$custom .= "\n\t\t//".$this->setLine(__LINE__)." Access control (".$nameSingle.".submenu).";
+				$custom .= "\n\t\tif (\$user->authorise('".$nameSingle.".submenu', 'com_".$codeName."'))";
+				$custom .= "\n\t\t{";
+				// add tab to lines to follow
+				$tab = "\t";
+			}
+			if (isset($menu['link']) && ComponentbuilderHelper::checkString($menu['link']))
+			{
+				
+				$this->langContent[$this->lang][$lang.'_'.$nameUpper] = $name;
+				// add custom menu
+				$custom .= "\n\t\t".$tab."JHtmlSidebar::addEntry(JText::_('".$lang."_".$nameUpper."'), '".$menu['link']."', \$submenu == '".$nameList."');";
+			}
+			else
+			{
+				$this->langContent[$this->lang][$lang.'_'.$nameUpper] = $name;
+				// add custom menu
+				$custom .= "\n\t\t".$tab."JHtmlSidebar::addEntry(JText::_('".$lang."_".$nameUpper."'), 'index.php?option=com_".$codeName."&view=".$nameList."', \$submenu == '".$nameList."');";
+			}
+			// check if the item has permissions.
+			$custom .= "\n\t\t}";
+
+			return $custom;
+		}
+		elseif($menu['submenu'] == 1 && empty($menu['before']))
+		{
+			// setup access defaults
+			$tab = "";
+			$nameSingle	= ComponentbuilderHelper::safeString($name);
+			$coreLoad = false;
+			if (isset($this->permissionCore[$nameSingle]))
+			{
+				$core = $this->permissionCore[$nameSingle];
+				$coreLoad = true;
+			}
+			$this->lastCustomSubMenu[$nr] = '';
+			// check if the item has permissions.
+			if ($coreLoad && isset($core['core.access']) && isset($this->permissionBuilder['global'][$core['core.access']]) && ComponentbuilderHelper::checkArray($this->permissionBuilder['global'][$core['core.access']]) && in_array($nameSingle,$this->permissionBuilder['global'][$core['core.access']]))
+			{
+				$this->lastCustomSubMenu[$nr] .= "\n\t\tif (\$user->authorise('".$core['core.access']."', 'com_".$codeName."') && \$user->authorise('".$nameSingle.".submenu', 'com_".$codeName."'))";
+				$this->lastCustomSubMenu[$nr] .= "\n\t\t{";
+				// add tab to lines to follow
+				$tab = "\t";
+			}
+			else
+			{
+				$this->lastCustomSubMenu[$nr] .= "\n\t\tif (\$user->authorise('".$nameSingle.".submenu', 'com_".$codeName."'))";
+				$this->lastCustomSubMenu[$nr] .= "\n\t\t{";
+				// add tab to lines to follow
+				$tab = "\t";
+			}
+			if (isset($menu['link']) && ComponentbuilderHelper::checkString($menu['link']))
+			{
+				$this->langContent[$this->lang][$lang.'_'.$nameUpper] = $name;
+				// add custom menu
+				$this->lastCustomSubMenu[$nr] .= "\n\t\t".$tab."JHtmlSidebar::addEntry(JText::_('".$lang."_".$nameUpper."'), '".$menu['link']."', \$submenu == '".$nameList."');";
+			}
+			else
+			{
+				$this->langContent[$this->lang][$lang.'_'.$nameUpper] = $name;
+				// add custom menu
+				$this->lastCustomSubMenu[$nr] .= "\n\t\t".$tab."JHtmlSidebar::addEntry(JText::_('".$lang."_".$nameUpper."'), 'index.php?option=com_".$codeName."&view=".$nameList."', \$submenu == '".$nameList."');";
+			}
+			// check if the item has permissions.
+			$this->lastCustomSubMenu[$nr] .= "\n\t\t}";
+		}
+		return false;
+	}
 
 	public function setMainMenus()
 	{
@@ -11061,15 +11286,25 @@ class Interpretation extends Fields
 				$this->configFieldSets[] = implode("\t\t",$this->configFieldSetsCustomField['Target Groups']);
 				unset($this->configFieldSetsCustomField['Target Groups']);
 			}
-			// close that fieldset
+			// close that fieldse
 			$this->configFieldSets[] = "\t";
 		}
 	}
-	
-	public function setGlobalConfigFieldsets($lang,$autorName,$autorEmail)
+
+	/**
+	 * @param $lang
+	 * @param $autorName
+	 * @param $autorEmail
+	 */
+	public function setGlobalConfigFieldsets($lang, $autorName, $autorEmail)
 	{
+		// set component name
+		$component = ComponentbuilderHelper::safeString($this->componentData->name_code);
+	    
 		// start building field set for config
 		$this->configFieldSets[] = 'configFieldSets[] = "\t\t".'addrulepath="/administrator/components/com_'.$component.'/models/rules"';
+		$this->configFieldSets[] = "\t\t".'addfieldpath="/administrator/components/com_'.$component.'/models/fields"';
 		$this->configFieldSets[] = "\t\t".'name="global_config"';
 		$this->configFieldSets[] = "\t\t".'label="'.$lang.'_GLOBAL_LABEL"';
 		$this->configFieldSets[] = "\t\t".'description="'.$lang.'_GLOBAL_DESC">';
@@ -11776,7 +12011,10 @@ for developing fast and powerful web interfaces. For more info visit langContent[$this->lang][$lang.'_VAXISTEXTSTYLEFONTCOLOR_LABEL']		= "vAxis Font Color";
 		}
 	}
-	
+
+	/**
+	 * @param $lang
+     */
 	public function setEncryptionConfigFieldsets($lang)
 	{
 		// Add encryption if needed
@@ -11861,58 +12099,59 @@ for developing fast and powerful web interfaces. For more info visit ';
-		$componentHead[] = "\t\t".'';
-		$componentHead[] = "\t\t".'';
+		$this->componentHead	= array();
+		$this->componentGlobal	= array();
+		$this->permissionViews	= array();
+		
+		$this->componentHead[] = '
'; + $this->componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; if ($this->addEximport) { $exportTitle = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Export Data','U'); $exportDesc = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Export Data','U').'_DESC'; $this->langContent['admin'][$exportTitle] = 'Export Data'; $this->langContent['admin'][$exportDesc] = ' Allows users in this group to export data.'; - $componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; $importTitle = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Import Data','U'); $importDesc = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Import Data','U').'_DESC'; $this->langContent['admin'][$importTitle] = 'Import Data'; $this->langContent['admin'][$importDesc] = ' Allows users in this group to import data.'; - $componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; } // version permission $batchTitle = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Use Batch','U'); $batchDesc = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Use Batch','U').'_DESC'; $this->langContent['admin'][$batchTitle] = 'Use Batch'; $this->langContent['admin'][$batchDesc] = ' Allows users in this group to use batch copy/update method.'; - $componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; // version permission $importTitle = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Edit Versions','U'); $importDesc = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Edit Versions','U').'_DESC'; $this->langContent['admin'][$importTitle] = 'Edit Version'; $this->langContent['admin'][$importDesc] = ' Allows users in this group to edit versions.'; - $componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; // set the defaults - $componentHead[] = "\t\t".''; - $componentHead[] = "\t\t".''; - $componentHead[] = "\t\t".''; - $componentHead[] = "\t\t".''; - $componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; // new custom created by permissions $created_byTitle = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Edit Created By','U'); $created_byDesc = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Edit Created By','U').'_DESC'; $this->langContent['admin'][$created_byTitle] = 'Edit Created By'; $this->langContent['admin'][$created_byDesc] = ' Allows users in this group to edit created by.'; - $componentHead[] = "\t\t".''; + $this->componentHead[] = "\t\t".''; // new custom created date permissions $createdTitle = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Edit Created Date','U'); $createdDesc = $this->langPrefix.'_'.ComponentbuilderHelper::safeString('Edit Created Date','U').'_DESC'; $this->langContent['admin'][$createdTitle] = 'Edit Created Date'; $this->langContent['admin'][$createdDesc] = ' Allows users in this group to edit created date.'; - $componentHead[] = "\t\t".''; - // setup the view array - $views = array(); - $componentGlobal = array(); + $this->componentHead[] = "\t\t".''; + // set the menu controller lookup $menuControllers = array('submenu','dashboard_list','dashboard_add'); // set the custom admin views permissions @@ -11928,9 +12167,9 @@ for developing fast and powerful web interfaces. For more info visit langContent['admin'][$customAdminTitle] = $customAdminName.' Access'; $this->langContent['admin'][$customAdminDesc] = ' Allows the users in this group to access '.ComponentbuilderHelper::safeString($customAdminName,'w').'.'; - $componentGlobal[$sortKey] = "\t\t".''; + $this->componentGlobal[$sortKey] = "\t\t".''; // add the custom permissions to use the buttons of this view - if (ComponentbuilderHelper::checkArray($custom_admin_view['settings']->custom_buttons)) + if (isset($custom_admin_view['settings']->custom_buttons) && ComponentbuilderHelper::checkArray($custom_admin_view['settings']->custom_buttons)) { foreach ($custom_admin_view['settings']->custom_buttons as $custom_buttons) { @@ -11941,7 +12180,7 @@ for developing fast and powerful web interfaces. For more info visit langContent['admin'][$customAdminButtonTitle] = $customAdminName.' '.$customAdminButtonName.' Button Access'; $this->langContent['admin'][$customAdminButtonDesc] = ' Allows the users in this group to access the '.ComponentbuilderHelper::safeString($customAdminButtonName,'w').' button.'; - $componentGlobal[$sortButtonKey] = "\t\t".''; + $this->componentGlobal[$sortButtonKey] = "\t\t".''; } } // add menu controll view that has menus options @@ -11950,9 +12189,27 @@ for developing fast and powerful web interfaces. For more info visit permissions) && ComponentbuilderHelper::checkArray($custom_admin_view['settings']->permissions)) + { + array_push($custom_admin_view['settings']->permissions,$menucontrollerView); + } + else + { + $custom_admin_view['settings']->permissions = array(); + $custom_admin_view['settings']->permissions[] = $menucontrollerView; + } + unset($menucontrollerView); } } + $this->buildPermissions($custom_admin_view, $customAdminCode, $customAdminCode, $menuControllers, 'customAdmin'); } } // set the site views permissions @@ -11968,7 +12225,7 @@ for developing fast and powerful web interfaces. For more info visit langContent['admin'][$siteTitle] = $siteName.' (Site) Access'; $this->langContent['admin'][$siteDesc] = ' Allows the users in this group to access site '.ComponentbuilderHelper::safeString($siteName,'w').'.'; - $componentGlobal[$sortKey] = "\t\t".''; + $this->componentGlobal[$sortKey] = "\t\t".''; // add the custom permissions to use the buttons of this view /* if (ComponentbuilderHelper::checkArray($site_view['settings']->custom_buttons)) { @@ -11981,7 +12238,7 @@ for developing fast and powerful web interfaces. For more info visit langContent['admin'][$siteButtonTitle] = $siteName.' '.$siteButtonName.' Button Access'; $this->langContent['admin'][$siteButtonDesc] = ' Allows the users in this group to access the '.ComponentbuilderHelper::safeString($siteButtonName,'w').' button.'; - $componentGlobal[$sortButtonKey] = "\t\t".''; + $this->componentGlobal[$sortButtonKey] = "\t\t".''; } } // add menu controll view that has menus options @@ -12070,269 +12327,13 @@ for developing fast and powerful web interfaces. For more info visit permissions) || $view['port'] || $view['history']) - { - // add export/import permissions to each view that has export/import options - if ($view['port']) - { - // export - $exportView['action'] = 'view.export'; - $exportView['implementation'] = '2'; - if (ComponentbuilderHelper::checkArray($view['settings']->permissions)) - { - array_push($view['settings']->permissions,$exportView); - } - else - { - $view['settings']->permissions = array(); - $view['settings']->permissions[] = $exportView; - } - // import - $importView['action'] = 'view.import'; - $importView['implementation'] = '2'; - if (ComponentbuilderHelper::checkArray($view['settings']->permissions)) - { - array_push($view['settings']->permissions,$importView); - } - else - { - $view['settings']->permissions = array(); - $view['settings']->permissions[] = $importView; - } - } - // add version opstions to each view that has it added - if ($view['history']) - { - // set version control - $versionView['action'] = 'view.version'; - $versionView['implementation'] = '3'; - if (ComponentbuilderHelper::checkArray($view['settings']->permissions)) - { - array_push($view['settings']->permissions,$versionView); - } - else - { - $view['settings']->permissions = array(); - $view['settings']->permissions[] = $versionView; - } - } - // set batch control - $batchView['action'] = 'view.batch'; - $batchView['implementation'] = '2'; - if (ComponentbuilderHelper::checkArray($view['settings']->permissions)) - { - array_push($view['settings']->permissions,$batchView); - } - else - { - $view['settings']->permissions = array(); - $view['settings']->permissions[] = $batchView; - } - - foreach ($view['settings']->permissions as $permission) - { - // set acction name - $arr = explode('.',trim($permission['action'])); - if ($arr[0] != 'core' || $arr[0] == 'view') - { - array_shift($arr); - $actionMain = implode('.',$arr); - $action = $nameView.'.'.$actionMain; - } - else - { - if ($arr[0] == 'core') - { - // core is already set in global access - $permission['implementation'] = 1; - } - $action = $permission['action']; - } - // build action name - $actionNameBuilder = explode('.',trim($permission['action'])); - array_shift($actionNameBuilder); - $nameBuilder = trim(implode('___',$actionNameBuilder)); - $customName = trim(implode(' ',$actionNameBuilder)); - $W_NameList = ComponentbuilderHelper::safeString($view['settings']->name_list, 'W'); - $w_NameList = ComponentbuilderHelper::safeString($customName.' '.$view['settings']->name_list, 'w'); - $w_NameSingle = ComponentbuilderHelper::safeString($view['settings']->name_single, 'w'); - switch ($nameBuilder) - { - case 'edit': - // set edit title - $permission['title'] = $W_NameList . ' Edit'; - // set edit description - $permission['description'] = ' Allows the users in this group to edit the ' . $w_NameSingle; - break; - case 'edit___own': - // set edit title - $permission['title'] = $W_NameList . ' Edit Own'; - // set edit description - $permission['description'] = ' Allows the users in this group to edit ' . $w_NameList . ' created by them'; - break; - case 'edit___state': - // set edit title - $permission['title'] = $W_NameList . ' Edit State'; - // set edit description - $permission['description'] = ' Allows the users in this group to update the state of the ' . $w_NameSingle; - break; - case 'edit___created_by': - // set edit title - $permission['title'] = $W_NameList . ' Edit Created By'; - // set edit description - $permission['description'] = ' Allows the users in this group to update the created by of the ' . $w_NameList; - break; - case 'edit___created': - // set edit title - $permission['title'] = $W_NameList . ' Edit Created Date'; - // set edit description - $permission['description'] = ' Allows the users in this group to update the created date of the ' . $w_NameList; - break; - case 'create': - // set edit title - $permission['title'] = $W_NameList . ' Create'; - // set edit description - $permission['description'] = ' Allows the users in this group to create ' . $w_NameList; - break; - case 'delete': - // set edit title - $permission['title'] = $W_NameList . ' Delete'; - // set edit description - $permission['description'] = ' Allows the users in this group to delete ' . $w_NameList; - break; - case 'access': - // set edit title - $permission['title'] = $W_NameList . ' Access'; - // set edit description - $permission['description'] = ' Allows the users in this group to access ' . $w_NameList; - break; - case 'export': - // set edit title - $permission['title'] = $W_NameList . ' Export'; - // set edit description - $permission['description'] = ' Allows the users in this group to export ' . $w_NameList; - break; - case 'import': - // set edit title - $permission['title'] = $W_NameList . ' Import'; - // set edit description - $permission['description'] = ' Allows the users in this group to import ' . $w_NameList; - break; - case 'version': - // set edit title - $permission['title'] = $W_NameList . ' Edit Version'; - // set edit description - $permission['description'] = ' Allows users in this group to edit versions of ' . $w_NameList; - break; - case 'batch': - // set edit title - $permission['title'] = $W_NameList . ' Batch Use'; - // set edit description - $permission['description'] = ' Allows users in this group to use batch copy/update method of ' . $w_NameList; - break; - default: - // set edit title - $permission['title'] = $W_NameList . ' ' . ComponentbuilderHelper::safeString($customName, 'W'); - // set edit description - $permission['description'] = ' Allows the users in this group to update the ' . ComponentbuilderHelper::safeString($customName, 'w') . ' of the ' . $w_NameSingle; - break; - } - // if core is not used update all core strings - $coreCheck = explode('.',$action); - $coreCheck[0] = 'core'; - $coreTarget = implode('.',$coreCheck); - $this->permissionCore[$nameView][$coreTarget] = $action; - // set array sort name - $sortKey = ComponentbuilderHelper::safeString($permission['title']); - // set title - $title = $this->langPrefix.'_'.ComponentbuilderHelper::safeString($permission['title'],'U'); - // load the actions - if ($permission['implementation'] == 1) - { - // only related to view - $views[$nameView][] = ''; - // load permission to action - $this->permissionBuilder[$action][$nameView] = $nameView; - } - elseif ($permission['implementation'] == 2) - { - // relation to whole component - $componentGlobal[$sortKey] = "\t\t".''; - // build permission switch - $this->permissionBuilder['global'][$action][$nameView] = $nameView; - // dashboard icon checker - if ($coreTarget == 'core.access') - { - $this->permissionDashboard[] = "'" . $nameViews . ".access' => '" . $action . "'"; - $this->permissionDashboard[] = "'" . $nameView . ".access' => '" . $action . "'"; - } - if ($coreTarget == 'core.create') - { - $this->permissionDashboard[] = "'" . $nameView . ".create' => '" . $action . "'"; - } - // add menu controll view that has menus options - foreach ($menuControllers as $menuController) - { - if ($coreTarget == 'core.'.$menuController) - { - if ($menuController == 'dashboard_add') - { - $this->permissionDashboard[] = "'" . $nameView . ".".$menuController."' => '" . $action . "'"; - } - else - { - $this->permissionDashboard[] = "'" . $nameViews . ".".$menuController."' => '" . $action . "'"; - } - } - } - } - elseif ($permission['implementation'] == 3) - { - // only related to view - $views[$nameView][] = ''; - // load permission to action - $this->permissionBuilder[$action][$nameView] = $nameView; - // relation to whole component - $componentGlobal[$sortKey] = "\t\t".''; - // build permission switch - $this->permissionBuilder['global'][$action][$nameView] = $nameView; - // dashboard icon checker - if ($coreTarget == 'core.access') - { - $this->permissionDashboard[] = "'" . $nameViews . ".access' => '" . $action . "'"; - $this->permissionDashboard[] = "'" . $nameView . ".access' => '" . $action . "'"; - } - if ($coreTarget == 'core.create') - { - $this->permissionDashboard[] = "'" . $nameView . ".create' => '" . $action . "'"; - } - // add menu controll view that has menus options - foreach ($menuControllers as $menuController) - { - if ($coreTarget == 'core.'.$menuController) - { - if ($menuController == 'dashboard_add') - { - $this->permissionDashboard[] = "'" . $nameView . ".".$menuController."' => '" . $action . "'"; - } - else - { - $this->permissionDashboard[] = "'" . $nameViews . ".".$menuController."' => '" . $action . "'"; - } - } - } - } - // set to language file - $this->langContent['admin'][$title] = trim($permission['title']); - $this->langContent['admin'][$title.'_DESC'] = trim($permission['description']); - } - } + $this->buildPermissions($view, $nameView, $nameViews, $menuControllers); } } // set the views permissions now - if (ComponentbuilderHelper::checkArray($views)) + if (ComponentbuilderHelper::checkArray($this->permissionViews)) { - foreach ($views as $viewName => $actions) + foreach ($this->permissionViews as $viewName => $actions) { $componentViews[] = "\t".'
'; foreach ($actions as $action) @@ -12343,18 +12344,294 @@ for developing fast and powerful web interfaces. For more info visit componentHead); // sort the array to insure easy search - ksort($componentGlobal,SORT_STRING); + ksort($this->componentGlobal,SORT_STRING); // add global to the compnent section - $component .= "\n".implode("\n",$componentGlobal)."\n\t
"; + $component .= "\n".implode("\n",$this->componentGlobal)."\n\t
"; // add views to the compnent section $component .= "\n".implode("\n",$componentViews); + // be sure to reset again. (memory) + $this->componentHead = null; + $this->componentGlobal = null; + $this->permissionViews = null; // return the build return $component; } return false; } + + public function buildPermissions(&$view, $nameView, $nameViews, $menuControllers, $type = 'admin') + { + if (ComponentbuilderHelper::checkArray($view['settings']->permissions) || (isset($view['port']) && $view['port']) || (isset($view['history']) && $view['history'])) + { + // add export/import permissions to each view that has export/import options + if (isset($view['port']) && $view['port']) + { + // export + $exportView['action'] = 'view.export'; + $exportView['implementation'] = '2'; + if (ComponentbuilderHelper::checkArray($view['settings']->permissions)) + { + array_push($view['settings']->permissions,$exportView); + } + else + { + $view['settings']->permissions = array(); + $view['settings']->permissions[] = $exportView; + } + // import + $importView['action'] = 'view.import'; + $importView['implementation'] = '2'; + if (ComponentbuilderHelper::checkArray($view['settings']->permissions)) + { + array_push($view['settings']->permissions,$importView); + } + else + { + $view['settings']->permissions = array(); + $view['settings']->permissions[] = $importView; + } + } + // add version opstions to each view that has it added + if (isset($view['history']) && $view['history']) + { + // set version control + $versionView['action'] = 'view.version'; + $versionView['implementation'] = '3'; + if (ComponentbuilderHelper::checkArray($view['settings']->permissions)) + { + array_push($view['settings']->permissions,$versionView); + } + else + { + $view['settings']->permissions = array(); + $view['settings']->permissions[] = $versionView; + } + } + if ($type == 'admin') + { + // set batch control + $batchView['action'] = 'view.batch'; + $batchView['implementation'] = '2'; + if (ComponentbuilderHelper::checkArray($view['settings']->permissions)) + { + array_push($view['settings']->permissions,$batchView); + } + else + { + $view['settings']->permissions = array(); + $view['settings']->permissions[] = $batchView; + } + } + foreach ($view['settings']->permissions as $permission) + { + // set acction name + $arr = explode('.',trim($permission['action'])); + if ($arr[0] != 'core' || $arr[0] == 'view') + { + array_shift($arr); + $actionMain = implode('.',$arr); + $action = $nameView.'.'.$actionMain; + } + else + { + if ($arr[0] == 'core') + { + // core is already set in global access + $permission['implementation'] = 1; + } + $action = $permission['action']; + } + // build action name + $actionNameBuilder = explode('.',trim($permission['action'])); + array_shift($actionNameBuilder); + $nameBuilder = trim(implode('___',$actionNameBuilder)); + $customName = trim(implode(' ',$actionNameBuilder)); + if ($type == 'admin') + { + $W_NameList = ComponentbuilderHelper::safeString($view['settings']->name_list, 'W'); + $w_NameList = ComponentbuilderHelper::safeString($customName.' '.$view['settings']->name_list, 'w'); + $w_NameSingle = ComponentbuilderHelper::safeString($view['settings']->name_single, 'w'); + } + elseif ($type == 'customAdmin') + { + $W_NameList = ComponentbuilderHelper::safeString($view['settings']->name, 'W'); + $w_NameList = $view['settings']->name; + $w_NameSingle = $view['settings']->name; + } + switch ($nameBuilder) + { + case 'edit': + // set edit title + $permission['title'] = $W_NameList . ' Edit'; + // set edit description + $permission['description'] = ' Allows the users in this group to edit the ' . $w_NameSingle; + break; + case 'edit___own': + // set edit title + $permission['title'] = $W_NameList . ' Edit Own'; + // set edit description + $permission['description'] = ' Allows the users in this group to edit ' . $w_NameList . ' created by them'; + break; + case 'edit___state': + // set edit title + $permission['title'] = $W_NameList . ' Edit State'; + // set edit description + $permission['description'] = ' Allows the users in this group to update the state of the ' . $w_NameSingle; + break; + case 'edit___created_by': + // set edit title + $permission['title'] = $W_NameList . ' Edit Created By'; + // set edit description + $permission['description'] = ' Allows the users in this group to update the created by of the ' . $w_NameList; + break; + case 'edit___created': + // set edit title + $permission['title'] = $W_NameList . ' Edit Created Date'; + // set edit description + $permission['description'] = ' Allows the users in this group to update the created date of the ' . $w_NameList; + break; + case 'create': + // set edit title + $permission['title'] = $W_NameList . ' Create'; + // set edit description + $permission['description'] = ' Allows the users in this group to create ' . $w_NameList; + break; + case 'delete': + // set edit title + $permission['title'] = $W_NameList . ' Delete'; + // set edit description + $permission['description'] = ' Allows the users in this group to delete ' . $w_NameList; + break; + case 'access': + // set edit title + $permission['title'] = $W_NameList . ' Access'; + // set edit description + $permission['description'] = ' Allows the users in this group to access ' . $w_NameList; + break; + case 'export': + // set edit title + $permission['title'] = $W_NameList . ' Export'; + // set edit description + $permission['description'] = ' Allows the users in this group to export ' . $w_NameList; + break; + case 'import': + // set edit title + $permission['title'] = $W_NameList . ' Import'; + // set edit description + $permission['description'] = ' Allows the users in this group to import ' . $w_NameList; + break; + case 'version': + // set edit title + $permission['title'] = $W_NameList . ' Edit Version'; + // set edit description + $permission['description'] = ' Allows users in this group to edit versions of ' . $w_NameList; + break; + case 'batch': + // set edit title + $permission['title'] = $W_NameList . ' Batch Use'; + // set edit description + $permission['description'] = ' Allows users in this group to use batch copy/update method of ' . $w_NameList; + break; + default: + // set edit title + $permission['title'] = $W_NameList . ' ' . ComponentbuilderHelper::safeString($customName, 'W'); + // set edit description + $permission['description'] = ' Allows the users in this group to update the ' . ComponentbuilderHelper::safeString($customName, 'w') . ' of the ' . $w_NameSingle; + break; + } + // if core is not used update all core strings + $coreCheck = explode('.',$action); + $coreCheck[0] = 'core'; + $coreTarget = implode('.',$coreCheck); + $this->permissionCore[$nameView][$coreTarget] = $action; + // set array sort name + $sortKey = ComponentbuilderHelper::safeString($permission['title']); + // set title + $title = $this->langPrefix.'_'.ComponentbuilderHelper::safeString($permission['title'],'U'); + // load the actions + if ($permission['implementation'] == 1) + { + // only related to view + $this->permissionViews[$nameView][] = ''; + // load permission to action + $this->permissionBuilder[$action][$nameView] = $nameView; + } + elseif ($permission['implementation'] == 2) + { + // relation to whole component + $this->componentGlobal[$sortKey] = "\t\t".''; + // build permission switch + $this->permissionBuilder['global'][$action][$nameView] = $nameView; + // dashboard icon checker + if ($coreTarget == 'core.access') + { + $this->permissionDashboard[] = "'" . $nameViews . ".access' => '" . $action . "'"; + $this->permissionDashboard[] = "'" . $nameView . ".access' => '" . $action . "'"; + } + if ($coreTarget == 'core.create') + { + $this->permissionDashboard[] = "'" . $nameView . ".create' => '" . $action . "'"; + } + // add menu controll view that has menus options + foreach ($menuControllers as $menuController) + { + if ($coreTarget == 'core.'.$menuController) + { + if ($menuController == 'dashboard_add') + { + $this->permissionDashboard[] = "'" . $nameView . ".".$menuController."' => '" . $action . "'"; + } + else + { + $this->permissionDashboard[] = "'" . $nameViews . ".".$menuController."' => '" . $action . "'"; + } + } + } + } + elseif ($permission['implementation'] == 3) + { + // only related to view + $this->permissionViews[$nameView][] = ''; + // load permission to action + $this->permissionBuilder[$action][$nameView] = $nameView; + // relation to whole component + $this->componentGlobal[$sortKey] = "\t\t".''; + // build permission switch + $this->permissionBuilder['global'][$action][$nameView] = $nameView; + // dashboard icon checker + if ($coreTarget == 'core.access') + { + $this->permissionDashboard[] = "'" . $nameViews . ".access' => '" . $action . "'"; + $this->permissionDashboard[] = "'" . $nameView . ".access' => '" . $action . "'"; + } + if ($coreTarget == 'core.create') + { + $this->permissionDashboard[] = "'" . $nameView . ".create' => '" . $action . "'"; + } + // add menu controll view that has menus options + foreach ($menuControllers as $menuController) + { + if ($coreTarget == 'core.'.$menuController) + { + if ($menuController == 'dashboard_add') + { + $this->permissionDashboard[] = "'" . $nameView . ".".$menuController."' => '" . $action . "'"; + } + else + { + $this->permissionDashboard[] = "'" . $nameViews . ".".$menuController."' => '" . $action . "'"; + } + } + } + } + // set to language file + $this->langContent['admin'][$title] = trim($permission['title']); + $this->langContent['admin'][$title.'_DESC'] = trim($permission['description']); + } + } + } public function getFieldName($typeName,$xml,$alias) { diff --git a/admin/helpers/compiler/f_Infusion.php b/admin/helpers/compiler/f_Infusion.php index 7f52c8a0e..cf9b2f33d 100644 --- a/admin/helpers/compiler/f_Infusion.php +++ b/admin/helpers/compiler/f_Infusion.php @@ -68,7 +68,7 @@ class Infusion extends Interpretation $this->fileContentStatic['###component###'] = ComponentbuilderHelper::safeString($this->componentData->name_code); // ###COMPANYNAME### - $this->fileContentStatic['###COMPANYNAME###'] = trim($this->componentData->companyname); + $this->fileContentStatic['###COMPANYNAME###'] = trim(JFilterOutput::cleanText($this->componentData->companyname)); // ###CREATIONDATE### $this->fileContentStatic['###CREATIONDATE###'] = JFactory::getDate($this->componentData->created)->format('jS F, Y'); @@ -77,7 +77,7 @@ class Infusion extends Interpretation $this->fileContentStatic['###BUILDDATE###'] = JFactory::getDate()->format('jS F, Y'); // ###AUTHOR### - $this->fileContentStatic['###AUTHOR###'] = trim($this->componentData->author); + $this->fileContentStatic['###AUTHOR###'] = trim(JFilterOutput::cleanText($this->componentData->author)); // ###AUTHOREMAIL### $this->fileContentStatic['###AUTHOREMAIL###'] = trim($this->componentData->email); @@ -95,10 +95,10 @@ class Infusion extends Interpretation $this->fileContentStatic['###VERSION###'] = trim($this->componentData->component_version); // ###Component_name### - $this->fileContentStatic['###Component_name###'] = ComponentbuilderHelper::safeString($this->componentData->name,'W'); + $this->fileContentStatic['###Component_name###'] = JFilterOutput::cleanText($this->componentData->name);; // ###SHORT_DISCRIPTION### - $this->fileContentStatic['###SHORT_DESCRIPTION###'] = trim($this->componentData->short_description); + $this->fileContentStatic['###SHORT_DESCRIPTION###'] = trim(JFilterOutput::cleanText($this->componentData->short_description)); // ###DESCRIPTION### $this->fileContentStatic['###DESCRIPTION###'] = trim($this->componentData->description); @@ -169,6 +169,9 @@ class Infusion extends Interpretation $this->fileContentStatic['###ROUTER_PARSE_SWITCH###'] = ''; // build route views $this->fileContentStatic['###ROUTER_BUILD_VIEWS###'] = ''; + + // add the helper emailer if set + $this->fileContentStatic['###HELPER_EMAIL###'] = $this->addEmailHelper(); // setup back-views and all needed stuff for the admin if (isset($this->componentData->admin_views) && ComponentbuilderHelper::checkArray($this->componentData->admin_views)) diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index 19f40f673..5a8d0f684 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php @@ -749,7 +749,7 @@ abstract class ComponentbuilderHelper $query = $db->getQuery(true); $query->select(array('a.published')); $query->from('#__componentbuilder_'.$type.' AS a'); - $query->where('a.id = '.$id); + $query->where('a.id = '. (int) $id); $query->where('a.published = 1'); $db->setQuery($query); $db->execute(); @@ -767,7 +767,7 @@ abstract class ComponentbuilderHelper $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(); diff --git a/admin/helpers/html/batch_.php b/admin/helpers/html/batch_.php index a98345ca5..903d945b3 100644 --- a/admin/helpers/html/batch_.php +++ b/admin/helpers/html/batch_.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage batch_.php diff --git a/admin/helpers/indenter.php b/admin/helpers/indenter.php index 0766828c1..2f01cf8b2 100644 --- a/admin/helpers/indenter.php +++ b/admin/helpers/indenter.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage indenter.php diff --git a/admin/helpers/js.php b/admin/helpers/js.php index 3456d8592..63191ba93 100644 --- a/admin/helpers/js.php +++ b/admin/helpers/js.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage js.php diff --git a/admin/helpers/minify.php b/admin/helpers/minify.php index 7085019b8..d28531bf9 100644 --- a/admin/helpers/minify.php +++ b/admin/helpers/minify.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage minify.php diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index 5bc76a450..b9b8f53d8 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -953,6 +953,8 @@ COM_COMPONENTBUILDER_COMPONENT_VERSION_LABEL="SQL Update Version" COM_COMPONENTBUILDER_COMPONENT_VERSION_UPDATE="Version Update" COM_COMPONENTBUILDER_COMPONENT_VERSION_UPDATE_DESCRIPTION="Add Version Updates Here!" COM_COMPONENTBUILDER_COMPONENT_VERSION_UPDATE_SELECT="Add Update SQL" +COM_COMPONENTBUILDER_COMPONENT_VTHREE="V3" +COM_COMPONENTBUILDER_COMPONENT_VTWO="V2" COM_COMPONENTBUILDER_COMPONENT_WAND="Wand" COM_COMPONENTBUILDER_COMPONENT_WARNING="Warning" COM_COMPONENTBUILDER_COMPONENT_WARNING_CIRCLE="Warning Circle" diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini index fdeb4f482..537f1d516 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini @@ -1,4 +1,4 @@ -COM_COMPONENTBUILDER="Component Builder" +COM_COMPONENTBUILDER="Component Builder Configuration" COM_COMPONENTBUILDER_CONFIGURATION="Component Builder Configuration" COM_COMPONENTBUILDER_MENU="» Component Builder" COM_COMPONENTBUILDER_MENU_ADMIN_VIEWS="Admin Views" diff --git a/admin/layouts/admin_view/css_fullwidth.php b/admin/layouts/admin_view/css_fullwidth.php index c40207f8e..e434b3877 100644 --- a/admin/layouts/admin_view/css_fullwidth.php +++ b/admin/layouts/admin_view/css_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage css_fullwidth.php diff --git a/admin/layouts/admin_view/fields_fullwidth.php b/admin/layouts/admin_view/fields_fullwidth.php index a6a03b630..175833946 100644 --- a/admin/layouts/admin_view/fields_fullwidth.php +++ b/admin/layouts/admin_view/fields_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fields_fullwidth.php @@ -43,7 +43,7 @@ $can = ComponentbuilderHelper::getActions('field');

-
"; + $head .= "\n\t\t"; $head .= "\n\t\t\t"; $head .= "\n\t\t'; + $head .= "\n\t\t".''; $head .= "\n\t\t\t"; $head .= "\n\t\t'; + $head .= "\n\t\t".''; $head .= "\n\t\t\t"; $head .= "\n\t\t
+
diff --git a/admin/layouts/admin_view/javascript_fullwidth.php b/admin/layouts/admin_view/javascript_fullwidth.php index e2821dd3f..86e42c40a 100644 --- a/admin/layouts/admin_view/javascript_fullwidth.php +++ b/admin/layouts/admin_view/javascript_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage javascript_fullwidth.php diff --git a/admin/layouts/admin_view/mysql_fullwidth.php b/admin/layouts/admin_view/mysql_fullwidth.php index 7aadd437a..725c9e9d8 100644 --- a/admin/layouts/admin_view/mysql_fullwidth.php +++ b/admin/layouts/admin_view/mysql_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage mysql_fullwidth.php diff --git a/admin/layouts/admin_view/mysql_left.php b/admin/layouts/admin_view/mysql_left.php index 30637926e..9796fad7d 100644 --- a/admin/layouts/admin_view/mysql_left.php +++ b/admin/layouts/admin_view/mysql_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage mysql_left.php diff --git a/admin/layouts/admin_view/php_fullwidth.php b/admin/layouts/admin_view/php_fullwidth.php index d9e2f945f..88cccc780 100644 --- a/admin/layouts/admin_view/php_fullwidth.php +++ b/admin/layouts/admin_view/php_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage php_fullwidth.php diff --git a/admin/layouts/admin_view/publishing.php b/admin/layouts/admin_view/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/admin_view/publishing.php +++ b/admin/layouts/admin_view/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/admin_view/publlshing.php b/admin/layouts/admin_view/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/admin_view/publlshing.php +++ b/admin/layouts/admin_view/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/admin_view/settings_above.php b/admin/layouts/admin_view/settings_above.php index 108f13563..2e09bd394 100644 --- a/admin/layouts/admin_view/settings_above.php +++ b/admin/layouts/admin_view/settings_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage settings_above.php diff --git a/admin/layouts/admin_view/settings_left.php b/admin/layouts/admin_view/settings_left.php index afb32e312..028dfb4c8 100644 --- a/admin/layouts/admin_view/settings_left.php +++ b/admin/layouts/admin_view/settings_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage settings_left.php diff --git a/admin/layouts/admin_view/settings_right.php b/admin/layouts/admin_view/settings_right.php index 3380461eb..afca2ecdb 100644 --- a/admin/layouts/admin_view/settings_right.php +++ b/admin/layouts/admin_view/settings_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage settings_right.php diff --git a/admin/layouts/admin_view/settings_under.php b/admin/layouts/admin_view/settings_under.php index d1616b0be..66202b7e1 100644 --- a/admin/layouts/admin_view/settings_under.php +++ b/admin/layouts/admin_view/settings_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage settings_under.php diff --git a/admin/layouts/batchselection.php b/admin/layouts/batchselection.php index 9bf4111b8..9cb2e5b1c 100644 --- a/admin/layouts/batchselection.php +++ b/admin/layouts/batchselection.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage batchselection.php diff --git a/admin/layouts/component/admin_views_fullwidth.php b/admin/layouts/component/admin_views_fullwidth.php index f64a0d77f..a30c5388b 100644 --- a/admin/layouts/component/admin_views_fullwidth.php +++ b/admin/layouts/component/admin_views_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_views_fullwidth.php @@ -43,7 +43,7 @@ $can = ComponentbuilderHelper::getActions('admin_view');

- +
diff --git a/admin/layouts/component/details_above.php b/admin/layouts/component/details_above.php index f5da3f77b..27d774b86 100644 --- a/admin/layouts/component/details_above.php +++ b/admin/layouts/component/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/component/details_left.php b/admin/layouts/component/details_left.php index 8287ee288..eea9e69ed 100644 --- a/admin/layouts/component/details_left.php +++ b/admin/layouts/component/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/component/details_right.php b/admin/layouts/component/details_right.php index 7fdc13995..fb33f61e0 100644 --- a/admin/layouts/component/details_right.php +++ b/admin/layouts/component/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/component/details_under.php b/admin/layouts/component/details_under.php index 748afa4fe..f22945d67 100644 --- a/admin/layouts/component/details_under.php +++ b/admin/layouts/component/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/component/ftp_servers_fullwidth.php b/admin/layouts/component/ftp_servers_fullwidth.php index f1cf1131b..cb9e09c47 100644 --- a/admin/layouts/component/ftp_servers_fullwidth.php +++ b/admin/layouts/component/ftp_servers_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage ftp_servers_fullwidth.php diff --git a/admin/layouts/component/publishing.php b/admin/layouts/component/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/component/publishing.php +++ b/admin/layouts/component/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/component/publlshing.php b/admin/layouts/component/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/component/publlshing.php +++ b/admin/layouts/component/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/component/readme_left.php b/admin/layouts/component/readme_left.php index 271b2b214..f777b2acd 100644 --- a/admin/layouts/component/readme_left.php +++ b/admin/layouts/component/readme_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage readme_left.php diff --git a/admin/layouts/component/readme_right.php b/admin/layouts/component/readme_right.php index 3734b1242..2b0ca399d 100644 --- a/admin/layouts/component/readme_right.php +++ b/admin/layouts/component/readme_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage readme_right.php diff --git a/admin/layouts/component/scripts_fullwidth.php b/admin/layouts/component/scripts_fullwidth.php index 48a6e7195..70190ef1d 100644 --- a/admin/layouts/component/scripts_fullwidth.php +++ b/admin/layouts/component/scripts_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage scripts_fullwidth.php diff --git a/admin/layouts/component/settings_left.php b/admin/layouts/component/settings_left.php index 95a66e1a1..ff15ac669 100644 --- a/admin/layouts/component/settings_left.php +++ b/admin/layouts/component/settings_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage settings_left.php diff --git a/admin/layouts/component/settings_right.php b/admin/layouts/component/settings_right.php index e4cb5d33c..2fa17d688 100644 --- a/admin/layouts/component/settings_right.php +++ b/admin/layouts/component/settings_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage settings_right.php diff --git a/admin/layouts/component/site_views_fullwidth.php b/admin/layouts/component/site_views_fullwidth.php index 30bf1fde4..b219b293a 100644 --- a/admin/layouts/component/site_views_fullwidth.php +++ b/admin/layouts/component/site_views_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_views_fullwidth.php @@ -43,7 +43,7 @@ $can = ComponentbuilderHelper::getActions('site_view');

- +
diff --git a/admin/layouts/custom_admin_view/custom_buttons_fullwidth.php b/admin/layouts/custom_admin_view/custom_buttons_fullwidth.php index aa613c925..cac930333 100644 --- a/admin/layouts/custom_admin_view/custom_buttons_fullwidth.php +++ b/admin/layouts/custom_admin_view/custom_buttons_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_fullwidth.php diff --git a/admin/layouts/custom_admin_view/custom_buttons_left.php b/admin/layouts/custom_admin_view/custom_buttons_left.php index 137405f96..a69e0b326 100644 --- a/admin/layouts/custom_admin_view/custom_buttons_left.php +++ b/admin/layouts/custom_admin_view/custom_buttons_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_left.php diff --git a/admin/layouts/custom_admin_view/custom_script_fullwidth.php b/admin/layouts/custom_admin_view/custom_script_fullwidth.php index 3b1959621..dc0aa1f30 100644 --- a/admin/layouts/custom_admin_view/custom_script_fullwidth.php +++ b/admin/layouts/custom_admin_view/custom_script_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_script_fullwidth.php diff --git a/admin/layouts/custom_admin_view/details_above.php b/admin/layouts/custom_admin_view/details_above.php index f5da3f77b..27d774b86 100644 --- a/admin/layouts/custom_admin_view/details_above.php +++ b/admin/layouts/custom_admin_view/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/custom_admin_view/details_fullwidth.php b/admin/layouts/custom_admin_view/details_fullwidth.php index 52dc0e441..37153699a 100644 --- a/admin/layouts/custom_admin_view/details_fullwidth.php +++ b/admin/layouts/custom_admin_view/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/custom_admin_view/details_left.php b/admin/layouts/custom_admin_view/details_left.php index cb254250f..a190b75a6 100644 --- a/admin/layouts/custom_admin_view/details_left.php +++ b/admin/layouts/custom_admin_view/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/custom_admin_view/details_right.php b/admin/layouts/custom_admin_view/details_right.php index 4a900b664..536df3e28 100644 --- a/admin/layouts/custom_admin_view/details_right.php +++ b/admin/layouts/custom_admin_view/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/custom_admin_view/details_rightside.php b/admin/layouts/custom_admin_view/details_rightside.php index c8316382a..289397c5d 100644 --- a/admin/layouts/custom_admin_view/details_rightside.php +++ b/admin/layouts/custom_admin_view/details_rightside.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_rightside.php diff --git a/admin/layouts/custom_admin_view/details_under.php b/admin/layouts/custom_admin_view/details_under.php index 748afa4fe..f22945d67 100644 --- a/admin/layouts/custom_admin_view/details_under.php +++ b/admin/layouts/custom_admin_view/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/custom_admin_view/publishing.php b/admin/layouts/custom_admin_view/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/custom_admin_view/publishing.php +++ b/admin/layouts/custom_admin_view/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/custom_admin_view/publlshing.php b/admin/layouts/custom_admin_view/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/custom_admin_view/publlshing.php +++ b/admin/layouts/custom_admin_view/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/dynamic_get/abacus_fullwidth.php b/admin/layouts/dynamic_get/abacus_fullwidth.php index 2fd465f82..fa6bea2f3 100644 --- a/admin/layouts/dynamic_get/abacus_fullwidth.php +++ b/admin/layouts/dynamic_get/abacus_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage abacus_fullwidth.php diff --git a/admin/layouts/dynamic_get/abacus_left.php b/admin/layouts/dynamic_get/abacus_left.php index fa124d2ea..c2d4bb761 100644 --- a/admin/layouts/dynamic_get/abacus_left.php +++ b/admin/layouts/dynamic_get/abacus_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage abacus_left.php diff --git a/admin/layouts/dynamic_get/custom_script_fullwidth.php b/admin/layouts/dynamic_get/custom_script_fullwidth.php index 184bd9cbc..9436274c0 100644 --- a/admin/layouts/dynamic_get/custom_script_fullwidth.php +++ b/admin/layouts/dynamic_get/custom_script_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_script_fullwidth.php diff --git a/admin/layouts/dynamic_get/gettable_above.php b/admin/layouts/dynamic_get/gettable_above.php index a07d2ddce..7c9a2ca22 100644 --- a/admin/layouts/dynamic_get/gettable_above.php +++ b/admin/layouts/dynamic_get/gettable_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage gettable_above.php diff --git a/admin/layouts/dynamic_get/gettable_fullwidth.php b/admin/layouts/dynamic_get/gettable_fullwidth.php index 9e16ccd1a..2bf1361fe 100644 --- a/admin/layouts/dynamic_get/gettable_fullwidth.php +++ b/admin/layouts/dynamic_get/gettable_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage gettable_fullwidth.php diff --git a/admin/layouts/dynamic_get/gettable_left.php b/admin/layouts/dynamic_get/gettable_left.php index d84ec1db8..bc224e7d5 100644 --- a/admin/layouts/dynamic_get/gettable_left.php +++ b/admin/layouts/dynamic_get/gettable_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage gettable_left.php diff --git a/admin/layouts/dynamic_get/gettable_right.php b/admin/layouts/dynamic_get/gettable_right.php index 63a797b3a..a990a05c5 100644 --- a/admin/layouts/dynamic_get/gettable_right.php +++ b/admin/layouts/dynamic_get/gettable_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage gettable_right.php diff --git a/admin/layouts/dynamic_get/gettable_under.php b/admin/layouts/dynamic_get/gettable_under.php index f74e81b30..a2ea3ee9d 100644 --- a/admin/layouts/dynamic_get/gettable_under.php +++ b/admin/layouts/dynamic_get/gettable_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage gettable_under.php diff --git a/admin/layouts/dynamic_get/publishing.php b/admin/layouts/dynamic_get/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/dynamic_get/publishing.php +++ b/admin/layouts/dynamic_get/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/dynamic_get/publlshing.php b/admin/layouts/dynamic_get/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/dynamic_get/publlshing.php +++ b/admin/layouts/dynamic_get/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/field/details_fullwidth.php b/admin/layouts/field/details_fullwidth.php index 55c6c23b5..d0cea58ad 100644 --- a/admin/layouts/field/details_fullwidth.php +++ b/admin/layouts/field/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/field/details_left.php b/admin/layouts/field/details_left.php index 22886fd47..f0bd99da2 100644 --- a/admin/layouts/field/details_left.php +++ b/admin/layouts/field/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/field/details_right.php b/admin/layouts/field/details_right.php index 3c10e1639..a28b17305 100644 --- a/admin/layouts/field/details_right.php +++ b/admin/layouts/field/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/field/details_under.php b/admin/layouts/field/details_under.php index 748afa4fe..f22945d67 100644 --- a/admin/layouts/field/details_under.php +++ b/admin/layouts/field/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/field/publishing.php b/admin/layouts/field/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/field/publishing.php +++ b/admin/layouts/field/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/field/publlshing.php b/admin/layouts/field/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/field/publlshing.php +++ b/admin/layouts/field/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/field/scripts_left.php b/admin/layouts/field/scripts_left.php index 3f2b4a518..8f3570b6c 100644 --- a/admin/layouts/field/scripts_left.php +++ b/admin/layouts/field/scripts_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage scripts_left.php diff --git a/admin/layouts/field/scripts_right.php b/admin/layouts/field/scripts_right.php index 84c5acd01..b8deca944 100644 --- a/admin/layouts/field/scripts_right.php +++ b/admin/layouts/field/scripts_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage scripts_right.php diff --git a/admin/layouts/fieldtype/details_left.php b/admin/layouts/fieldtype/details_left.php index 3bfb4bd93..3dd4f65a1 100644 --- a/admin/layouts/fieldtype/details_left.php +++ b/admin/layouts/fieldtype/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/fieldtype/details_right.php b/admin/layouts/fieldtype/details_right.php index 0019cf839..d6bc4d538 100644 --- a/admin/layouts/fieldtype/details_right.php +++ b/admin/layouts/fieldtype/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/fieldtype/fields_fullwidth.php b/admin/layouts/fieldtype/fields_fullwidth.php index a68a1022b..d5ca5a475 100644 --- a/admin/layouts/fieldtype/fields_fullwidth.php +++ b/admin/layouts/fieldtype/fields_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fields_fullwidth.php @@ -43,7 +43,7 @@ $can = ComponentbuilderHelper::getActions('field');

- +
diff --git a/admin/layouts/fieldtype/publishing.php b/admin/layouts/fieldtype/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/fieldtype/publishing.php +++ b/admin/layouts/fieldtype/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/fieldtype/publlshing.php b/admin/layouts/fieldtype/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/fieldtype/publlshing.php +++ b/admin/layouts/fieldtype/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/help_document/details_above.php b/admin/layouts/help_document/details_above.php index 68893bd0d..5d564a389 100644 --- a/admin/layouts/help_document/details_above.php +++ b/admin/layouts/help_document/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/help_document/details_fullwidth.php b/admin/layouts/help_document/details_fullwidth.php index 397863535..e8a200854 100644 --- a/admin/layouts/help_document/details_fullwidth.php +++ b/admin/layouts/help_document/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/help_document/details_left.php b/admin/layouts/help_document/details_left.php index 9aef4cf1c..079382073 100644 --- a/admin/layouts/help_document/details_left.php +++ b/admin/layouts/help_document/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/help_document/details_right.php b/admin/layouts/help_document/details_right.php index 997e26a0d..5b5b8e9e5 100644 --- a/admin/layouts/help_document/details_right.php +++ b/admin/layouts/help_document/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/help_document/details_under.php b/admin/layouts/help_document/details_under.php index 748afa4fe..f22945d67 100644 --- a/admin/layouts/help_document/details_under.php +++ b/admin/layouts/help_document/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/help_document/publishing.php b/admin/layouts/help_document/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/help_document/publishing.php +++ b/admin/layouts/help_document/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/help_document/publlshing.php b/admin/layouts/help_document/publlshing.php index 20c3d4f94..ee9f418a2 100644 --- a/admin/layouts/help_document/publlshing.php +++ b/admin/layouts/help_document/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/layout/custom_script_fullwidth.php b/admin/layouts/layout/custom_script_fullwidth.php index 6cb4e2cfe..b748fa0a7 100644 --- a/admin/layouts/layout/custom_script_fullwidth.php +++ b/admin/layouts/layout/custom_script_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_script_fullwidth.php diff --git a/admin/layouts/layout/details_fullwidth.php b/admin/layouts/layout/details_fullwidth.php index d61190b3f..a64c1f13e 100644 --- a/admin/layouts/layout/details_fullwidth.php +++ b/admin/layouts/layout/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/layout/details_left.php b/admin/layouts/layout/details_left.php index cb254250f..a190b75a6 100644 --- a/admin/layouts/layout/details_left.php +++ b/admin/layouts/layout/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/layout/details_right.php b/admin/layouts/layout/details_right.php index 4a900b664..536df3e28 100644 --- a/admin/layouts/layout/details_right.php +++ b/admin/layouts/layout/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/layout/details_rightside.php b/admin/layouts/layout/details_rightside.php index 1a6ba670f..70ca726b7 100644 --- a/admin/layouts/layout/details_rightside.php +++ b/admin/layouts/layout/details_rightside.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_rightside.php diff --git a/admin/layouts/layout/details_under.php b/admin/layouts/layout/details_under.php index 748afa4fe..f22945d67 100644 --- a/admin/layouts/layout/details_under.php +++ b/admin/layouts/layout/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/layout/publishing.php b/admin/layouts/layout/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/layout/publishing.php +++ b/admin/layouts/layout/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/layout/publlshing.php b/admin/layouts/layout/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/layout/publlshing.php +++ b/admin/layouts/layout/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/site_view/custom_buttons_fullwidth.php b/admin/layouts/site_view/custom_buttons_fullwidth.php index 06ae3d862..32523e9fc 100644 --- a/admin/layouts/site_view/custom_buttons_fullwidth.php +++ b/admin/layouts/site_view/custom_buttons_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_fullwidth.php diff --git a/admin/layouts/site_view/details_above.php b/admin/layouts/site_view/details_above.php index f5da3f77b..27d774b86 100644 --- a/admin/layouts/site_view/details_above.php +++ b/admin/layouts/site_view/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/site_view/details_fullwidth.php b/admin/layouts/site_view/details_fullwidth.php index 52dc0e441..37153699a 100644 --- a/admin/layouts/site_view/details_fullwidth.php +++ b/admin/layouts/site_view/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/site_view/details_left.php b/admin/layouts/site_view/details_left.php index cb254250f..a190b75a6 100644 --- a/admin/layouts/site_view/details_left.php +++ b/admin/layouts/site_view/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/site_view/details_right.php b/admin/layouts/site_view/details_right.php index 4a900b664..536df3e28 100644 --- a/admin/layouts/site_view/details_right.php +++ b/admin/layouts/site_view/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/site_view/details_rightside.php b/admin/layouts/site_view/details_rightside.php index c8316382a..289397c5d 100644 --- a/admin/layouts/site_view/details_rightside.php +++ b/admin/layouts/site_view/details_rightside.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_rightside.php diff --git a/admin/layouts/site_view/details_under.php b/admin/layouts/site_view/details_under.php index 748afa4fe..f22945d67 100644 --- a/admin/layouts/site_view/details_under.php +++ b/admin/layouts/site_view/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/site_view/javascript_css_fullwidth.php b/admin/layouts/site_view/javascript_css_fullwidth.php index 15aae8e0a..e07794c62 100644 --- a/admin/layouts/site_view/javascript_css_fullwidth.php +++ b/admin/layouts/site_view/javascript_css_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage javascript_css_fullwidth.php diff --git a/admin/layouts/site_view/php_fullwidth.php b/admin/layouts/site_view/php_fullwidth.php index fd85998f4..59ded7907 100644 --- a/admin/layouts/site_view/php_fullwidth.php +++ b/admin/layouts/site_view/php_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage php_fullwidth.php diff --git a/admin/layouts/site_view/publishing.php b/admin/layouts/site_view/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/site_view/publishing.php +++ b/admin/layouts/site_view/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/site_view/publlshing.php b/admin/layouts/site_view/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/site_view/publlshing.php +++ b/admin/layouts/site_view/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/snippet/details_above.php b/admin/layouts/snippet/details_above.php index 50ba29ea1..1356ef523 100644 --- a/admin/layouts/snippet/details_above.php +++ b/admin/layouts/snippet/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/snippet/details_left.php b/admin/layouts/snippet/details_left.php index 6a35c9e18..b260918f4 100644 --- a/admin/layouts/snippet/details_left.php +++ b/admin/layouts/snippet/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/snippet/details_right.php b/admin/layouts/snippet/details_right.php index 062623cad..5b8884973 100644 --- a/admin/layouts/snippet/details_right.php +++ b/admin/layouts/snippet/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/snippet/publishing.php b/admin/layouts/snippet/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/snippet/publishing.php +++ b/admin/layouts/snippet/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/snippet/publlshing.php b/admin/layouts/snippet/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/snippet/publlshing.php +++ b/admin/layouts/snippet/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/template/custom_script_fullwidth.php b/admin/layouts/template/custom_script_fullwidth.php index 6cb4e2cfe..b748fa0a7 100644 --- a/admin/layouts/template/custom_script_fullwidth.php +++ b/admin/layouts/template/custom_script_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_script_fullwidth.php diff --git a/admin/layouts/template/details_fullwidth.php b/admin/layouts/template/details_fullwidth.php index 75c82ef7e..dfb20f5bb 100644 --- a/admin/layouts/template/details_fullwidth.php +++ b/admin/layouts/template/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/template/details_left.php b/admin/layouts/template/details_left.php index cb254250f..a190b75a6 100644 --- a/admin/layouts/template/details_left.php +++ b/admin/layouts/template/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/template/details_right.php b/admin/layouts/template/details_right.php index 4a900b664..536df3e28 100644 --- a/admin/layouts/template/details_right.php +++ b/admin/layouts/template/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/template/details_rightside.php b/admin/layouts/template/details_rightside.php index 1a6ba670f..70ca726b7 100644 --- a/admin/layouts/template/details_rightside.php +++ b/admin/layouts/template/details_rightside.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_rightside.php diff --git a/admin/layouts/template/details_under.php b/admin/layouts/template/details_under.php index 748afa4fe..f22945d67 100644 --- a/admin/layouts/template/details_under.php +++ b/admin/layouts/template/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/template/publishing.php b/admin/layouts/template/publishing.php index 4d280fbb0..2ee3b077c 100644 --- a/admin/layouts/template/publishing.php +++ b/admin/layouts/template/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/template/publlshing.php b/admin/layouts/template/publlshing.php index 3d6d60988..438582c9a 100644 --- a/admin/layouts/template/publlshing.php +++ b/admin/layouts/template/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/models/admin_view.php b/admin/models/admin_view.php index 2d64742d7..aae2c333a 100644 --- a/admin/models/admin_view.php +++ b/admin/models/admin_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_view.php @@ -256,6 +256,7 @@ class ComponentbuilderModelAdmin_view extends JModelAdmin } // Order the results by ordering + $query->order('a.published ASC'); $query->order('a.ordering ASC'); // Load the items diff --git a/admin/models/admin_views.php b/admin/models/admin_views.php index 53f333d8f..095b77c30 100644 --- a/admin/models/admin_views.php +++ b/admin/models/admin_views.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_views.php diff --git a/admin/models/ajax.php b/admin/models/ajax.php index a33ada085..aa13ea8ff 100644 --- a/admin/models/ajax.php +++ b/admin/models/ajax.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage ajax.php @@ -54,7 +54,7 @@ class ComponentbuilderModelAjax extends JModelList $query = $db->getQuery(true); $query->select($db->quoteName(array('a.xml', 'b.name'))); $query->from($db->quoteName('#__componentbuilder_field', 'a')); - $query->join('LEFT', $db->quoteName('#__componentbuilder_fieldtype', 'b') . ' ON (' . $db->quoteName('a.type') . ' = ' . $db->quoteName('b.id') . ')'); + $query->join('LEFT', $db->quoteName('#__componentbuilder_fieldtype', 'b') . ' ON (' . $db->quoteName('a.fieldtype') . ' = ' . $db->quoteName('b.id') . ')'); $query->where($db->quoteName('a.published') . ' = 1'); $query->where($db->quoteName('a.id') . ' = '. (int) $id); diff --git a/admin/models/compiler.php b/admin/models/compiler.php index 26872d7b4..5ce214cfe 100644 --- a/admin/models/compiler.php +++ b/admin/models/compiler.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage compiler.php diff --git a/admin/models/component.php b/admin/models/component.php index 100cfcc20..299072b8c 100644 --- a/admin/models/component.php +++ b/admin/models/component.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage component.php @@ -214,6 +214,7 @@ class ComponentbuilderModelComponent extends JModelAdmin } // Order the results by ordering + $query->order('a.published ASC'); $query->order('a.ordering ASC'); // Load the items @@ -304,6 +305,7 @@ class ComponentbuilderModelComponent extends JModelAdmin } // Order the results by ordering + $query->order('a.published ASC'); $query->order('a.ordering ASC'); // Load the items diff --git a/admin/models/componentbuilder.php b/admin/models/componentbuilder.php index c9b91e690..78c89b7dc 100644 --- a/admin/models/componentbuilder.php +++ b/admin/models/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php diff --git a/admin/models/components.php b/admin/models/components.php index 07744d729..764b2babc 100644 --- a/admin/models/components.php +++ b/admin/models/components.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage components.php diff --git a/admin/models/custom_admin_view.php b/admin/models/custom_admin_view.php index ea7d1781b..6b14ce6ba 100644 --- a/admin/models/custom_admin_view.php +++ b/admin/models/custom_admin_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_view.php diff --git a/admin/models/custom_admin_views.php b/admin/models/custom_admin_views.php index 54a16d0c3..78e9566b8 100644 --- a/admin/models/custom_admin_views.php +++ b/admin/models/custom_admin_views.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_views.php diff --git a/admin/models/dynamic_get.php b/admin/models/dynamic_get.php index b03c9a3b2..e7ba9a34d 100644 --- a/admin/models/dynamic_get.php +++ b/admin/models/dynamic_get.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamic_get.php diff --git a/admin/models/dynamic_gets.php b/admin/models/dynamic_gets.php index 81a4f5a35..4a610c396 100644 --- a/admin/models/dynamic_gets.php +++ b/admin/models/dynamic_gets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamic_gets.php diff --git a/admin/models/field.php b/admin/models/field.php index a9020f31e..874ac1319 100644 --- a/admin/models/field.php +++ b/admin/models/field.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage field.php diff --git a/admin/models/fields.php b/admin/models/fields.php index 06fa61d63..38c4bedb8 100644 --- a/admin/models/fields.php +++ b/admin/models/fields.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fields.php diff --git a/admin/models/fields/adminviews.php b/admin/models/fields/adminviews.php index aa4b02887..8709fe652 100644 --- a/admin/models/fields/adminviews.php +++ b/admin/models/fields/adminviews.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage adminviews.php diff --git a/admin/models/fields/articles.php b/admin/models/fields/articles.php index 0b3add2a6..2442ebf9f 100644 --- a/admin/models/fields/articles.php +++ b/admin/models/fields/articles.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage articles.php diff --git a/admin/models/fields/customadminviews.php b/admin/models/fields/customadminviews.php index 962170750..6f804eaff 100644 --- a/admin/models/fields/customadminviews.php +++ b/admin/models/fields/customadminviews.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage customadminviews.php diff --git a/admin/models/fields/customfilelist.php b/admin/models/fields/customfilelist.php index 6561bbbc4..9ab87ac44 100644 --- a/admin/models/fields/customfilelist.php +++ b/admin/models/fields/customfilelist.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage customfilelist.php diff --git a/admin/models/fields/customfolderlist.php b/admin/models/fields/customfolderlist.php index d84ff8b10..765976baa 100644 --- a/admin/models/fields/customfolderlist.php +++ b/admin/models/fields/customfolderlist.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage customfolderlist.php diff --git a/admin/models/fields/customgets.php b/admin/models/fields/customgets.php index 4929f9b0c..87a3131c1 100644 --- a/admin/models/fields/customgets.php +++ b/admin/models/fields/customgets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage customgets.php diff --git a/admin/models/fields/dbtables.php b/admin/models/fields/dbtables.php index 6ec360a58..c8ff85074 100644 --- a/admin/models/fields/dbtables.php +++ b/admin/models/fields/dbtables.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dbtables.php diff --git a/admin/models/fields/dynamicgets.php b/admin/models/fields/dynamicgets.php index 2c3f261f5..8d86ea8b3 100644 --- a/admin/models/fields/dynamicgets.php +++ b/admin/models/fields/dynamicgets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamicgets.php diff --git a/admin/models/fields/fields.php b/admin/models/fields/fields.php index aa26112cd..0092a8b3f 100644 --- a/admin/models/fields/fields.php +++ b/admin/models/fields/fields.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fields.php diff --git a/admin/models/fields/fieldsmulti.php b/admin/models/fields/fieldsmulti.php index 2350b5776..392eee149 100644 --- a/admin/models/fields/fieldsmulti.php +++ b/admin/models/fields/fieldsmulti.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldsmulti.php diff --git a/admin/models/fields/fieldtypes.php b/admin/models/fields/fieldtypes.php index a10a1428f..0b6e86fcf 100644 --- a/admin/models/fields/fieldtypes.php +++ b/admin/models/fields/fieldtypes.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtypes.php diff --git a/admin/models/fields/maingets.php b/admin/models/fields/maingets.php index 79193cebd..3934c0b7c 100644 --- a/admin/models/fields/maingets.php +++ b/admin/models/fields/maingets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage maingets.php diff --git a/admin/models/fields/siteviews.php b/admin/models/fields/siteviews.php index 7f95c4261..f8ed0112a 100644 --- a/admin/models/fields/siteviews.php +++ b/admin/models/fields/siteviews.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage siteviews.php diff --git a/admin/models/fields/snippets.php b/admin/models/fields/snippets.php index 2e562460f..f29817762 100644 --- a/admin/models/fields/snippets.php +++ b/admin/models/fields/snippets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippets.php diff --git a/admin/models/fieldtype.php b/admin/models/fieldtype.php index 813d5f244..64ee40765 100644 --- a/admin/models/fieldtype.php +++ b/admin/models/fieldtype.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtype.php @@ -163,6 +163,7 @@ class ComponentbuilderModelFieldtype extends JModelAdmin } // Order the results by ordering + $query->order('a.published ASC'); $query->order('a.ordering ASC'); // Load the items diff --git a/admin/models/fieldtypes.php b/admin/models/fieldtypes.php index ced11613e..288c435c4 100644 --- a/admin/models/fieldtypes.php +++ b/admin/models/fieldtypes.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtypes.php diff --git a/admin/models/forms/admin_view.js b/admin/models/forms/admin_view.js index 7e76b03be..9356f995b 100644 --- a/admin/models/forms/admin_view.js +++ b/admin/models/forms/admin_view.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_view.js diff --git a/admin/models/forms/component.js b/admin/models/forms/component.js index e2b7744e5..9139637bd 100644 --- a/admin/models/forms/component.js +++ b/admin/models/forms/component.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage component.js diff --git a/admin/models/forms/component.xml b/admin/models/forms/component.xml index 8f3a68b43..6ad444391 100644 --- a/admin/models/forms/component.xml +++ b/admin/models/forms/component.xml @@ -460,11 +460,13 @@ name="addfootable" label="COM_COMPONENTBUILDER_COMPONENT_ADDFOOTABLE_LABEL" class="btn-group btn-group-yesno" - default="1" + default="3" required="true"> + + COM_COMPONENTBUILDER_COMPONENT_VTWO diff --git a/admin/models/forms/custom_admin_view.js b/admin/models/forms/custom_admin_view.js index 282edb6d9..f125e08a5 100644 --- a/admin/models/forms/custom_admin_view.js +++ b/admin/models/forms/custom_admin_view.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_view.js diff --git a/admin/models/forms/dynamic_get.js b/admin/models/forms/dynamic_get.js index 8c5aaa249..f8cc37711 100644 --- a/admin/models/forms/dynamic_get.js +++ b/admin/models/forms/dynamic_get.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamic_get.js diff --git a/admin/models/forms/field.js b/admin/models/forms/field.js index c6f6c9bac..b90f041d8 100644 --- a/admin/models/forms/field.js +++ b/admin/models/forms/field.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage field.js diff --git a/admin/models/forms/fieldtype.js b/admin/models/forms/fieldtype.js index 56ff6795e..2ab330624 100644 --- a/admin/models/forms/fieldtype.js +++ b/admin/models/forms/fieldtype.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtype.js diff --git a/admin/models/forms/help_document.js b/admin/models/forms/help_document.js index 0c8bc68aa..92f50009b 100644 --- a/admin/models/forms/help_document.js +++ b/admin/models/forms/help_document.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help_document.js diff --git a/admin/models/forms/layout.js b/admin/models/forms/layout.js index 5116cc245..c367da8e0 100644 --- a/admin/models/forms/layout.js +++ b/admin/models/forms/layout.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage layout.js diff --git a/admin/models/forms/site_view.js b/admin/models/forms/site_view.js index ff0b08a6e..aafab66cc 100644 --- a/admin/models/forms/site_view.js +++ b/admin/models/forms/site_view.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_view.js diff --git a/admin/models/forms/snippet.js b/admin/models/forms/snippet.js index 56dfd9092..a9fe80e7c 100644 --- a/admin/models/forms/snippet.js +++ b/admin/models/forms/snippet.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippet.js diff --git a/admin/models/forms/template.js b/admin/models/forms/template.js index a73e4923d..14f2452e7 100644 --- a/admin/models/forms/template.js +++ b/admin/models/forms/template.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage template.js diff --git a/admin/models/help_document.php b/admin/models/help_document.php index 70e9f1ef5..bae3388d8 100644 --- a/admin/models/help_document.php +++ b/admin/models/help_document.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help_document.php diff --git a/admin/models/help_documents.php b/admin/models/help_documents.php index 8a7adb621..09193b8af 100644 --- a/admin/models/help_documents.php +++ b/admin/models/help_documents.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help_documents.php diff --git a/admin/models/import.php b/admin/models/import.php index 6f836dab3..bee3617d9 100644 --- a/admin/models/import.php +++ b/admin/models/import.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage import.php diff --git a/admin/models/layout.php b/admin/models/layout.php index e63e387f6..6ff4754e2 100644 --- a/admin/models/layout.php +++ b/admin/models/layout.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage layout.php diff --git a/admin/models/layouts.php b/admin/models/layouts.php index 1f13a3156..44d059b2f 100644 --- a/admin/models/layouts.php +++ b/admin/models/layouts.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage layouts.php diff --git a/admin/models/site_view.php b/admin/models/site_view.php index 46ed1af46..ee76bad38 100644 --- a/admin/models/site_view.php +++ b/admin/models/site_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_view.php diff --git a/admin/models/site_views.php b/admin/models/site_views.php index 448d08762..8c06820cb 100644 --- a/admin/models/site_views.php +++ b/admin/models/site_views.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_views.php diff --git a/admin/models/snippet.php b/admin/models/snippet.php index 7e8eaf73f..37253c628 100644 --- a/admin/models/snippet.php +++ b/admin/models/snippet.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippet.php diff --git a/admin/models/snippets.php b/admin/models/snippets.php index d1c98fdaa..ff7d0b1d7 100644 --- a/admin/models/snippets.php +++ b/admin/models/snippets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippets.php diff --git a/admin/models/template.php b/admin/models/template.php index f22e08ef5..261fb6132 100644 --- a/admin/models/template.php +++ b/admin/models/template.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage template.php diff --git a/admin/models/templates.php b/admin/models/templates.php index 2d2fff051..7ace9ae34 100644 --- a/admin/models/templates.php +++ b/admin/models/templates.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage templates.php diff --git a/admin/sql/updates/mysql/2.1.2.sql b/admin/sql/updates/mysql/2.1.2.sql new file mode 100644 index 000000000..d3f5a12fa --- /dev/null +++ b/admin/sql/updates/mysql/2.1.2.sql @@ -0,0 +1 @@ + diff --git a/admin/tables/admin_view.php b/admin/tables/admin_view.php index 087441a29..98e9e9deb 100644 --- a/admin/tables/admin_view.php +++ b/admin/tables/admin_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage admin_view.php diff --git a/admin/tables/component.php b/admin/tables/component.php index 373474a95..e90cdd46f 100644 --- a/admin/tables/component.php +++ b/admin/tables/component.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage component.php diff --git a/admin/tables/custom_admin_view.php b/admin/tables/custom_admin_view.php index 88751fbd2..eb52d8344 100644 --- a/admin/tables/custom_admin_view.php +++ b/admin/tables/custom_admin_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_view.php diff --git a/admin/tables/dynamic_get.php b/admin/tables/dynamic_get.php index 3a115514b..8e44795a7 100644 --- a/admin/tables/dynamic_get.php +++ b/admin/tables/dynamic_get.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage dynamic_get.php diff --git a/admin/tables/field.php b/admin/tables/field.php index c5d9a6f07..e6baa6a91 100644 --- a/admin/tables/field.php +++ b/admin/tables/field.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage field.php diff --git a/admin/tables/fieldtype.php b/admin/tables/fieldtype.php index 8138bebcb..5043517dd 100644 --- a/admin/tables/fieldtype.php +++ b/admin/tables/fieldtype.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage fieldtype.php diff --git a/admin/tables/help_document.php b/admin/tables/help_document.php index c19cd84e3..9cb300e3d 100644 --- a/admin/tables/help_document.php +++ b/admin/tables/help_document.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help_document.php diff --git a/admin/tables/layout.php b/admin/tables/layout.php index 3e52ccf4c..4c5169590 100644 --- a/admin/tables/layout.php +++ b/admin/tables/layout.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage layout.php diff --git a/admin/tables/site_view.php b/admin/tables/site_view.php index 279cce7ee..d78bdecc6 100644 --- a/admin/tables/site_view.php +++ b/admin/tables/site_view.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site_view.php diff --git a/admin/tables/snippet.php b/admin/tables/snippet.php index cfda540ba..c81c96403 100644 --- a/admin/tables/snippet.php +++ b/admin/tables/snippet.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage snippet.php diff --git a/admin/tables/template.php b/admin/tables/template.php index 8abcf6f65..198b9b1cd 100644 --- a/admin/tables/template.php +++ b/admin/tables/template.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage template.php diff --git a/admin/views/admin_view/submitbutton.js b/admin/views/admin_view/submitbutton.js index 3510e3990..13d311347 100644 --- a/admin/views/admin_view/submitbutton.js +++ b/admin/views/admin_view/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/admin_view/tmpl/edit.php b/admin/views/admin_view/tmpl/edit.php index 0875a8cb5..8bedee41c 100644 --- a/admin/views/admin_view/tmpl/edit.php +++ b/admin/views/admin_view/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/admin_view/view.html.php b/admin/views/admin_view/view.html.php index adadaa562..6646ae084 100644 --- a/admin/views/admin_view/view.html.php +++ b/admin/views/admin_view/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/admin_views/tmpl/default.php b/admin/views/admin_views/tmpl/default.php index d4839bcc4..468f35e97 100644 --- a/admin/views/admin_views/tmpl/default.php +++ b/admin/views/admin_views/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/admin_views/tmpl/default_batch_body.php b/admin/views/admin_views/tmpl/default_batch_body.php index f28bf1866..cd987d96d 100644 --- a/admin/views/admin_views/tmpl/default_batch_body.php +++ b/admin/views/admin_views/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/admin_views/tmpl/default_batch_footer.php b/admin/views/admin_views/tmpl/default_batch_footer.php index e056a09b9..ff8fdbaec 100644 --- a/admin/views/admin_views/tmpl/default_batch_footer.php +++ b/admin/views/admin_views/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/admin_views/tmpl/default_body.php b/admin/views/admin_views/tmpl/default_body.php index 091cebf00..de1953a7d 100644 --- a/admin/views/admin_views/tmpl/default_body.php +++ b/admin/views/admin_views/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/admin_views/tmpl/default_foot.php b/admin/views/admin_views/tmpl/default_foot.php index 01f3931bf..0f7b95c2d 100644 --- a/admin/views/admin_views/tmpl/default_foot.php +++ b/admin/views/admin_views/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/admin_views/tmpl/default_head.php b/admin/views/admin_views/tmpl/default_head.php index ef82dd3f6..b384a3cf7 100644 --- a/admin/views/admin_views/tmpl/default_head.php +++ b/admin/views/admin_views/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/admin_views/tmpl/default_toolbar.php b/admin/views/admin_views/tmpl/default_toolbar.php index a89b1b3bf..0a8a7366b 100644 --- a/admin/views/admin_views/tmpl/default_toolbar.php +++ b/admin/views/admin_views/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/admin_views/view.html.php b/admin/views/admin_views/view.html.php index a059ed65a..da10637ab 100644 --- a/admin/views/admin_views/view.html.php +++ b/admin/views/admin_views/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/compiler/tmpl/default.php b/admin/views/compiler/tmpl/default.php index f8e04c3e2..4e5bdfd21 100644 --- a/admin/views/compiler/tmpl/default.php +++ b/admin/views/compiler/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/compiler/view.html.php b/admin/views/compiler/view.html.php index bb21bb846..2ee3bd819 100644 --- a/admin/views/compiler/view.html.php +++ b/admin/views/compiler/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/component/submitbutton.js b/admin/views/component/submitbutton.js index db3f05703..fc2d320c0 100644 --- a/admin/views/component/submitbutton.js +++ b/admin/views/component/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/component/tmpl/edit.php b/admin/views/component/tmpl/edit.php index 0a34321f5..288fdc46a 100644 --- a/admin/views/component/tmpl/edit.php +++ b/admin/views/component/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/component/view.html.php b/admin/views/component/view.html.php index 4a9bb8864..9e3b6ad68 100644 --- a/admin/views/component/view.html.php +++ b/admin/views/component/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/componentbuilder/tmpl/default.php b/admin/views/componentbuilder/tmpl/default.php index 51bb43be6..a17117dec 100644 --- a/admin/views/componentbuilder/tmpl/default.php +++ b/admin/views/componentbuilder/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/componentbuilder/tmpl/default_main.php b/admin/views/componentbuilder/tmpl/default_main.php index 076fe98b5..b11da4c30 100644 --- a/admin/views/componentbuilder/tmpl/default_main.php +++ b/admin/views/componentbuilder/tmpl/default_main.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_main.php diff --git a/admin/views/componentbuilder/tmpl/default_vdm.php b/admin/views/componentbuilder/tmpl/default_vdm.php index 81045f271..78df32206 100644 --- a/admin/views/componentbuilder/tmpl/default_vdm.php +++ b/admin/views/componentbuilder/tmpl/default_vdm.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_vdm.php diff --git a/admin/views/componentbuilder/view.html.php b/admin/views/componentbuilder/view.html.php index 528e0ed88..d41c66ec2 100644 --- a/admin/views/componentbuilder/view.html.php +++ b/admin/views/componentbuilder/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/components/tmpl/default.php b/admin/views/components/tmpl/default.php index 64f7e95c9..a1f52f2e8 100644 --- a/admin/views/components/tmpl/default.php +++ b/admin/views/components/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/components/tmpl/default_batch_body.php b/admin/views/components/tmpl/default_batch_body.php index 4c1ae32c9..e82a32050 100644 --- a/admin/views/components/tmpl/default_batch_body.php +++ b/admin/views/components/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/components/tmpl/default_batch_footer.php b/admin/views/components/tmpl/default_batch_footer.php index 52c641bec..da3575ab0 100644 --- a/admin/views/components/tmpl/default_batch_footer.php +++ b/admin/views/components/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/components/tmpl/default_body.php b/admin/views/components/tmpl/default_body.php index 210a26a16..e19e5c2f8 100644 --- a/admin/views/components/tmpl/default_body.php +++ b/admin/views/components/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/components/tmpl/default_foot.php b/admin/views/components/tmpl/default_foot.php index 3ca2dbad5..966850f2e 100644 --- a/admin/views/components/tmpl/default_foot.php +++ b/admin/views/components/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/components/tmpl/default_head.php b/admin/views/components/tmpl/default_head.php index d893bcae8..87460704e 100644 --- a/admin/views/components/tmpl/default_head.php +++ b/admin/views/components/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/components/tmpl/default_toolbar.php b/admin/views/components/tmpl/default_toolbar.php index a0311fb5c..02f1bd9e0 100644 --- a/admin/views/components/tmpl/default_toolbar.php +++ b/admin/views/components/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/components/view.html.php b/admin/views/components/view.html.php index 6cd252191..43d065efd 100644 --- a/admin/views/components/view.html.php +++ b/admin/views/components/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/custom_admin_view/submitbutton.js b/admin/views/custom_admin_view/submitbutton.js index c178418e3..e53f1b6cd 100644 --- a/admin/views/custom_admin_view/submitbutton.js +++ b/admin/views/custom_admin_view/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/custom_admin_view/tmpl/edit.php b/admin/views/custom_admin_view/tmpl/edit.php index 6185627e5..61a58ccbb 100644 --- a/admin/views/custom_admin_view/tmpl/edit.php +++ b/admin/views/custom_admin_view/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/custom_admin_view/view.html.php b/admin/views/custom_admin_view/view.html.php index 9c18a8450..acdb17ee5 100644 --- a/admin/views/custom_admin_view/view.html.php +++ b/admin/views/custom_admin_view/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/custom_admin_views/tmpl/default.php b/admin/views/custom_admin_views/tmpl/default.php index 115e64170..a997d012e 100644 --- a/admin/views/custom_admin_views/tmpl/default.php +++ b/admin/views/custom_admin_views/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/custom_admin_views/tmpl/default_batch_body.php b/admin/views/custom_admin_views/tmpl/default_batch_body.php index 338b88a76..48f9a5bea 100644 --- a/admin/views/custom_admin_views/tmpl/default_batch_body.php +++ b/admin/views/custom_admin_views/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/custom_admin_views/tmpl/default_batch_footer.php b/admin/views/custom_admin_views/tmpl/default_batch_footer.php index 769decfc6..c7559e411 100644 --- a/admin/views/custom_admin_views/tmpl/default_batch_footer.php +++ b/admin/views/custom_admin_views/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/custom_admin_views/tmpl/default_body.php b/admin/views/custom_admin_views/tmpl/default_body.php index 1d19c13bb..2a55e14d0 100644 --- a/admin/views/custom_admin_views/tmpl/default_body.php +++ b/admin/views/custom_admin_views/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/custom_admin_views/tmpl/default_foot.php b/admin/views/custom_admin_views/tmpl/default_foot.php index 5143f3254..13ac89d94 100644 --- a/admin/views/custom_admin_views/tmpl/default_foot.php +++ b/admin/views/custom_admin_views/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/custom_admin_views/tmpl/default_head.php b/admin/views/custom_admin_views/tmpl/default_head.php index cd5a059c8..d1500c6dc 100644 --- a/admin/views/custom_admin_views/tmpl/default_head.php +++ b/admin/views/custom_admin_views/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/custom_admin_views/tmpl/default_toolbar.php b/admin/views/custom_admin_views/tmpl/default_toolbar.php index a53fdeba3..3ff00ac4f 100644 --- a/admin/views/custom_admin_views/tmpl/default_toolbar.php +++ b/admin/views/custom_admin_views/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/custom_admin_views/view.html.php b/admin/views/custom_admin_views/view.html.php index c10e89f65..ef9719de5 100644 --- a/admin/views/custom_admin_views/view.html.php +++ b/admin/views/custom_admin_views/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/dynamic_get/submitbutton.js b/admin/views/dynamic_get/submitbutton.js index 5a9c69bbb..82a2dd7ff 100644 --- a/admin/views/dynamic_get/submitbutton.js +++ b/admin/views/dynamic_get/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/dynamic_get/tmpl/edit.php b/admin/views/dynamic_get/tmpl/edit.php index c88f4a87f..06f9bf479 100644 --- a/admin/views/dynamic_get/tmpl/edit.php +++ b/admin/views/dynamic_get/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/dynamic_get/view.html.php b/admin/views/dynamic_get/view.html.php index 8218a1cb5..cc8cdfa5e 100644 --- a/admin/views/dynamic_get/view.html.php +++ b/admin/views/dynamic_get/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/dynamic_gets/tmpl/default.php b/admin/views/dynamic_gets/tmpl/default.php index 744531ae1..6b9a34fd9 100644 --- a/admin/views/dynamic_gets/tmpl/default.php +++ b/admin/views/dynamic_gets/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/dynamic_gets/tmpl/default_batch_body.php b/admin/views/dynamic_gets/tmpl/default_batch_body.php index e71e8b5c9..ecce25b8e 100644 --- a/admin/views/dynamic_gets/tmpl/default_batch_body.php +++ b/admin/views/dynamic_gets/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/dynamic_gets/tmpl/default_batch_footer.php b/admin/views/dynamic_gets/tmpl/default_batch_footer.php index 615935546..c9036674d 100644 --- a/admin/views/dynamic_gets/tmpl/default_batch_footer.php +++ b/admin/views/dynamic_gets/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/dynamic_gets/tmpl/default_body.php b/admin/views/dynamic_gets/tmpl/default_body.php index 51733b6d5..8d9aa8187 100644 --- a/admin/views/dynamic_gets/tmpl/default_body.php +++ b/admin/views/dynamic_gets/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/dynamic_gets/tmpl/default_foot.php b/admin/views/dynamic_gets/tmpl/default_foot.php index 31bdfe8c5..fca4f0a45 100644 --- a/admin/views/dynamic_gets/tmpl/default_foot.php +++ b/admin/views/dynamic_gets/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/dynamic_gets/tmpl/default_head.php b/admin/views/dynamic_gets/tmpl/default_head.php index baa63551b..44201e900 100644 --- a/admin/views/dynamic_gets/tmpl/default_head.php +++ b/admin/views/dynamic_gets/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/dynamic_gets/tmpl/default_toolbar.php b/admin/views/dynamic_gets/tmpl/default_toolbar.php index f2b0b64ba..63dd1f781 100644 --- a/admin/views/dynamic_gets/tmpl/default_toolbar.php +++ b/admin/views/dynamic_gets/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/dynamic_gets/view.html.php b/admin/views/dynamic_gets/view.html.php index dcfd80c4b..2a4899711 100644 --- a/admin/views/dynamic_gets/view.html.php +++ b/admin/views/dynamic_gets/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/field/submitbutton.js b/admin/views/field/submitbutton.js index 7533e40d3..288a241fc 100644 --- a/admin/views/field/submitbutton.js +++ b/admin/views/field/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/field/tmpl/edit.php b/admin/views/field/tmpl/edit.php index 4239d1599..98bac56ab 100644 --- a/admin/views/field/tmpl/edit.php +++ b/admin/views/field/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/field/view.html.php b/admin/views/field/view.html.php index e65b4f5da..d84c3c3ba 100644 --- a/admin/views/field/view.html.php +++ b/admin/views/field/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/fields/tmpl/default.php b/admin/views/fields/tmpl/default.php index 02341d236..3eec46ce5 100644 --- a/admin/views/fields/tmpl/default.php +++ b/admin/views/fields/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/fields/tmpl/default_batch_body.php b/admin/views/fields/tmpl/default_batch_body.php index ba5502e91..65c8997bc 100644 --- a/admin/views/fields/tmpl/default_batch_body.php +++ b/admin/views/fields/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/fields/tmpl/default_batch_footer.php b/admin/views/fields/tmpl/default_batch_footer.php index f8b020d53..4680917fc 100644 --- a/admin/views/fields/tmpl/default_batch_footer.php +++ b/admin/views/fields/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/fields/tmpl/default_body.php b/admin/views/fields/tmpl/default_body.php index 37ee7f5d0..78860001e 100644 --- a/admin/views/fields/tmpl/default_body.php +++ b/admin/views/fields/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/fields/tmpl/default_foot.php b/admin/views/fields/tmpl/default_foot.php index b37193742..47ab76902 100644 --- a/admin/views/fields/tmpl/default_foot.php +++ b/admin/views/fields/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/fields/tmpl/default_head.php b/admin/views/fields/tmpl/default_head.php index 79cc92896..4042e6186 100644 --- a/admin/views/fields/tmpl/default_head.php +++ b/admin/views/fields/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/fields/tmpl/default_toolbar.php b/admin/views/fields/tmpl/default_toolbar.php index e8e02f92b..9b570134c 100644 --- a/admin/views/fields/tmpl/default_toolbar.php +++ b/admin/views/fields/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/fields/view.html.php b/admin/views/fields/view.html.php index f34da60fd..dd7fd5229 100644 --- a/admin/views/fields/view.html.php +++ b/admin/views/fields/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/fieldtype/submitbutton.js b/admin/views/fieldtype/submitbutton.js index 5dd00808c..f6f70e1e3 100644 --- a/admin/views/fieldtype/submitbutton.js +++ b/admin/views/fieldtype/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/fieldtype/tmpl/edit.php b/admin/views/fieldtype/tmpl/edit.php index c0baec6b4..b6ce6e5f2 100644 --- a/admin/views/fieldtype/tmpl/edit.php +++ b/admin/views/fieldtype/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/fieldtype/view.html.php b/admin/views/fieldtype/view.html.php index 701c54a61..1a2e003ca 100644 --- a/admin/views/fieldtype/view.html.php +++ b/admin/views/fieldtype/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/fieldtypes/tmpl/default.php b/admin/views/fieldtypes/tmpl/default.php index a4b274be5..dfee222fd 100644 --- a/admin/views/fieldtypes/tmpl/default.php +++ b/admin/views/fieldtypes/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/fieldtypes/tmpl/default_batch_body.php b/admin/views/fieldtypes/tmpl/default_batch_body.php index 5e1a3f726..70a355ba7 100644 --- a/admin/views/fieldtypes/tmpl/default_batch_body.php +++ b/admin/views/fieldtypes/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/fieldtypes/tmpl/default_batch_footer.php b/admin/views/fieldtypes/tmpl/default_batch_footer.php index 5aceb2c03..56e871ef9 100644 --- a/admin/views/fieldtypes/tmpl/default_batch_footer.php +++ b/admin/views/fieldtypes/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/fieldtypes/tmpl/default_body.php b/admin/views/fieldtypes/tmpl/default_body.php index abdafa0c6..3727c5d4e 100644 --- a/admin/views/fieldtypes/tmpl/default_body.php +++ b/admin/views/fieldtypes/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/fieldtypes/tmpl/default_foot.php b/admin/views/fieldtypes/tmpl/default_foot.php index 31bdfe8c5..fca4f0a45 100644 --- a/admin/views/fieldtypes/tmpl/default_foot.php +++ b/admin/views/fieldtypes/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/fieldtypes/tmpl/default_head.php b/admin/views/fieldtypes/tmpl/default_head.php index bf4184cfa..610f7aec2 100644 --- a/admin/views/fieldtypes/tmpl/default_head.php +++ b/admin/views/fieldtypes/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/fieldtypes/tmpl/default_toolbar.php b/admin/views/fieldtypes/tmpl/default_toolbar.php index fc9c177e3..f68ed7a4e 100644 --- a/admin/views/fieldtypes/tmpl/default_toolbar.php +++ b/admin/views/fieldtypes/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/fieldtypes/view.html.php b/admin/views/fieldtypes/view.html.php index 9ca1e7d72..9b31a3b65 100644 --- a/admin/views/fieldtypes/view.html.php +++ b/admin/views/fieldtypes/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/help_document/submitbutton.js b/admin/views/help_document/submitbutton.js index 37da00231..e0a8e97ad 100644 --- a/admin/views/help_document/submitbutton.js +++ b/admin/views/help_document/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/help_document/tmpl/edit.php b/admin/views/help_document/tmpl/edit.php index bbe12777a..bfefbe5e4 100644 --- a/admin/views/help_document/tmpl/edit.php +++ b/admin/views/help_document/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/help_document/view.html.php b/admin/views/help_document/view.html.php index 0c5d8f233..32471e60e 100644 --- a/admin/views/help_document/view.html.php +++ b/admin/views/help_document/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/help_documents/tmpl/default.php b/admin/views/help_documents/tmpl/default.php index 26cb6a6ff..894a4209c 100644 --- a/admin/views/help_documents/tmpl/default.php +++ b/admin/views/help_documents/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/help_documents/tmpl/default_batch_body.php b/admin/views/help_documents/tmpl/default_batch_body.php index 75c35cd11..3306ae316 100644 --- a/admin/views/help_documents/tmpl/default_batch_body.php +++ b/admin/views/help_documents/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/help_documents/tmpl/default_batch_footer.php b/admin/views/help_documents/tmpl/default_batch_footer.php index ce6a9e870..7cbd15dfe 100644 --- a/admin/views/help_documents/tmpl/default_batch_footer.php +++ b/admin/views/help_documents/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/help_documents/tmpl/default_body.php b/admin/views/help_documents/tmpl/default_body.php index d598fd267..9b0165de7 100644 --- a/admin/views/help_documents/tmpl/default_body.php +++ b/admin/views/help_documents/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/help_documents/tmpl/default_foot.php b/admin/views/help_documents/tmpl/default_foot.php index 3ca2dbad5..966850f2e 100644 --- a/admin/views/help_documents/tmpl/default_foot.php +++ b/admin/views/help_documents/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/help_documents/tmpl/default_head.php b/admin/views/help_documents/tmpl/default_head.php index eed3fd279..a4b3227b1 100644 --- a/admin/views/help_documents/tmpl/default_head.php +++ b/admin/views/help_documents/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/help_documents/tmpl/default_toolbar.php b/admin/views/help_documents/tmpl/default_toolbar.php index 5651b13f3..35c82737e 100644 --- a/admin/views/help_documents/tmpl/default_toolbar.php +++ b/admin/views/help_documents/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/help_documents/view.html.php b/admin/views/help_documents/view.html.php index ba6e552bf..318754e3a 100644 --- a/admin/views/help_documents/view.html.php +++ b/admin/views/help_documents/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/import/tmpl/default.php b/admin/views/import/tmpl/default.php index 330278c0b..6f0744798 100644 --- a/admin/views/import/tmpl/default.php +++ b/admin/views/import/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/import/view.html.php b/admin/views/import/view.html.php index ffff721f2..d8c598b3b 100644 --- a/admin/views/import/view.html.php +++ b/admin/views/import/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/layout/submitbutton.js b/admin/views/layout/submitbutton.js index 44ca7363b..7b103969c 100644 --- a/admin/views/layout/submitbutton.js +++ b/admin/views/layout/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/layout/tmpl/edit.php b/admin/views/layout/tmpl/edit.php index db6ab8176..f580d1af3 100644 --- a/admin/views/layout/tmpl/edit.php +++ b/admin/views/layout/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/layout/view.html.php b/admin/views/layout/view.html.php index 12229567b..4fcf905cc 100644 --- a/admin/views/layout/view.html.php +++ b/admin/views/layout/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/layouts/tmpl/default.php b/admin/views/layouts/tmpl/default.php index 957ed0459..476a6b4fb 100644 --- a/admin/views/layouts/tmpl/default.php +++ b/admin/views/layouts/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/layouts/tmpl/default_batch_body.php b/admin/views/layouts/tmpl/default_batch_body.php index 85540307c..4939baaf3 100644 --- a/admin/views/layouts/tmpl/default_batch_body.php +++ b/admin/views/layouts/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/layouts/tmpl/default_batch_footer.php b/admin/views/layouts/tmpl/default_batch_footer.php index 09c6bdf7a..fe55873d4 100644 --- a/admin/views/layouts/tmpl/default_batch_footer.php +++ b/admin/views/layouts/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/layouts/tmpl/default_body.php b/admin/views/layouts/tmpl/default_body.php index c183939d1..bf2e1539f 100644 --- a/admin/views/layouts/tmpl/default_body.php +++ b/admin/views/layouts/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/layouts/tmpl/default_foot.php b/admin/views/layouts/tmpl/default_foot.php index 01f3931bf..0f7b95c2d 100644 --- a/admin/views/layouts/tmpl/default_foot.php +++ b/admin/views/layouts/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/layouts/tmpl/default_head.php b/admin/views/layouts/tmpl/default_head.php index 2095a28f1..6ea980003 100644 --- a/admin/views/layouts/tmpl/default_head.php +++ b/admin/views/layouts/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/layouts/tmpl/default_toolbar.php b/admin/views/layouts/tmpl/default_toolbar.php index f98c01c34..ad867d8fa 100644 --- a/admin/views/layouts/tmpl/default_toolbar.php +++ b/admin/views/layouts/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/layouts/view.html.php b/admin/views/layouts/view.html.php index 56327a26f..67359b33d 100644 --- a/admin/views/layouts/view.html.php +++ b/admin/views/layouts/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/site_view/submitbutton.js b/admin/views/site_view/submitbutton.js index 06f8792d5..3d812ad85 100644 --- a/admin/views/site_view/submitbutton.js +++ b/admin/views/site_view/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/site_view/tmpl/edit.php b/admin/views/site_view/tmpl/edit.php index ea954b693..d9945dcef 100644 --- a/admin/views/site_view/tmpl/edit.php +++ b/admin/views/site_view/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/site_view/view.html.php b/admin/views/site_view/view.html.php index 0fc89377b..83531855d 100644 --- a/admin/views/site_view/view.html.php +++ b/admin/views/site_view/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/site_views/tmpl/default.php b/admin/views/site_views/tmpl/default.php index bb71deeac..4a200ec28 100644 --- a/admin/views/site_views/tmpl/default.php +++ b/admin/views/site_views/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/site_views/tmpl/default_batch_body.php b/admin/views/site_views/tmpl/default_batch_body.php index 343de8899..9c33f83fd 100644 --- a/admin/views/site_views/tmpl/default_batch_body.php +++ b/admin/views/site_views/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/site_views/tmpl/default_batch_footer.php b/admin/views/site_views/tmpl/default_batch_footer.php index ae64894b6..7ca978675 100644 --- a/admin/views/site_views/tmpl/default_batch_footer.php +++ b/admin/views/site_views/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/site_views/tmpl/default_body.php b/admin/views/site_views/tmpl/default_body.php index 462dd336c..f8fbfaddf 100644 --- a/admin/views/site_views/tmpl/default_body.php +++ b/admin/views/site_views/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/site_views/tmpl/default_foot.php b/admin/views/site_views/tmpl/default_foot.php index 5143f3254..13ac89d94 100644 --- a/admin/views/site_views/tmpl/default_foot.php +++ b/admin/views/site_views/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/site_views/tmpl/default_head.php b/admin/views/site_views/tmpl/default_head.php index 1a4c09e04..7d116f102 100644 --- a/admin/views/site_views/tmpl/default_head.php +++ b/admin/views/site_views/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/site_views/tmpl/default_toolbar.php b/admin/views/site_views/tmpl/default_toolbar.php index 67797bebd..4dc9979f3 100644 --- a/admin/views/site_views/tmpl/default_toolbar.php +++ b/admin/views/site_views/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/site_views/view.html.php b/admin/views/site_views/view.html.php index 73165e2aa..0ab04a5cf 100644 --- a/admin/views/site_views/view.html.php +++ b/admin/views/site_views/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/snippet/submitbutton.js b/admin/views/snippet/submitbutton.js index f11fff08a..756f9d9ad 100644 --- a/admin/views/snippet/submitbutton.js +++ b/admin/views/snippet/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/snippet/tmpl/edit.php b/admin/views/snippet/tmpl/edit.php index 27541d763..3b8565735 100644 --- a/admin/views/snippet/tmpl/edit.php +++ b/admin/views/snippet/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/snippet/view.html.php b/admin/views/snippet/view.html.php index 71cbf4330..e3096e35f 100644 --- a/admin/views/snippet/view.html.php +++ b/admin/views/snippet/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/snippets/tmpl/default.php b/admin/views/snippets/tmpl/default.php index ea12bf99f..6f1b8819a 100644 --- a/admin/views/snippets/tmpl/default.php +++ b/admin/views/snippets/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/snippets/tmpl/default_batch_body.php b/admin/views/snippets/tmpl/default_batch_body.php index 5a0f9009b..8f875bdac 100644 --- a/admin/views/snippets/tmpl/default_batch_body.php +++ b/admin/views/snippets/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/snippets/tmpl/default_batch_footer.php b/admin/views/snippets/tmpl/default_batch_footer.php index cdeb8e77c..a6551e0ba 100644 --- a/admin/views/snippets/tmpl/default_batch_footer.php +++ b/admin/views/snippets/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/snippets/tmpl/default_body.php b/admin/views/snippets/tmpl/default_body.php index df113c132..ed3768eb1 100644 --- a/admin/views/snippets/tmpl/default_body.php +++ b/admin/views/snippets/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/snippets/tmpl/default_foot.php b/admin/views/snippets/tmpl/default_foot.php index 01f3931bf..0f7b95c2d 100644 --- a/admin/views/snippets/tmpl/default_foot.php +++ b/admin/views/snippets/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/snippets/tmpl/default_head.php b/admin/views/snippets/tmpl/default_head.php index 0f43cce83..ecb173353 100644 --- a/admin/views/snippets/tmpl/default_head.php +++ b/admin/views/snippets/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/snippets/tmpl/default_toolbar.php b/admin/views/snippets/tmpl/default_toolbar.php index 37c2e64bd..cc0dd7279 100644 --- a/admin/views/snippets/tmpl/default_toolbar.php +++ b/admin/views/snippets/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/snippets/view.html.php b/admin/views/snippets/view.html.php index 8c70b83c3..95053354f 100644 --- a/admin/views/snippets/view.html.php +++ b/admin/views/snippets/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/template/submitbutton.js b/admin/views/template/submitbutton.js index 4f4010801..bc9f3ca9c 100644 --- a/admin/views/template/submitbutton.js +++ b/admin/views/template/submitbutton.js @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/template/tmpl/edit.php b/admin/views/template/tmpl/edit.php index 64ee69f5b..9c347ed9c 100644 --- a/admin/views/template/tmpl/edit.php +++ b/admin/views/template/tmpl/edit.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage edit.php diff --git a/admin/views/template/view.html.php b/admin/views/template/view.html.php index 80b0de320..fcfd39dfe 100644 --- a/admin/views/template/view.html.php +++ b/admin/views/template/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/templates/tmpl/default.php b/admin/views/templates/tmpl/default.php index e3daf79ca..5cc72a187 100644 --- a/admin/views/templates/tmpl/default.php +++ b/admin/views/templates/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/templates/tmpl/default_batch_body.php b/admin/views/templates/tmpl/default_batch_body.php index f8f5140bc..499474767 100644 --- a/admin/views/templates/tmpl/default_batch_body.php +++ b/admin/views/templates/tmpl/default_batch_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/templates/tmpl/default_batch_footer.php b/admin/views/templates/tmpl/default_batch_footer.php index 52f8f32d6..458d9ceca 100644 --- a/admin/views/templates/tmpl/default_batch_footer.php +++ b/admin/views/templates/tmpl/default_batch_footer.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/templates/tmpl/default_body.php b/admin/views/templates/tmpl/default_body.php index 321ff8b54..498d5d611 100644 --- a/admin/views/templates/tmpl/default_body.php +++ b/admin/views/templates/tmpl/default_body.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_body.php diff --git a/admin/views/templates/tmpl/default_foot.php b/admin/views/templates/tmpl/default_foot.php index 01f3931bf..0f7b95c2d 100644 --- a/admin/views/templates/tmpl/default_foot.php +++ b/admin/views/templates/tmpl/default_foot.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/templates/tmpl/default_head.php b/admin/views/templates/tmpl/default_head.php index d65093e3b..c9f0631c1 100644 --- a/admin/views/templates/tmpl/default_head.php +++ b/admin/views/templates/tmpl/default_head.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_head.php diff --git a/admin/views/templates/tmpl/default_toolbar.php b/admin/views/templates/tmpl/default_toolbar.php index 95957bfd7..ed3c86ace 100644 --- a/admin/views/templates/tmpl/default_toolbar.php +++ b/admin/views/templates/tmpl/default_toolbar.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/templates/view.html.php b/admin/views/templates/view.html.php index b3677ded5..b59110b72 100644 --- a/admin/views/templates/view.html.php +++ b/admin/views/templates/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/componentbuilder.xml b/componentbuilder.xml index a4d04769e..d738a4501 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,15 +1,15 @@ COM_COMPONENTBUILDER - 19th March, 2016 + 22nd April, 2016 Llewellyn van der Merwe info@vdm.io https://www.vdm.io/joomla-component-builder Copyright (C) 2015. All Rights Reserved GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html - 2.1.2 + 2.1.3 Component Builder (v.2.1.2) +

Component Builder (v.2.1.3)

The Component Builder for Joomla that is highly advanced, truly able to build extremely complex components in a fraction of the time.

Created by Llewellyn van der Merwe
Development started 30th April, 2015

diff --git a/script.php b/script.php index a6bcf5108..d1ce5ca03 100644 --- a/script.php +++ b/script.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage script.php @@ -1815,7 +1815,7 @@ class com_componentbuilderInstallerScript echo ' -

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

'; +

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

'; } } } diff --git a/site/assets/css/site.css b/site/assets/css/site.css index 59fe29ac3..35074ee56 100644 --- a/site/assets/css/site.css +++ b/site/assets/css/site.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage site.css diff --git a/site/componentbuilder.php b/site/componentbuilder.php index 2a0a7ac6a..fa8dadf06 100644 --- a/site/componentbuilder.php +++ b/site/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php @@ -33,7 +33,7 @@ $document->addStyleSheet('components/com_componentbuilder/assets/css/site.css'); $document->addScript('components/com_componentbuilder/assets/js/site.js'); // Require helper files -JLoader::register('ComponentbuilderHelper', dirname(__FILE__) . '/helpers/componentbuilder.php'); +JLoader::register('ComponentbuilderHelper', dirname(__FILE__) . '/helpers/componentbuilder.php'); JLoader::register('ComponentbuilderHelperRoute', dirname(__FILE__) . '/helpers/route.php'); ###SITE_GLOBAL_EVENT### // import joomla controller library diff --git a/site/controller.php b/site/controller.php index c59cd5f17..d97b08a1d 100644 --- a/site/controller.php +++ b/site/controller.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage controller.php diff --git a/site/controllers/help.php b/site/controllers/help.php index 357ab6ed5..f5dd7f805 100644 --- a/site/controllers/help.php +++ b/site/controllers/help.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage help.php diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php index b5f07a056..fc52aa9f2 100644 --- a/site/helpers/componentbuilder.php +++ b/site/helpers/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php @@ -504,6 +504,45 @@ abstract class ComponentbuilderHelper } 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('#__componentbuilder_'.$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 diff --git a/site/helpers/headercheck.php b/site/helpers/headercheck.php index 19cd8d11c..41e7a8afe 100644 --- a/site/helpers/headercheck.php +++ b/site/helpers/headercheck.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage headercheck.php diff --git a/site/helpers/route.php b/site/helpers/route.php index f94e5a553..bb574d2f0 100644 --- a/site/helpers/route.php +++ b/site/helpers/route.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage route.php diff --git a/site/router.php b/site/router.php index e154f869a..6158324e5 100644 --- a/site/router.php +++ b/site/router.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.1.2 - @build 19th March, 2016 + @version 2.1.3 + @build 22nd April, 2016 @created 30th April, 2015 @package Component Builder @subpackage router.php